MMO를 구축 중이며 NPC를 추가하고 싶습니다. 문제는 기본 디자인을 모른다는 것입니다. 계산, 클라이언트 또는 서버는 무엇입니까? 서버가 이벤트와 반응을 계산하는 것을 이해하지만 플레이어의 길 찾기와 위치와 움직임에 관해서 누가 계산합니까?
누가 서버 나 클라이언트의 AI를 계산합니까? 서버가 길 찾기, 위치, 움직임 등을 계산하는 것을 상상할 수 없었습니다. 이해하는 데 도움이 필요합니다. 감사합니다. 도움이 될 것입니다.
MMO를 구축 중이며 NPC를 추가하고 싶습니다. 문제는 기본 디자인을 모른다는 것입니다. 계산, 클라이언트 또는 서버는 무엇입니까? 서버가 이벤트와 반응을 계산하는 것을 이해하지만 플레이어의 길 찾기와 위치와 움직임에 관해서 누가 계산합니까?
누가 서버 나 클라이언트의 AI를 계산합니까? 서버가 길 찾기, 위치, 움직임 등을 계산하는 것을 상상할 수 없었습니다. 이해하는 데 도움이 필요합니다. 감사합니다. 도움이 될 것입니다.
답변:
요즘 대부분의 MMO는 안전상의 이유로 서버 쪽에서 중요한 작업을 수행합니다. 클라이언트에게 많은 양의 짐을 싣을 수 없기 때문에 가장 먼저 도끼가되는 것은 AI 루틴입니다. 대부분의 개발자는 클라이언트 측이 예외가 아니라 일반적으로 해킹 가능한 것으로 생각합니다.
Scalify의 Badumna ( http://www.scalify.com/badumna.php )는 클라이언트 측에서 계산을 수행하여 클라이언트 측으로 전송한다는 점에서 클라이언트의 일부를 오프로드하려고합니다. 일부 데이터는 전용 서버와 마찬가지로 클라이언트에게 전달되기 전에 인증을 받기 위해 인증 피어로 전송됩니다. 문제는 부정 행위를 방지하려면 멀티 플레이어 게임의 모든 데이터를 신뢰할 수있는 피어를 통해 보내야한다는 것입니다. Badumna는 당신이 원하는 것에 가장 가까운 것처럼 보였지만 사기꾼을 잡을 수는 없습니다-일부는 잡을 수는 있지만 중요한 것 (예 : 거의 모든 것)은 서버에서 수행해야합니다. 측면.
나는 Badumna에서 일부를 확장 할 수 있습니다. 왜냐하면 여전히 유용 할 수 있기 때문입니다 (그러나 클라이언트가 부정 행위 할 것이기 때문에 클라이언트에서 중요한 것을 오프로드하는 것이 좋습니다).
Badumna는 데이터 운영을위한 하이브리드 아키텍처를 제공합니다. 중요하고 검증해야 할 사항과 중요하지 않은 것을 결정하는 데있어 개발자에게 완전한 제어 기능을 제공합니다.
MMO에서 모든 단일 비트 정보를 확인해야하는 경우 Badumna는 클라이언트-서버 솔루션으로 작동합니다. 그러나 요구 사항이 다양한 MMO 응용 프로그램에는 서로 다른 범주가 있다고 생각합니다. 예를 들어, 종종 MMO는 플레이어가 바람을 피우고 모든 정보를 확인해야하는 전투 지역을 갖습니다. 그러나, 플레이어가 걷기 / 실행 / 댄스 / 채팅 만 할 수있는 영역도 있습니다. 이러한 영역은 완전한 검증이 필요하지 않으며 Badumna의 분산 네트워크를 활용하여 제공 할 수있는 확장 성의 이점을 활용할 수 있습니다.
둘째, Badumna는 신원 보호 (사용자가 다른 사람인 척할 수 없도록 함), 불만 처리 프록시 (악의적 / 치팅 플레이어를 신뢰할 수있는 출처에 신고하도록 클라이언트를 구성 할 수 있도록 허용) 및 블랙리스트와 같이 개발자가 액세스 할 수있는 추가 보안 기능을 제공합니다. (게임에서 악의적 인 플레이어 금지).
나는 실제로 Badumna를 그렇게 많이 탐험하지 않았으므로 알지 못하는 문제와 기능이 있지만 적어도 그것에 대해 간략하게 살펴 보았습니다.
tl; dr : 클라이언트는 실제로 인터넷에 연결된 키보드와 마우스 여야합니다.
MMO는 공용 (인터넷) 연결 서버입니다. 완전히 제어 할 수있는 항목은 공개적으로 액세스 할 수 없어야합니다. 그렇지 않으면 공격자가 NPC를 제어 할 수 있습니다. 명령에 일종의 암호화를 수행하지 않으면 (성능에 영향을 미침) 클라이언트가 자신의 코드 만 실행한다고 신뢰할 수 없습니다.
지연을 보상하기 위해 클라이언트에서 NPC 움직임을 예측하는 것이 좋습니다. 이론적으로 클라이언트 프로그램에 원하는만큼의 AI 동작을 포함시키고 주기적으로 동기화하도록 할 수 있습니다. 그러나 클라이언트가 NPC의 동작을 지시하도록 허용하면 클라이언트가 게임 세계를 망칠 수 있습니다. 클라이언트가 서버의 게임 세계와 분리되면 제어 할 수없는 불량 NPC가 생깁니다.
클라이언트에 AI를 배포하면 확장성에 영향을 줄 수 있기 때문에 정말 부끄러운 일입니다.
다른 답변을 바탕으로, "offload and verify"전략은 원래 계산보다 검증이 더 쉬운 상황에서 (또는 가끔 현장 점검만으로 사기꾼을 잡기에 충분할 때) 유용 할 수 있습니다.
예를 들어, 클라이언트가 A * 경로 찾기를 수행하고 결과를 서버로 보내도록하려면 서버는 a) 경로가 유효한지, b) 더 짧은 경로가 없는지 확인하면됩니다. 확인해야하는 경로의 길이에 상한 이 있으므로 경로 유효성을 확인하는 것이 쉬워야하고 최적을 확인 하는 것이 최적의 경로를 찾는 것보다 쉬울 수 있습니다. (특히, 클라이언트가 직선 경로를 반환하는 경우에는 그것이 유효한 한 분명히 최적입니다.) 솔직히 말해서,이 특정 트릭이 실제로 유용할지는 모르겠지만 근본적인 장애물은 없습니다. 그것에.
그러나 NPC AI를 클라이언트에 오프로드하면 해킹 된 클라이언트가이를 사용하여 NPC 동작을 미리 예측할 수 있습니다. 일부 유형의 게임이나 상황에서는 심각한 문제가 될 수 있습니다.
서버 쪽에서 간단한 AI 루틴과 게임 크리티컬 계산을하는 것이 가장 좋으며 클라이언트 쪽에서는 복잡한 게임 크리티컬 작업을 처리하는 것이 가장 좋습니다.
예를 들어, 서버는 적대적인 NPC의 위치와 플레이어 캐릭터의 위치를 알고 있습니다. 플레이어 캐릭터가 NPC의 범위 내에 들어 오면 NPC가 플레이어를 공격해야하는지 확인하기 위해 서버 측 계산을 수행 할 수 있으며 NPC가 플레이어에게 도달하는 데 걸리는 시간을 결정하기위한 간단한 경로 찾기 라우팅을 수행 할 수 있습니다.
NPC가 공격 상태로 전환되면 클라이언트는 애니메이션 및 세밀한 경로 찾기를 처리 할 수 있습니다. NPC가 클라이언트와 공격을하기에 충분히 가까이있을 때 서버는 공격이 발생했는지, 손상이 무엇인지 등을 계산하기 위해 계산을 수행 할 수 있습니다.
게임의 결과에 실제로 영향을 미치는 계산은 서버에서 처리하고 클라이언트로 전달하는 반면 중요하지 않은 계산은 클라이언트에서 처리해야합니다.
가장 간단한 경우 서버가 예상되는 위치와 클라이언트를 동기화 상태로 유지하고 서버가 확인한 다음 클라이언트가 다시 계산합니다.