Estoy haciendo un pequeño MOBA simple solo por diversión. Estaba haciendo todo para un solo jugador y luego me di cuenta "oh, mierda, probablemente debería agregar multijugador, ¿eh?"
Nunca he hecho nada con las redes antes, así que aprender a integrar Lidgren en mi juego fue divertido e increíble. La cuestión es que sé que la forma en que estoy haciendo las cosas es incorrecta, porque, por lo que sé, no es lo suficientemente robusta como para que la usen los juegos convencionales, pero ¿qué tiene de malo?
Lo que estoy haciendo es, básicamente, cada vez que un jugador realiza una acción, envía un mensaje al servidor diciendo "oye, acabo de hacer esto". El servidor y el cliente ejecutan la misma simulación. El servidor luego envía un mensaje a todos los demás clientes diciéndoles que ese tipo hizo eso.
En su mayor parte, excepto en algunos casos, cuando un jugador hace algo, el cliente asume que es genial y lo sigue por su cuenta. Entonces, cuando haces clic derecho en algún lugar para moverte allí, el cliente de ese jugador simplemente comienza a mover a su tipo allí, y luego envía un mensaje al servidor informándole al respecto.
Así que básicamente:
- El jugador 1 lanza un hechizo para que se mueva 100% más rápido durante seis segundos
- El cliente local del jugador 1 agrega ese beneficio a su objeto Unidad
- El cliente del jugador 1 envía un mensaje al servidor diciendo "hey, acabo de lanzar este hechizo"
- El servidor se asegura de que realmente tenía suficiente maná para lanzar ese hechizo, y si es así, agrega ese beneficio a la copia del servidor de ese objeto de Unidad
- El servidor envía un mensaje a todos los demás clientes diciendo "oye, este tipo acaba de lanzar este hechizo"
- Todos los demás clientes reciben el mensaje y dicen "ah, está bien", y agrega ese beneficio a su objeto de Unidad local para ese jugador
He estado hojeando cosas para ver cómo los grandes juegos hacen multijugador, y es un poco confuso para alguien que está comenzando a incursionar en estas cosas, pero parece que el motor de Source envía un paquete que contiene todos los cambios a todo en el mundo cada tic? Una vez más, totalmente nuevo en estas cosas, pero ¿puede realmente empujar esa cantidad de datos con tanta frecuencia?
Lo siento si esto es un poco divagante, pero básicamente, me preguntaba por qué mi sistema más simple no es el camino correcto, porque si lo fuera, otros juegos lo usarían, ¿verdad?