2010-05-16 23 views
7

Un amigo y yo estábamos teniendo una discusión sobre cómo un servidor FPS actualiza los clientes conectados a él. Vimos un video de un tipo infiel en Battlefield: Bad Company 2 y vimos cómo resaltaba la posición de los enemigos en la pantalla y nos hizo pensar.¿Cuáles son las estrategias generales para el servidor de un juego de multijugador FPS para actualizar a sus clientes?

Su argumento fue que el servidor solo actualiza al cliente con información que es inmediatamente relevante para el cliente. Es decir. el servidor no enviará información sobre jugadores enemigos si están demasiado lejos del cliente o fuera de la línea de visión del cliente por razones de eficiencia. Sin embargo, no estaba seguro, sacó el ejemplo de alguien que se esconde detrás de una roca y no puede ver a nadie. Si el jugador repentinamente apareciera donde tenía tres jugadores en su línea de visión, habría una demora de 50ms antes de que se renderizaran en su pantalla mientras el servidor transmitía la información necesaria.

Mi argumento era el opuesto: que el servidor envía al cliente toda la información sobre cada jugador y le permite al cliente ordenar lo que está permitido y lo que no. Pensé que en realidad sería menos costoso computacionalmente para el servidor simplemente enviar todo al cliente y dejar que el cliente haga el trabajo pesado, por así decirlo. También pensé que así es como funcionan los programas de trampas: interceptan los paquetes del servidor, obtienen la ubicación de los enemigos y luego los muestran en la vista del cliente.

Entonces, la pregunta: ¿Cuáles son algunas políticas generales o estrategias que emplea un moderno servidor de disparos en primera persona para mantener a sus clientes actualizados?

Respuesta

11

Es un compromiso entre su posición y la posición de su amigo, y cada juego tomará una decisión ligeramente diferente sobre esto para lograr el compromiso deseado. El servidor puede tratar de no enviar más información de la que necesita, por ej. realizar la verificación de distancia, pero inevitablemente enviará cierta información que puede ser explotada, como enviar la posición de un enemigo que está detrás de una roca, simplemente ambas cosas porque es demasiado caro para el servidor calcular la línea de visión exacta cada vez y también para el problema de latencia que mencionas.

Normalmente encontrará que los juegos de FPS tienden a 'perder' más información que otros porque están más preocupados por una experiencia de juego sin problemas que requiere un ritmo más rápido y regular de actualizaciones. Además, a diferencia de los MMO, un jugador de FPS suele estar en libertad de moverse a un servidor diferente si su juego está arruinado por trampas.

Algunos lectura adicional:

+0

¿Tiene algún recurso en línea en el que pueda obtener más información al respecto? –

+2

Agregué algunos enlaces a la respuesta. Aprendo mucho leyendo el foro de Gamedev.net en particular. – Kylotan

+1

Excelentes recursos; especialmente redes multijugador de código fuente. Iba a responder con eso. +1 – Leftium

3

La política general debe ser para no confiar en los clientes, en el sentido de que el desarrollador debe asumir que cualquiera puede volver a escribir el cliente desde cero.

Habiendo dicho eso, creo que es difícil evitar el envío de este tipo de información al cliente (y evitar este tipo de trampas). Incluso si no hay línea de visión, es posible que deba enviar posiciones (indirectamente) ya que los clientes pueden desear utilizar algún sistema de sonido envolvente que requiera ubicaciones 3D de fuentes de sonido, etc.

+1

Desafortunadamente, * * Debe Ser tierra es una tierra lejana, no representativa de la realidad. ;) –

+1

El punto sigue en pie, sin embargo, usted no debe confiar en los clientes, porque la gente explota esta confianza para hacer trampa.Esto se aplica tanto a dar al cliente más información de la que se supone que debe saber como a recibir comandos precisos (por ejemplo, el cliente le dice al servidor que está cortando paredes). – Numeron

Cuestiones relacionadas