이렇게 월드의 변화 정보를 서버에서 보내 줍니다. 플레이어 이동과 지형 충돌 판단, 공격과 방어 판정, 능력치에 대한 계산 결과 판정 등 게임 플레이 연산은 모두 서버에서만 합니다. 클라이언트에서는 어떤 판단도 하지 않습니다. 심지어 로컬 플레이어가 채팅 메시지를 입력해도, 그것이 서버로 전송된 후 서버에서 “표시하라.”라는 응답이 오기 전까지는 자기가 말한 것조차 표시되지 않을 것입니다.
global GameC2S { MyPlayer_Move(targetPosition); } global GameS2C { Character_Appear(ID, type, name, position); Character_ShowMove(ID, position); Bomb_Explode(ID, position); Character_Disappear(ID); }
Tip
PIDL 파일로 선언한 메시지들로, 자세한 것은 6장 프라우드넷에서 설명하겠습니다.
5.2.1절에서 소개한 ‘모든 것을 서버에서 처리하기’보다는 이렇게 ‘서버에 월드 상태를 클라이언트에 동기화하는 방식’이 훨씬 효율적입니다. 그럼에도 여전히 해결해야 할 문제가 있습니다.