¿Quién hace los cálculos de IA en un MMO?

30

Estoy construyendo un MMO y quiero agregar NPC. El caso es que no conozco el diseño básico. ¿Qué hacen los cálculos, los clientes o el servidor? Entiendo que el servidor calcula eventos y reacciones, pero cuando se trata de encontrar caminos y posiciones y movimientos del jugador, ¿quién calcula eso?

¿Quién calcula la IA del servidor o cliente? No podía imaginar al servidor calculando la ruta, la posición, el movimiento, etc. Por favor, necesito ayuda para entender esto, gracias, cualquier cosa ayudará.

Patrick Lorio
fuente
2
Cuidado con tu terminología: los NPC no son jugadores, por ejemplo.
Kylotan

Respuestas:

25

La mayoría de los MMO en estos días tienen algo importante hecho en el lado del servidor, por razones de seguridad. No puede descargar mucho al cliente, por lo que una de las primeras cosas eliminadas son las rutinas de IA. Creo que la mayoría de los desarrolladores consideran que el lado del cliente es pirateable como una regla, no una excepción.

Badumna de Scalify ( http://www.scalify.com/badumna.php ) intenta descargar parte de ella en los clientes en el sentido de que se harán cálculos del lado del cliente y se enviarán entre ellos; algunos datos también se envían a un compañero autoritario para su validación antes de pasarlos a los clientes, al igual que un servidor dedicado. El problema es que TODOS los datos en un juego multijugador DEBEN enviarse a través de un par autorizado si quieres evitar trampas. Mencioné a Badumna, ya que parecía lo más parecido a lo que podrías desear, pero incluso eso no podrá atrapar a los tramposos, puede atrapar a algunos, pero cualquier cosa crítica (es decir, todo, más o menos) debe hacerse en el servidor. lado.

Podría expandir un poco en Badumna, porque aún podría ser algo que le resultará útil (pero le insto a que reconsidere la descarga de cualquier cosa importante en los clientes, porque los clientes lo engañarán).

Badumna ofrece una arquitectura híbrida para operaciones de datos. Proporciona un control completo al desarrollador al decidir qué es crítico (y debe verificarse) y qué no (y así puede ser enviado por la red descentralizada).

Si un MMO requiere que se verifique cada bit de información, Badumna funcionará como una solución cliente-servidor. Sin embargo, creo que hay diferentes categorías de aplicaciones MMO con diferentes requisitos. Por ejemplo, con bastante frecuencia un MMO tendrá zonas de combate donde los jugadores probablemente hagan trampa y, por lo tanto, se debe verificar cada bit de información. Sin embargo, también hay zonas donde los jugadores solo pueden caminar / correr / bailar / chatear. Dichas zonas no requieren una verificación completa y pueden utilizar la red descentralizada de Badumna y beneficiarse de la escalabilidad que puede ofrecer.

En segundo lugar, Badumna proporciona características de seguridad adicionales a las que los desarrolladores pueden acceder, como la protección de identidad (para que los usuarios no puedan fingir ser otra persona), el proxy de reclamos (que permite a los clientes configurarse para informar a los jugadores maliciosos / engañadores a una fuente confiable) y una lista negra (prohibición de jugadores maliciosos de los juegos).

Realmente no he explorado tanto Badumna, por lo que podría haber problemas y características que desconozco, pero al menos le he dado una mirada superficial.

tl; dr: el cliente realmente debería ser solo un teclado y un mouse conectados a internet.

Robert S.
fuente
9

La respuesta corta es que para un MMO estándar, el servidor siempre realiza los cálculos de IA.

Algunos juegos harán que el cliente intente predecir la IA, por lo que los NPC parecerán reaccionar más rápidamente, pero eso es solo una ilusión; El NPC real siempre está controlado por el servidor.

Trevor Powell
fuente
5

Un MMO es un servidor público (Internet). Cualquier cosa que quieras controlar por completo no debería ser accesible al público, de lo contrario te arriesgas a permitir que un atacante controle NPC. A menos que esté haciendo algún tipo de cifrado en sus comandos (lo que afectará el rendimiento), no puede confiar en que el cliente ejecute solo su propio código.

Predecir movimientos de NPC en el cliente para compensar el retraso es una gran idea; teóricamente podrías incluir todo el comportamiento de IA que quisieras en el programa del cliente y hacer que se sincronicen periódicamente, pero permitir que el cliente dicte el comportamiento de un NPC le otorgaría al cliente el potencial de meterse con el mundo del juego. Si el cliente se desincroniza del mundo del juego en el servidor, entonces terminarás con NPC corruptos incontrolables.

Lo cual es una pena, realmente, porque distribuir inteligencia artificial sobre los clientes podría afectar la escalabilidad.

Tullo_x86
fuente
2
El cifrado es en su mayoría inútil: el cliente debe poder descifrar todo lo que se le envíe, y el cliente puede realizar ingeniería inversa. En el mejor de los casos, el cifrado ralentizará a alguien que cree un cliente engañoso.
Adam
2

Por lo general, el servidor debe calcular o validar todos los datos pasados ​​o recibidos del cliente. Pero depende de cuánto puede confiar en el cliente y cuán importante es ese cálculo. A veces, el cálculo principal se puede realizar en el cliente y el servidor puede utilizar un método simple para validar los datos resultantes.

trébol rojo
fuente
1

Para aprovechar las otras respuestas, la estrategia de "descargar y verificar" podría ser útil, en situaciones en las que la verificación es más fácil que el cálculo original (o donde solo verificaciones puntuales ocasionales serían suficientes para atrapar tramposos).

Por ejemplo, si hiciera que el cliente hiciera una búsqueda de ruta A * y enviara los resultados al servidor, todo lo que el servidor tendría que hacer es verificar que a) la ruta sea válida yb) no haya una ruta más corta. Verificar la validez de la ruta debería ser fácil, y verificar la optimización podría ser más fácil que encontrar la ruta óptima para comenzar, ya que ahora tiene un límite superior en la longitud de las rutas que necesita verificar. (En particular, si el cliente devuelve un camino en línea recta, obviamente es óptimo siempre que sea válido.) Para ser sincero, no tengo idea de si este truco en particular sería útil en la práctica, pero no veo ningún obstáculo fundamental lo.

Sin embargo, tenga en cuenta que si descarga NPC AI a los clientes, un cliente pirateado podría usarlo para predecir el comportamiento de NPC por adelantado. Para algunos tipos de juegos o situaciones, esto podría ser un problema grave.

Ilmari Karonen
fuente
1

Probablemente sea mejor tener algunas rutinas simples de IA y cálculos críticos para el juego en el lado del servidor, mientras se manejan las complejas operaciones no críticas para el juego en el lado del cliente.

Por ejemplo, el servidor sabe dónde está un NPC hostil y dónde están los personajes jugadores. Cuando el personaje del jugador se encuentra dentro del alcance del NPC, se puede hacer un cálculo del lado del servidor para ver si el NPC debe atacar al jugador, y se puede hacer una ruta de búsqueda de ruta simple para determinar cuánto tiempo le tomará al NPC llegar al jugador.

Una vez que el NPC se ha transferido al estado de ataque, el cliente puede lidiar con la animación y la búsqueda de rutas específicas. Cuando el NPC está lo suficientemente cerca del cliente para atacar, el servidor puede realizar cálculos para ver si el ataque golpeó, cuál fue el daño, etc.

Debes asegurarte de que el servidor maneja los cálculos que realmente afectan el resultado del juego y los pasa al cliente, mientras que los cálculos no críticos los maneja el cliente.

En el caso más simple, mantendrá al cliente sincronizado con el lugar donde espera que esté el servidor, el servidor verificará y luego el cliente calculará nuevamente.

jessecurry
fuente