La "solution" est que dans un aucun cas un client/peer ne doit modifier la simulation du jeu directement ; un client/peer envoie des commandes/ordres/requetes au server/host - ce dernier etant l'authority il detient le seul "vrai" etat du jeu. Le server/host peut verifier que les requetes recues sont valides, et modifier la simulation en consequence. Ce apres quoi il propage le nouvel etat du jeu au reste des participants clients/peer
En gros, un client ne fait que de l'affichage et des calculs sans impact sur le gameplay. C'est le server/peer qui met a jour la simulation du jeu.
Si le jeu est temps reel, ca devient un peu plus complique, car il faut maintenir la perception de continuite chez les joueurs, sans attendre le retours des requetes. Dans cette configuration, chaque client/peer possede une copie de la simulation, SA version du jeu, qui est utilisee pour donner un feedback immediat au joueur, en attendant la mise-a-jour et eventuellement correction du server/host. Quant au server/host, on implemente aussi une prise en compte de la latence pour reconstituer la timeline de tous les evenements et resoudre les conflits (tel joueur a tire en premier sur tel autre joueur, mais a ce moment ce dernier ne le voyait pas encore, ou tel jouer a tire en premier sur tel joueur mais sa requete est arrive plus tard car il a plus de latence, etc.)
Ca veut dire que les simulations des joueurs sont toujours en retard par rapport au VRAI etat du jeu, et on donne la perception de continuite a grand coup de prediction et corrections. Ca peut se voir dans les jeux lors de gros pics de lag, ou des joueurs avancent contre des murs - c'est la prediction locale qui continue sur des donnees obsoletes car n'ayant pas recu de correction et update depuis "longtemps" - ou inversement se deplacent rapidement pour rejoindre leur "vraie" position - une correction significative vient d'etre recue apres "longtemps" sans update, donc la simu locale a divergé du VRAI etat du jeu -
Message édité le 13 décembre 2016 à 17:35:29 par LGV