Pracuję w darmowej MMORPG i mam problem.
Wraz z innymi ludźmi opracowuję system nagrywania wideo do gry. Pomysł jest w gruncie rzeczy: rejestrujemy wszystkie paczki wysłane i otrzymane ze znacznikami czasu oraz niektóre lokalne dane od klienta, a następnie zrzucamy je do pliku. Aby odtworzyć wideo, po prostu emulujemy wszystko, co znajduje się w pliku. Mamy również opcję eksportu wideo do avi za pomocą ffmpeg.
Problem polega na tym: kiedy zmieniamy wersje gry, trudno jest zachować zgodność wsteczną dla wideo (polecenia dodane / usunięte, zmiany funkcji itp.). Czy istnieje dobry sposób na poradzenie sobie z tym problemem? zamiast mieć kilka różnych odtwarzaczy i wybrać odpowiedni dla każdej wersji pliku wideo?
Przydałoby się wiedzieć, jak inne gry radzą sobie z tą sytuacją.
Dzięki za pomoc, przepraszam za mój angielski.
Odpowiedzi:
Naszą podstawową zasadą jest, aby nigdy nie zmieniać istniejącego typu pakietu. Wszystko jest dodawane na końcu istniejącego lub nowego polecenia. To sprawia, że znacznie mniej prawdopodobne jest, aby dwie osoby zaczęły się nawzajem męczyć.
źródło
Nie jest niepojęte, szczególnie na PC, że po prostu zmieniają kod gry i podbijają wersję, gdy wprowadzają zmiany wpływające na system powtórek. Jeśli plik powtórki jest oznaczony wersją kodu gry, z którym został utworzony, a klient nadal ma dostęp do tej wersji, która powinna działać poprawnie.
źródło
Jednym ze sposobów rozwiązania tego problemu jest gra „Heroes of Newerth”. (który zmienia się co +/- 2 tygodnie) Z tego, co mogę powiedzieć:
Ponieważ nie pracuję w S2, nie mogę powiedzieć, że tak właśnie działa. Zauważyłem jednak wyraźny trend wielkości pobierania związany z wiekiem powtórki.
Albo to, albo dodają łatki bytu do powtórki (np. Zaklęcie X ma efekt Y zamiast efektu Z). Jeśli informacje związane z pakietami są również przechowywane w konfiguracji encji, ta poprawka encji na gorąco pozwoli również zrozumieć starsze pakiety.
Zdecydowanie nie zapisałbym historycznych zachowań na kliencie, ponieważ może to bardzo szybko stać się ogromne. Zwłaszcza, gdy klient aktualizuje z np. 10.1.0 do 10.2.0 (ponieważ musi pobrać każdą łatkę między dwiema wersjami zamiast ostatniej poprawki).
Google Protobuf jest dobrym pomysłem jako warstwa serializacji, ponieważ obsługuje takie rzeczy z założenia.
źródło