Как спроектировать систему модификаций в сессионной онлайн игре так, чтобы избежать проблему рассинхрона модов разных версий?
Чисто клиентские моды не рассматриваю.
Чисто серверные моды тоже не рассматриваю.
А вот моды, которые затрагивает как клиентскую часть, так и серверную, подвержены влиянию этой проблемы. Она возникает, когда автор мода выпускает новую версию этого мода. В результате на всех серверах, где запущена игра и мод установлен, он моментально устаревает. Новые игроки, которые хотят зайти на сервер, качают мод из репозитория, но версия отличается. Хост вынужден перезагружать сервер, чтобы синхронизировать установленные моды. Самая дичь происходит, когда в моде меняются нетвары, тогда это полная несовместимость версий мода.
Очевидное решение, которое напрашивается - пусть сервер сам раздает свои моды. Но это не очень хорошо по ряду причин. Например, если хостом является игрок с узким каналом, то скачивание тяжелого мода приведет к лагам в самой игре. Даже легкий мод приведет к кратковременным лагам. Поэтому ищу направления, в которых решение не сводится к скачиванию с сервера.
Более того, новая версия мода может быть совместима с предыдущей. К примеру, автор исправил опечатку в тексте описания какого-то явления (отразится только на клиенте), и не затрагивал ядро мода и прочий функционал. То есть это 100% совместимость. Хотелось бы такие моменты учитывать, чтобы хосту не приходилось перезагружать сервер каждый раз, когда мод обновляется. Иначе если модов много, то делать это нужно будет часто, что снижает впечатления от игры у всех.
Saboteur
@saboteur_kiev Куратор тега Разработка игр
software engineer
Вопрос непонятен.
Вы говорите про какую-то конкретную игру, где уже реализована работа с модами?
Если вы говорите про свою, то реализуйте обновление модов так, чтобы сервер не перегружался каждый раз. Делайте модерацию модов, делайте авторизированных пользователей, которые могут загружать моды. Почему тормозит, если хостом является игрок с узким каналом? Не обязательно же этого игрока подключать к игре. Мод может загрузиться неторопясь в отдельную папку, а уже потом примениться к серверу, и остальные игроки уже получат мод с сервера, а не с игрока. Опять же, перегружать сервер можно между сессиями, а не посреди игры.
На ваш вопрос без понимания как работает сервер игры, какое у него расписание, сколько игроков в сессии и как часто переподключаться и куча других деталей - вряд ли можно адекватно ответить.