롤백 이벤트 해설
이 문서에서는 롤백 관련 이벤트에 대해 설명합니다. 이 이벤트들은 "기타" 카테고리에서 찾을 수 있습니다.
롤백 시작 이벤트 (Rollback Start)
이 이벤트는 모든 플레이어가 연결되고 멀티플레이어 게임이 시작될 때 트리거됩니다. 또한 방이 나중에 변경될 때도 발생합니다. 이 이벤트 내에서는 rollback_event_param
이라는 구조체를 통해 이벤트와 관련된 모든 값을 얻을 수 있습니다.
구조체 멤버 | 설명 |
---|---|
num_players | 게임에 있는 총 플레이어 수 |
player_id | 로컬 플레이어의 ID (0부터 시작하며, 처음에는 호스트 자신) |
first_start | 멀티플레이어 게임이 방금 시작되었으면 true, 방만 변경되었으면 false |
late_join | 플레이어가 늦게 참여한 경우 true, 그렇지 않으면 false |
이 이벤트는 플레이어 객체가 아닌 게임 관리자 객체에서만 사용해야 합니다. rollback_event_param.player_id
는 항상 로컬 플레이어의 ID를 나타내며, 이벤트가 트리거된 플레이어 인스턴스의 ID가 아닙니다. 예를 들어, 플레이어 0인 경우, 플레이어 1의 인스턴스에서 롤백 시작 이벤트를 잡더라도 player_id
변수는 여전히 0입니다.
롤백 이벤트 (Rollback Event)
롤백 이벤트는 게임의 여러 지점에서 트리거되며, rollback_event_id
변수를 포함합니다. 이 변수는 어떤 종류의 이벤트가 트리거되었는지를 나타냅니다. rollback_event_param
이라는 구조체가 제공되며, 이벤트와 관련된 모든 값을 포함합니다.
다음은 rollback_event_id
에 저장될 수 있는 상수들입니다:
상수 | 설명 |
---|---|
rollback_chat_message | rollback_chat()/Send Message (Rollback) 에서 메시지를 받을 때 트리거됩니다. 이 이벤트 동안 rollback_event_param 에는 다음 변수가 포함됩니다: - message: 수신된 메시지 문자열 - from: 메시지를 보낸 플레이어의 ID - to: 메시지를 받은 플레이어의 ID; 모든 사람에게 보낸 경우 -1 |
rollback_player_prefs | 플레이어가 자신의 선호도를 설정할 때 트리거됩니다. 이 이벤트 동안 rollback_event_param 에는 다음 변수가 포함됩니다: - player_id: 선호도를 설정한 플레이어의 ID - preferences: 해당 플레이어의 설정된 선호도 |
rollback_game_interrupted | 불안정한 연결을 가진 플레이어로 인해 게임이 중단될 때 트리거됩니다. 이 이벤트 동안 rollback_event_param 에는 다음 변수가 포함됩니다: - player_id: 연결 문제를 가진 플레이어의 ID - timeout: 해당 플레이어가 타임아웃되고 연결이 끊어지기까지 남은 시간 (밀리초 단위) |
rollback_game_resumed | 중단된 게임이 재개될 때 트리거됩니다. 재연결된 플레이어의 ID는 rollback_event_param.player_id 에 저장됩니다. |
rollback_game_full | 연결하려는 게임/방이 이미 가득 찼을 때 트리거됩니다. |
rollback_game_info | 방에 대한 정보가 수신되었지만 완전히 참여하기 전에 트리거됩니다. 이 이벤트 동안 rollback_event_param 에는 다음 변수가 포함됩니다: - num_players: 게임에 있는 총 플레이어 수 - player_id: 로컬 플레이어의 ID (0부터 시작) |
rollback_end_game | 서버가 클라이언트에게 게임을 중지하라고 요청할 때 트리거됩니다. 일반적으로 이 이벤트는 클라이언트가 일관되지 않은 상태에 있을 때 발생합니다. |
rollback_connect_info | 방이 생성되고 다른 플레이어와 공유할 준비가 되었을 때 트리거됩니다. 공유 가능한 URL은 rollback_event_param.share_url 에 저장됩니다. |
rollback_connect_error | 연결 오류가 발생했을 때 트리거됩니다. rollback_event_param 구조체에는 다음 변수가 포함됩니다: - status: 응답의 HTTP 상태 코드 - error: 오류를 설명하는 문자열 |
rollback_connection_rejected | 연결 시도가 거부되었을 때 트리거됩니다. 오류는 잘못된 토큰, 클라이언트 버전 불일치 또는 프로토콜 버전 불일치로 인해 발생할 수 있습니다. |
rollback_protocol_rejected | 연결 시도가 거부되었을 때 트리거됩니다. 이는 클라이언트가 구식 프로토콜 버전을 사용하고 있음을 의미합니다. |
rollback_high_latency | 서버에 대한 지연 시간이 너무 높을 때 트리거됩니다. |
피어 관련 이벤트
상수 | 설명 |
---|---|
rollback_connected_to_peer | 새로운 플레이어가 연결되었을 때 트리거됩니다. 연결된 플레이어의 ID는 rollback_event_param.player_id 에 저장됩니다. |
rollback_synchronizing_with_peer | 새로운 플레이어와 동기화하는 동안 발생합니다. 이 이벤트 동안 rollback_event_param 에는 다음 변수가 포함됩니다: - player_id: 동기화 중인 플레이어의 ID - count: 완료된 동기화 단계 수 - total: 완료해야 할 총 동기화 단계 수 |
rollback_synchronized_with_peer | 플레이어와의 동기화가 완료되었을 때 트리거됩니다. 동기화된 플레이어의 ID는 rollback_event_param.player_id 에 저장됩니다. |
rollback_disconnected_from_peer | 플레이어가 연결을 끊었을 때 트리거됩니다. 연결이 끊어진 플레이어의 ID는 rollback_event_param.player_id 에 저장됩니다. |
활용 예제
// 롤백 시작 이벤트 처리
if (event_type == ev_rollback_start) {
var numPlayers = rollback_event_param.num_players;
var localPlayerId = rollback_event_param.player_id;
// 추가 로직...
}
// 롤백 채팅 메시지 처리
if (event_type == ev_rollback_event && rollback_event_id == rollback_chat_message) {
var message = rollback_event_param.message;
var fromPlayerId = rollback_event_param.from;
// 메시지 처리 로직...
}
// 게임 중단 처리
if (event_type == ev_rollback_event && rollback_event_id == rollback_game_interrupted) {
var playerId = rollback_event_param.player_id;
var timeout = rollback_event_param.timeout;
// 중단 처리 로직...
}
// 새로운 플레이어 연결 처리
if (event_type == ev_rollback_event && rollback_event_id == rollback_connected_to_peer) {
var newPlayerId = rollback_event_param.player_id;
// 새로운 플레이어 처리 로직...
}