Как вы создаете систему записи /воспроизведения для часто меняющейся игры?

Я работаю в свободной MMORPG, и у меня есть проблема.

Я (с другими людьми) разрабатываю систему видеозаписи для игры. Идея в основном: мы записываем все отправленные пакеты и amp; полученные с отметками времени, плюс некоторые локальные данные от клиента, а затем выгружают их в файл. Для воспроизведения видео мы просто эмулируем все, что находится в файле. У нас также есть возможность экспортировать видео в avi с помощью ffmpeg.

Проблема заключается в следующем: при изменении между версиями игры трудно поддерживать обратную совместимость для видео (команды добавлены /удалены, изменения функций и т. д.). Есть ли хороший способ справиться с этой проблемой? вместо того, чтобы иметь кучу разных игроков и выбрать правильный вариант для каждой версии видеофайла?

Было бы полезно узнать, как другие игры справляются с этой ситуацией.

Спасибо за помощь, извините за мой английский.

10 голосов | спросил Marco 10 32010vEurope/Moscow11bEurope/MoscowWed, 10 Nov 2010 16:30:26 +0300 2010, 16:30:26

3 ответа


8

Наше основное правило - никогда не изменять существующий тип пакета. Все либо добавляется в конце существующего, либо новая команда. Это также значительно снижает вероятность того, что двое людей будут топать друг на друга.

ответил coderanger 10 32010vEurope/Moscow11bEurope/MoscowWed, 10 Nov 2010 20:39:38 +0300 2010, 20:39:38
5

Не исключено, особенно на ПК, что они просто версии кода геймплея и набросают версию, когда они вносят изменения, влияющие на систему воспроизведения. Если файл воспроизведения отмечен версией кода геймплея, он был создан, и клиент все еще имеет доступ к этой версии, чтобы он работал нормально.

ответил U62 2 ThuEurope/Moscow2010-12-02T19:19:02+03:00Europe/Moscow12bEurope/MoscowThu, 02 Dec 2010 19:19:02 +0300 2010, 19:19:02
1

Один из способов решения этой проблемы - в соответствии с игрой под названием «Heroes of Newerth». (который меняется каждые +/- 2 недели) Из того, что я могу сказать им:

  1. Используйте исправления для игры и повторы.
  2. Все повторы хранятся в облаке. Они в конечном итоге истекают.
  3. Если пользователь хочет посмотреть старое загруженное воспроизведение, ему нужно сначала использовать кнопку «Совместить».
  4. Похоже, что это либо дистанционное различие с последней версией; или в случае, если воспроизведение больше не сохраняется, загружает его, а затем удаляет diff.

Поскольку я не работаю на S2, я, очевидно, не могу сказать, что это точно, как это работает. Тем не менее, я заметил отмеченную тенденцию размера загрузки, связанную с возрастом повтора.

Либо это, либо они добавляют патчи объекта к повторению (например, заклинание X имеет эффект Y вместо эффекта Z). Если информация, связанная с пакетом, также сохраняется в конфигурации сущности, это горячее исправление этого объекта позволит вам также понимать старые пакеты.

Я определенно не буду хранить историческое поведение на клиенте, потому что это может стать очень быстрым. Особенно, когда клиент обновляет, например, От 10.1.0 до 10.2.0 (так как они должны загружать каждый патч между двумя версиями вместо последнего патча).

Google Protobuf - хорошая идея как уровень сериализации, потому что он поддерживает такие вещи, как дизайн.

ответил Jonathan Dickinson 10 FriEurope/Moscow2010-12-10T12:14:13+03:00Europe/Moscow12bEurope/MoscowFri, 10 Dec 2010 12:14:13 +0300 2010, 12:14:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132