Je travaille dans un MMORPG gratuit et j'ai un problème.
Je développe (avec d'autres personnes) un système d'enregistrement vidéo pour le jeu. L'idée est fondamentalement: nous enregistrons tous les paquets envoyés et reçus avec des horodatages, plus quelques données locales du client, puis les vidons dans un fichier. Pour lire la vidéo, nous émulons simplement tout ce qui se trouve dans le fichier. Nous avons également la possibilité d'exporter la vidéo vers avi avec ffmpeg.
Le problème est: lorsque nous changeons entre les versions du jeu, il est difficile de maintenir la compatibilité descendante pour la vidéo (commandes ajoutées / supprimées, changements de fonction, etc.). Existe-t-il un bon moyen de gérer ce problème? au lieu d'avoir un tas de joueurs différents et de choisir le bon pour chaque version du fichier vidéo?
Il serait utile de savoir comment les autres jeux gèrent cette situation.
Merci pour l'aide, désolé pour mon anglais.
Réponses:
Notre règle de base est de ne jamais modifier un type de paquet existant. Tout est ajouté à la fin d'une commande existante ou d'une nouvelle commande. Cela rend également beaucoup moins probable pour deux personnes de piétiner sur le travail de l'autre.
la source
Il n'est pas inconcevable, en particulier sur un PC, qu'ils ne font que versionner le code de gameplay et bumpent la version lorsqu'ils apportent une modification qui affecte le système de rejeu. Si le fichier de relecture est étiqueté avec la version du code de jeu avec lequel il a été créé et que le client a toujours accès à cette version, cela devrait fonctionner correctement.
la source
Une façon de résoudre ce problème est de s'inspirer d'un jeu appelé "Heroes of Newerth". (qui change toutes les +/- 2 semaines) D'après ce que je peux dire:
Parce que je ne travaille pas chez S2, je ne peux clairement pas dire que c'est ainsi que cela fonctionne. Cependant, j'ai remarqué une tendance marquée à la taille des téléchargements associée à l'âge de la relecture.
Soit cela, soit ils ajoutent des correctifs d'entité au rejeu (par exemple, le sort X a un effet Y au lieu de l'effet Z). Si des informations relatives aux paquets sont également stockées dans la configuration d'entité, cette correction à chaud d'entité vous permettrait également de comprendre les paquets plus anciens.
Je ne voudrais certainement pas stocker le comportement historique du client car cela peut devenir énorme très rapidement. Surtout lorsque le client met à jour par exemple de 10.1.0 à 10.2.0 (car il doit télécharger chaque patch entre les deux versions, au lieu du patch final).
Google Protobuf est une bonne idée en tant que couche de sérialisation, car il prend en charge des éléments comme celui-ci par conception.
la source