Я работаю в бесплатной MMORPG, и у меня есть проблема.
Я (вместе с другими людьми) разрабатываю систему видеозаписи для игры. Идея в основном такова: мы записываем все пакеты, отправленные и полученные с временными метками, а также некоторые локальные данные от клиента, а затем выгружаем их в файл. Для воспроизведения видео мы просто эмулируем все, что есть в файле. У нас также есть возможность экспортировать видео в avi с помощью ffmpeg.
Проблема в том, что когда мы переключаемся между версиями игры, трудно поддерживать обратную совместимость видео (добавленные / удаленные команды, изменения функций и т. Д.). Есть хороший способ справиться с этой проблемой? вместо того, чтобы иметь кучу разных плееров и выбрать подходящий для каждой версии видеофайла?
Было бы полезно узнать, как другие игры справляются с этой ситуацией.
Спасибо за помощь, извините за мой английский.
Ответы:
Наше основное правило - никогда не менять существующий тип пакета. Все либо добавляется в конце существующей, либо новой команды. Это также снижает вероятность того, что два человека будут топать работой друг друга.
источник
Не исключено, особенно на ПК, что они просто делают версию игрового кода и повышают версию, когда вносят изменения, влияющие на систему воспроизведения. Если файл воспроизведения помечен версией кода игрового процесса, с которым он был создан, и клиент по-прежнему имеет доступ к этой версии, чтобы он работал нормально.
источник
Одним из способов решения этой проблемы является игра «Герои Новерта». (который меняется каждые +/- 2 недели) Из того, что я могу сказать, они:
Поскольку я не работаю на S2, я явно не могу сказать, что это определенно так. Тем не менее, я заметил заметную тенденцию размера загрузки, связанную с возрастом воспроизведения.
Либо так, либо они добавляют патчи сущностей к воспроизведению (например, заклинание X имеет эффект Y вместо эффекта Z). Если информация, относящаяся к пакетам, также сохраняется в конфигурации объекта, то это оперативное исправление объекта позволит вам также понимать более старые пакеты.
Я определенно не буду хранить историческое поведение на клиенте, потому что это может очень быстро стать огромным. Особенно, когда клиент обновляется, например, с 10.1.0 до 10.2.0 (так как ему нужно загружать каждый патч между двумя версиями вместо окончательного патча).
Google Protobuf является хорошей идеей в качестве слоя сериализации, потому что он поддерживает подобные вещи в дизайне.
источник