메인 콘텐츠로 건너뛰기
onVerifiedPlayWaveServer.init에 전달하는 선택 콜백으로, 검증 흐름이 종료될 때 플레이어당 정확히 1회 호출됩니다. PC방 유저인지 여부와 무관하게 항상 발화합니다. 이 콜백이 없을 때는 “검증은 끝났지만 카페 유저는 아님”을 알기 위해 isPcCafeUser를 폴링해야 했습니다 (onPcCafe는 카페 유저에게만 발화하므로). onVerified가 그 한계를 메웁니다.

시그니처

onVerified = function(player, isPcCafe, reason)
    -- player:    Player 인스턴스
    -- isPcCafe:  boolean — 확정값 (실패 경로에서는 항상 false)
    -- reason:    string — PlayWaveServer.VerifyReason 값 중 하나
end
  • PlayWaveClientReady 이벤트 1회당 정확히 1번 발화
  • isPcCafe는 항상 boolean
  • reasonPlayWaveServer.VerifyReason에 정의된 값 중 하나 (아래 참조)
  • 콜백 내부에서 발생하는 에러는 pcall로 잡혀 warn 로그만 남기고, verify 흐름 자체는 깨지지 않음

발화 시점

onVerifiedPlayWaveClientReady 핸들러 내부에서 호출됩니다. 즉, 클라이언트의 PlayWaveClient 스크립트가 로드 완료를 서버에 알린 후입니다. 어떤 분기를 타느냐에 따라 정확한 발화 지점이 다릅니다.
분기발화 시점reasonisPcCafe
텔레포트 resumePOST /game/session/check 응답 후, 세션 등록 완료 시점RESUMED (성공) 또는 RESUME_REJECTED (4xx/5xx/네트워크 등 모든 실패)성공 → 출발지에서 상속된 값 / 실패 → false
신규 OTT 검증POST /game/session/verify 응답 후VERIFIED (성공) / REQUEST_FAILED (HTTP/네트워크/디코딩 에러) / REJECTED (is_valid: false)성공 → 서버 응답값 / 실패 → false
LaunchData에 OTT 없음HTTP 호출 없이 즉시NO_OTTfalse
OTT가 playwave_ prefix가 아님HTTP 호출 없이 즉시INVALID_PREFIXfalse

onPcCafe와의 발화 순서

둘 다 발화하는 카페 유저 성공 경로 기준:
  • 신규 OTT 검증: onPcCafe + 클라이언트 PC_CAFE 이벤트 → onVerified
  • 텔레포트 resume: onVerifiedonPcCafe + 클라이언트 PC_CAFE 이벤트
두 경로 사이의 순서가 다르므로 의존하지 마세요. onVerified는 순수하게 “검증 흐름 종료” 신호로만 사용하고, 카페 전용 부수효과는 onPcCafe에 두세요.

발화하지 않는 경우

  • TeleportInitFailed 세션 복원 — 텔레포트 시도 전에 이미 검증된 플레이어이므로 재발화 시 동일 플레이어에게 중복 발화됨
  • PlayerRemoving — 검증 이벤트가 아님

검증 reason 값

onVerified가 받는 reasonPlayWaveServer.VerifyReason에 정의된 값입니다.
Reason의미isPcCafe
VERIFIEDOTT 검증 성공서버 응답값
RESUMED텔레포트 resume + /game/session/check 통과출발지에서 상속
RESUME_REJECTED텔레포트 resume이 서버 사이드 check에서 실패 (위변조, 만료 등)항상 false
NO_OTTLaunchData에 OTT 없이 진입항상 false
INVALID_PREFIXOTT가 playwave_ prefix로 시작하지 않음 (다른 시스템 토큰으로 간주)항상 false
REQUEST_FAILEDverify HTTP/네트워크/디코딩 에러항상 false
REJECTEDverify API가 is_valid: false 반환항상 false

사용 예시

local PlayWaveServer = require(script.PlayWaveServer)
local Reason = PlayWaveServer.VerifyReason

PlayWaveServer.init({
    apiKey = apiKey,
    apiUrl = apiUrl,

    onPcCafe = function(player)
        -- 카페 전용 혜택 (카페 유저일 때만 발화)
    end,

    onVerified = function(player, isPcCafe, reason)
        if reason == Reason.VERIFIED or reason == Reason.RESUMED then
            -- 정상 세션 — isPcCafe로 분기
        else
            -- 검증이 정상 세션을 만들지 못함
        end
    end,
})

onPcCafe와의 관계

결과onPcCafeonVerified
카페 유저, 검증 성공발화발화 (VERIFIED, isPcCafe=true)
비카페 유저, 검증 성공발화 안 함발화 (VERIFIED, isPcCafe=false)
Resume 성공, 카페발화발화 (RESUMED, isPcCafe=true)
Resume 거절발화 안 함발화 (RESUME_REJECTED, isPcCafe=false)
OTT 없음 / prefix 불일치 / 요청 에러 / 거절발화 안 함해당 reason으로 발화, isPcCafe=false
onVerified는 순수 추가 기능입니다. 기존 onPcCafe 동작은 변경되지 않습니다.

비고

RESUME_REJECTED로 텔레포트 resume의 서버 check가 실패해도 로컬 세션은 그대로 둡니다. 다음 하트비트에서 서버가 404/410을 반환하면 자동으로 정리됩니다.