MMO에서 AI 계산은 누구입니까?


30

MMO를 구축 중이며 NPC를 추가하고 싶습니다. 문제는 기본 디자인을 모른다는 것입니다. 계산, 클라이언트 또는 서버는 무엇입니까? 서버가 이벤트와 반응을 계산하는 것을 이해하지만 플레이어의 길 찾기와 위치와 움직임에 관해서 누가 계산합니까?

누가 서버 나 클라이언트의 AI를 계산합니까? 서버가 길 찾기, 위치, 움직임 등을 계산하는 것을 상상할 수 없었습니다. 이해하는 데 도움이 필요합니다. 감사합니다. 도움이 될 것입니다.


2
용어에주의하십시오-예를 들어 NPC는 플레이어가 아닙니다.
Kylotan

답변:


25

요즘 대부분의 MMO는 안전상의 이유로 서버 쪽에서 중요한 작업을 수행합니다. 클라이언트에게 많은 양의 짐을 싣을 수 없기 때문에 가장 먼저 도끼가되는 것은 AI 루틴입니다. 대부분의 개발자는 클라이언트 측이 예외가 아니라 일반적으로 해킹 가능한 것으로 생각합니다.

Scalify의 Badumna ( http://www.scalify.com/badumna.php )는 클라이언트 측에서 계산을 수행하여 클라이언트 측으로 전송한다는 점에서 클라이언트의 일부를 오프로드하려고합니다. 일부 데이터는 전용 서버와 마찬가지로 클라이언트에게 전달되기 전에 인증을 받기 위해 인증 피어로 전송됩니다. 문제는 부정 행위를 방지하려면 멀티 플레이어 게임의 모든 데이터를 신뢰할 수있는 피어를 통해 보내야한다는 것입니다. Badumna는 당신이 원하는 것에 가장 가까운 것처럼 보였지만 사기꾼을 잡을 수는 없습니다-일부는 잡을 수는 있지만 중요한 것 (예 : 거의 모든 것)은 서버에서 수행해야합니다. 측면.

나는 Badumna에서 일부를 확장 할 수 있습니다. 왜냐하면 여전히 유용 할 수 있기 때문입니다 (그러나 클라이언트가 부정 행위 할 것이기 때문에 클라이언트에서 중요한 것을 오프로드하는 것이 좋습니다).

Badumna는 데이터 운영을위한 하이브리드 아키텍처를 제공합니다. 중요하고 검증해야 할 사항과 중요하지 않은 것을 결정하는 데있어 개발자에게 완전한 제어 기능을 제공합니다.

MMO에서 모든 단일 비트 정보를 확인해야하는 경우 Badumna는 클라이언트-서버 솔루션으로 작동합니다. 그러나 요구 사항이 다양한 MMO 응용 프로그램에는 서로 다른 범주가 있다고 생각합니다. 예를 들어, 종종 MMO는 플레이어가 바람을 피우고 모든 정보를 확인해야하는 전투 지역을 갖습니다. 그러나, 플레이어가 걷기 / 실행 / 댄스 / 채팅 만 할 수있는 영역도 있습니다. 이러한 영역은 완전한 검증이 필요하지 않으며 Badumna의 분산 네트워크를 활용하여 제공 할 수있는 확장 성의 이점을 활용할 수 있습니다.

둘째, Badumna는 신원 보호 (사용자가 다른 사람인 척할 수 없도록 함), 불만 처리 프록시 (악의적 / 치팅 플레이어를 신뢰할 수있는 출처에 신고하도록 클라이언트를 구성 할 수 있도록 허용) 및 블랙리스트와 같이 개발자가 액세스 할 수있는 추가 보안 기능을 제공합니다. (게임에서 악의적 인 플레이어 금지).

나는 실제로 Badumna를 그렇게 많이 탐험하지 않았으므로 알지 못하는 문제와 기능이 있지만 적어도 그것에 대해 간략하게 살펴 보았습니다.

tl; dr : 클라이언트는 실제로 인터넷에 연결된 키보드와 마우스 여야합니다.


9

짧은 대답은 표준 MMO의 경우 AI 계산은 항상 서버에서 수행한다는 것입니다.

일부 게임은 클라이언트가 AI를 예측하도록하므로 NPC가 더 빨리 반응하는 것처럼 보이지만 환상 일뿐입니다. 실제 NPC는 항상 서버에 의해 제어됩니다.


5

MMO는 공용 (인터넷) 연결 서버입니다. 완전히 제어 할 수있는 항목은 공개적으로 액세스 할 수 없어야합니다. 그렇지 않으면 공격자가 NPC를 제어 할 수 있습니다. 명령에 일종의 암호화를 수행하지 않으면 (성능에 영향을 미침) 클라이언트가 자신의 코드 만 실행한다고 신뢰할 수 없습니다.

지연을 보상하기 위해 클라이언트에서 NPC 움직임을 예측하는 것이 좋습니다. 이론적으로 클라이언트 프로그램에 원하는만큼의 AI 동작을 포함시키고 주기적으로 동기화하도록 할 수 있습니다. 그러나 클라이언트가 NPC의 동작을 지시하도록 허용하면 클라이언트가 게임 세계를 망칠 수 있습니다. 클라이언트가 서버의 게임 세계와 분리되면 제어 할 수없는 불량 NPC가 생깁니다.

클라이언트에 AI를 배포하면 확장성에 영향을 줄 수 있기 때문에 정말 부끄러운 일입니다.


2
암호화는 대부분 쓸모가 없습니다. 클라이언트는 전송 된 모든 것을 해독 할 수 있어야하며 클라이언트는 리버스 엔지니어링 될 수 있습니다. 기껏해야 암호화를하면 누군가 속이는 클라이언트를 만드는 속도가 느려집니다.
Adam

2

일반적으로 서버는 클라이언트에 전달되거나 클라이언트로부터 수신 된 모든 데이터를 계산하거나 확인해야합니다. 그러나 그것은 클라이언트를 얼마나 신뢰할 수 있고 계산이 얼마나 중요한지에 달려 있습니다. 때때로 클라이언트에서 주 계산을 수행 할 수 있고 서버가 간단한 방법을 사용하여 결과 데이터를 검증 할 수 있습니다.


1

다른 답변을 바탕으로, "offload and verify"전략은 원래 계산보다 검증이 더 쉬운 상황에서 (또는 가끔 현장 점검만으로 사기꾼을 잡기에 충분할 때) 유용 할 수 있습니다.

예를 들어, 클라이언트가 A * 경로 찾기를 수행하고 결과를 서버로 보내도록하려면 서버는 a) 경로가 유효한지, b) 더 짧은 경로가 없는지 확인하면됩니다. 확인해야하는 경로의 길이에 상한 이 있으므로 경로 유효성을 확인하는 것이 쉬워야하고 최적을 확인 하는 것이 최적의 경로를 찾는 것보다 쉬울 있습니다. (특히, 클라이언트가 직선 경로를 반환하는 경우에는 그것이 유효한 한 분명히 최적입니다.) 솔직히 말해서,이 특정 트릭이 실제로 유용할지는 모르겠지만 근본적인 장애물은 없습니다. 그것에.

그러나 NPC AI를 클라이언트에 오프로드하면 해킹 된 클라이언트가이를 사용하여 NPC 동작을 미리 예측할 수 있습니다. 일부 유형의 게임이나 상황에서는 심각한 문제가 될 수 있습니다.


1

서버 쪽에서 간단한 AI 루틴과 게임 크리티컬 계산을하는 것이 가장 좋으며 클라이언트 쪽에서는 복잡한 게임 크리티컬 작업을 처리하는 것이 가장 좋습니다.

예를 들어, 서버는 적대적인 NPC의 위치와 플레이어 캐릭터의 위치를 ​​알고 있습니다. 플레이어 캐릭터가 NPC의 범위 내에 들어 오면 NPC가 플레이어를 공격해야하는지 확인하기 위해 서버 측 계산을 수행 할 수 있으며 NPC가 플레이어에게 도달하는 데 걸리는 시간을 결정하기위한 간단한 경로 찾기 라우팅을 수행 할 수 있습니다.

NPC가 공격 상태로 전환되면 클라이언트는 애니메이션 및 세밀한 경로 찾기를 처리 할 수 ​​있습니다. NPC가 클라이언트와 공격을하기에 충분히 가까이있을 때 서버는 공격이 발생했는지, 손상이 무엇인지 등을 계산하기 위해 계산을 수행 할 수 있습니다.

게임의 결과에 실제로 영향을 미치는 계산은 서버에서 처리하고 클라이언트로 전달하는 반면 중요하지 않은 계산은 클라이언트에서 처리해야합니다.

가장 간단한 경우 서버가 예상되는 위치와 클라이언트를 동기화 상태로 유지하고 서버가 확인한 다음 클라이언트가 다시 계산합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.