Ich arbeite in einem kostenlosen MMORPG und habe ein Problem.
Ich entwickle (mit anderen Leuten) ein Videoaufzeichnungssystem für das Spiel. Die Idee ist im Grunde: Wir zeichnen alle gesendeten und empfangenen Pakete mit Zeitstempeln sowie einige lokale Daten vom Client auf und speichern sie dann in einer Datei. Zum Abspielen des Videos emulieren wir einfach alles, was in der Datei enthalten ist. Wir haben auch die Möglichkeit, das Video mit ffmpeg nach avi zu exportieren.
Das Problem ist: Wenn wir zwischen den Versionen des Spiels wechseln, ist es schwierig, die Abwärtskompatibilität für das Video aufrechtzuerhalten (Befehle hinzugefügt / entfernt, Funktionsänderungen usw.). Gibt es eine gute Möglichkeit, dieses Problem zu lösen? anstatt eine Reihe verschiedener Player zu haben und für jede Version der Videodatei den richtigen auszuwählen?
Es wäre hilfreich zu wissen, wie andere Spiele mit dieser Situation umgehen.
Danke für die Hilfe, sorry für mein Englisch.
Antworten:
Unsere Grundregel lautet, niemals einen vorhandenen Pakettyp zu ändern. Alles wird entweder am Ende eines vorhandenen oder eines neuen Befehls hinzugefügt. Dies macht es auch weitaus unwahrscheinlicher, dass zwei Personen sich gegenseitig auf die Arbeit stampfen.
quelle
Insbesondere auf einem PC ist es nicht unvorstellbar, dass sie nur den Gameplay-Code versionieren und die Version anstoßen, wenn sie Änderungen vornehmen, die sich auf das Wiedergabesystem auswirken. Wenn die Wiedergabedatei mit der Version des Gameplay-Codes versehen ist, mit dem sie erstellt wurde, und der Client weiterhin Zugriff auf diese Version hat, sollte dies einwandfrei funktionieren.
quelle
Eine Möglichkeit, dies in Angriff zu nehmen, ist die eines Spiels namens "Heroes of Newerth". (was sich alle +/- 2 Wochen ändert) Soweit ich das beurteilen kann:
Da ich bei S2 nicht arbeite, kann ich nicht sagen, dass es definitiv so funktioniert. Ich habe jedoch einen deutlichen Trend zur Downloadgröße festgestellt, der mit dem Alter der Wiedergabe zusammenhängt.
Entweder das, oder sie fügen der Wiedergabe Entity-Patches hinzu (z. B. hat der Zauber X den Y-Effekt anstelle des Z-Effekts). Wenn paketbezogene Informationen auch in der Entitätskonfiguration gespeichert sind, können Sie mit diesem Entity-Hot-Patching auch ältere Pakete verstehen.
Ich würde historisches Verhalten definitiv nicht auf dem Client speichern, da dies sehr schnell enorm werden kann. Insbesondere, wenn der Client von z. B. 10.1.0 auf 10.2.0 aktualisiert (da er jeden Patch zwischen den beiden Versionen anstelle des endgültigen Patches herunterladen muss).
Google Protobuf ist eine gute Idee als Serialisierungsschicht, da es solche Dinge von Natur aus unterstützt.
quelle