RE:NODE

Несовпадение версий модов Valheim: почему кикает при входе

Автор Команда RE:NODE
10 мин чтения


Если сервер Valheim с модами выкидывает вас сразу после подключения, то почти всегда потому, что ваши моды и серверные не совпадают: мода нет с одной стороны или он той же, но другой версии. Сообщение на экране отключения обычно называет мод. Прочитайте его, сделайте свой набор идентичным серверному, и вы войдёте. Трудоёмкие случаи - те, где сообщение расплывчатое, исходит от игры, а не от мода, или где два человека клянутся, что у них "те же моды", а это не так. В статье разбираем, что значит каждое сообщение, какая система его выдала, как точно сравнить два набора и как не допустить повторения при каждом обновлении.

Если вы не используете моды, но всё равно получаете "Incompatible version", это версия игры, а не моды - см. обновление сервера и несовпадение версий.

Три проверки, три разных сообщения#

Подключение к серверу с модами проходит до трёх независимых проверок версий. Если знать, какая из них вас остановила, понятно, куда смотреть.

ПроверкаКто выполняетЧто сравниваетЧто вы видите
VanillaИграВерсию игры и сети"Incompatible version"
JotunnJotunn с обеих сторонМоды, объявившие уровень совместимостиОкно со списком модов и версий
ServerSyncКаждый мод, в который он встроенВерсию этого мода и требуемый минимумДополнительные строки с названием мода

Они срабатывают в разные моменты. Ванильная проверка идёт первой, во время рукопожатия: если версии игры отличаются, ничего больше не сравнивается. Проверки Jotunn и ServerSync выполняются, когда соединение принято и моды обменялись информацией, поэтому несовпадение модов выглядит как соединение, которое на секунду удалось, а потом оборвалось.

Как читать сообщение#

"Incompatible version" без названий модов

Версия игры отличается. Либо клиент обновился, а сервер нет, либо наоборот. На сервере с модами обычная причина - у игрока клиент Steam за ночь обновил Valheim, а сервер намеренно держат на старой версии, пока не догонят моды. Решение здесь на стороне времени, а не модов. В некоторых версиях ServerSync под этим же сообщением добавляются строки с модами, поэтому если ниже есть ещё текст, сначала прочитайте его.

Окно Jotunn со списком модов

Jotunn показывает отдельное окно после отключения, где перечислен каждый мод, не прошедший проверку, и причина: нет у вас, нет у сервера или есть у обеих сторон, но версии слишком далеки, причём показаны обе версии. Строгость - является ли проблемой 1.4.2 против 1.4.3 - объявляет каждый мод. Полная таблица уровней есть в статье Jotunn: что это и как работает.

Это простой случай. Каждая строка подсказывает, что установить, удалить или заменить и на какую версию.

Строки ServerSync с названием мода

ServerSync - библиотека, которую многие популярные моды (среди прочих, значительная часть семейств Smoothbrain, Azumatt и blaxxun) компилируют прямо в свой .dll, поэтому обычно она не устанавливается отдельно и в списке модов отдельной записью не появляется. Она позволяет моду объявить свою текущую версию и минимальную версию, которую он примет от другой стороны, а также обязана ли другая сторона вообще иметь этот мод. Если проверка не пройдена, в сообщение об отключении добавляются строки с названием мода и версиями.

Поскольку у каждого мода своя копия, проверки ServerSync падают по одному моду. Вы исправляете один, переподключаетесь и узнаёте о следующем. Исправьте всё сразу, сравнив полные списки, как описано ниже, а не играйте в "прибей крота".

Кик вообще без полезного сообщения

Смотрите журналы. Сторона игрока пишет вывод BepInEx в BepInEx/LogOutput.log внутри папки профиля модов, а собственный журнал Unity - сюда:

code
%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\Player.log

Сервер пишет BepInEx/LogOutput.log в корне сервера, а консоль показывает тот же вывод в реальном времени. Найдите в обоих момент подключения и слова version, incompatible или имя игрока. Почему серверный журнал стоит скачивать до перезапуска, который его перезапишет, объясняет статья журналы, которые стоит хранить.

Точное сравнение двух наборов#

Фразу "у нас те же моды" никто не проверит, глядя на экран менеджера модов. Сравнивайте реально загруженные версии. BepInEx при запуске печатает по строке на плагин с той версией, которую он действительно загрузил:

bash
# On the server, from the server root$ grep -o 'Loading \[[^]]*\]' BepInEx/LogOutput.log | sort > server-mods.txt

На клиенте Windows после одного запуска с модами выполните то же в PowerShell из папки профиля:

code
PS> Select-String -Path BepInEx\LogOutput.log -Pattern 'Loading \[[^\]]*\]' |      ForEach-Object { $_.Matches.Value } | Sort-Object > client-mods.txt

Положите два файла рядом или сравните их через diff:

bash
$ diff server-mods.txt client-mods.txt< Loading [EpicLoot 0.x.y]> Loading [EpicLoot 0.x.z]

Каждая строка в diff - это проблема, хотя не каждая проблема приводит к кику. Клиентские моды будут видны на стороне клиента, и это нормально. Серверные моды будут видны на стороне сервера, и это тоже нормально. Всё остальное должно быть идентичным.

Журнал показывает, что загрузилось, а это главное; мод, лежащий в plugins, но не загрузившийся, в нём не появится. Если вам нужно то, что установлено, а не загружено, у модов, установленных через менеджер, в папке есть manifest.json с полем version_number:

bash
$ grep -H '"version_number"' BepInEx/plugins/*/manifest.json

Учтите, что версия плагина, которую мод сообщает при загрузке, и версия его пакета на Thunderstore обычно совпадают, но не всегда. Когда они расходятся, проверки версий видят строку загрузки.

Частые причины в порядке возникновения#

У большинства киков одна из нескольких причин:

  1. Кто-то нажал "Update all". Его менеджер модов обновил каждый мод до последнего релиза. Теперь он опережает сервер. Это самая частая причина с большим отрывом и повод закреплять версии в групповых профилях - как это сделать, показано в статье r2modman для групп Valheim.
  2. Сервер обновили, а профиль группы нет. Админ обновил моды на сервере и забыл раздать новый профиль, и теперь все отстали.
  3. Разошлась зависимость. Контентные моды совпадают, а Jotunn или библиотека, от которой зависит один из модов, нет. Зависимости - часть списка.
  4. Не тот профиль. У игрока два профиля, и он запустил старый, или нажал Play в Steam и запустил ваниль. Ваниль против сервера, требующего моды, получает окно Jotunn, где все моды помечены как отсутствующие.
  5. Дубликат мода. Две копии одного плагина в plugins, часто старый отдельный .dll и новый в собственной папке. BepInEx загружает одну и пропускает другую, и не обязательно ту, что вы ожидали.
  6. Различие только в конфигурации. Редкий случай, но некоторые моды включают значение конфига в проверку синхронизации. Копирование серверных файлов BepInEx/config для этого мода решает проблему.

Выравнивание наборов клиента и сервера#

Берите сервер за эталон. К нему подключаются все, он меняется реже всего, и его набор уже проверен на этом мире.

  1. Получите список с сервера. Используйте приведённую выше выборку из журнала и запишите её там, где группа сможет её прочитать.
  2. Соберите один профиль, который ей соответствует. Один человек собирает или обновляет профиль менеджера модов ровно до этих версий, включая Jotunn, HookGenPatcher и BepInExPack Valheim. В r2modman диалог загрузки мода позволяет выбрать более старую версию.
  3. Экспортируйте профиль в файл и раздайте. Все импортируют его как новый профиль, а не чинят старый.
  4. Скопируйте серверные конфиги в профиль для синхронизируемых модов, если какой-либо мод включает конфигурацию в проверку, или пропустите этот шаг, если таких нет.
  5. Проверьте с одним игроком, прежде чем объявлять. Если он подключился без проблем, профиль верный.

Если ошибся сервер - например, на нём более старая версия мода с известной ошибкой, а вы хотите, чтобы все были на новой, - сначала обновите сервер, убедитесь, что он чисто запускается с миром, и затем повторите те же шаги с новым списком. Никогда не обновляйте сначала клиентов, а потом сервер: все эти часы никто не сможет играть.

Бэкапмир и BepInExОбновить серверсначала моды, потом играТестовый входодин игрокЭкспорт профиляновое имя файлаГруппа импортируеткак новый профиль
Порядок обновления без дня киков

Пример из практики#

Группа из шести человек держит сервер с двенадцатью модами. Во вторник вечером двое игроков могут зайти, а четверых кикает при подключении. Вот как это решается за десять минут, а не за целый вечер.

Первый кикнутый игрок присылает скриншот. На нём ванильное сообщение "Incompatible version" и ничего под ним. Это указывает на игру, а не на моды: днём его клиент Steam обновил Valheim. Двое, которые ещё могут зайти, с тех пор не перезапускали Steam. Сервер намеренно оставлен на предыдущем патче, потому что три мода ещё не обновлены.

У админа два варианта. Либо дождаться модов и обновить всё вместе, либо дать кикнутым игрокам откатить свою игру. Для большинства игроков в Steam нет простого отката, поэтому реалистичный вариант - ждать. Админ пишет в чат группы, что сервер остаётся на старом патче, пока моды не будут готовы, и что двум подключённым игрокам сегодня не стоит перезапускать Steam.

В четверг моды обновлены. Админ делает бэкап мира и BepInEx, обновляет игру и моды на сервере, запускает его, проверяет журнал на исключения и на каждую строку Loading [...], один раз заходит и убеждается, что сундук с модовыми предметами цел. Затем он экспортирует новый файл профиля с новым именем и публикует его. Четвёртого игрока всё ещё кикает: в окне Jotunn один мод более старой версии. Он импортировал новый профиль, но запустил старый. Переключение профиля решает проблему.

Ничего в этой последовательности не требовало гадать. Каждый шаг читал сообщение или строку журнала и действовал по ним.

Как не допустить повторения#

Кики возвращаются каждый раз, когда меняется список модов, если у группы нет привычек вокруг обновлений. Что работает:

  • Один владелец списка модов. Один человек решает, что установлено и в какой версии. Остальные импортируют.
  • Никаких обновлений на месте у клиентов. Правило - "импортируйте новый профиль", а не "обновите свои моды".
  • Держите версию игры на сервере, пока моды не готовы. Патч Valheim ломает большинство модов BepInEx, а первый кик в день патча - это версия игры у клиента новее серверной. Как намеренно удерживать сервер, описано в статье закрепление версий игрового сервера и откаты.
  • Храните последний рабочий набор. Делайте бэкап BepInEx перед каждым изменением. На RE:NODE слоты бэкапов входят в каждый тариф Valheim, и бэкап можно заблокировать от ротации, чтобы последний заведомо рабочий набор модов не вытеснили ночные бэкапы, пока вы чините новый.
  • Записывайте версии. Закреплённое сообщение с файлом профиля, датой и версией Jotunn избавит следующего человека от сравнения.

Общие привычки для группового сервера с модами собраны в статье модовый сервер для друзей.

FAQ#

Почему меня кикает, если у меня те же моды, что и у друга?

Потому что "те же моды" обычно означает те же названия, а не те же версии или зависимости. Сравните строки Loading [...] из обоих журналов. Достаточно одной другой версии Jotunn или библиотеки.

Могу ли я зайти на модовый сервер с меньшим числом модов, чем на сервере?

Только если недостающие моды серверные или не проверяются. Любой мод, объявивший, что он нужен всем, вас отклонит, а контентный мод, которого у вас нет, в лучшем случае не даст вам видеть то, что видят другие игроки.

Можно ли отключить проверку версий на сервере?

Общего переключателя нет, и искать его не стоит. Каждый мод объявляет свою проверку, потому что несовпавшая версия ломает предметы, рецепты или объекты мира так, что мир может пострадать. Выравнивайте версии.

В сообщении "Incompatible version", но мы все обновились. Что делать?

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

Должны ли совпадать и файлы конфигурации?

Для самой проверки обычно нет. Моды, синхронизирующие конфигурацию, отправляют серверные значения при подключении, поэтому собственные файлы клиентов не важны. Несколько модов включают конфигурацию в сравнение, и копирование серверного файла для такого мода решает проблему.