Je fais un simple petit MOBA juste pour le plaisir. Je faisais tout en solo puis j'ai réalisé "oh merde je devrais probablement ajouter du multijoueur, hein."
Je n'avais jamais rien fait avec le réseau auparavant, donc apprendre à intégrer Lidgren dans mon jeu était amusant et génial. Le fait est que je sais à peu près comment je fais les choses est faux, car ce n'est pas assez robuste pour les jeux grand public à utiliser, à ma connaissance, mais qu'est-ce qui ne va pas?
Ce que je fais, c'est, fondamentalement, chaque fois qu'un joueur fait une action, il envoie un message au serveur disant "hé, je viens de faire cette chose." Le serveur et le client exécutent tous deux la même simulation. Le serveur envoie ensuite un message à tous les autres clients leur disant que ce type a fait cette chose.
Dans la plupart des cas, sauf dans quelques cas, lorsqu'un joueur fait quelque chose, le client suppose que c'est cool et va de l'avant avec lui-même. Donc, lorsque vous faites un clic droit quelque part pour vous y déplacer, le client de ce joueur commence simplement à déplacer son gars là-bas, puis envoie un message au serveur pour lui en parler.
Donc en gros:
- Le joueur 1 lance un sort pour le faire bouger 100% plus vite pendant six secondes
- Le client local du joueur 1 ajoute ce buff à son objet Unité
- Le client du joueur 1 envoie un message au serveur disant "hé je viens de lancer ce sort"
- Le serveur s'assure qu'il avait vraiment assez de mana pour lancer ce sort, et si c'est le cas, ajoute ce buff à la copie du serveur de cet objet Unit
- Le serveur envoie un message à tous les autres clients disant "hé ce gars vient de lancer ce sort"
- Tous les autres clients reçoivent le message et disent "ah ok cool" et ajoutent ce buff à leur objet Unit local pour ce joueur
J'ai parcouru des trucs pour voir comment les gros jeux font du multijoueur, et c'est un peu déroutant pour quelqu'un qui commence à peine à essayer ce truc, mais il semble que le moteur source envoie un paquet contenant toutes les modifications de tout dans le monde à chaque tique? Encore une fois, totalement nouveau pour ce genre de choses, mais pouvez-vous vraiment pousser autant de données aussi fréquemment?
Désolé si c'est un peu aléatoire, mais au fond, je me demandais pourquoi mon système plus simple n'est pas la bonne voie à suivre, car si c'était le cas, d'autres jeux l'utiliseraient, non?