Если сервер Valheim с модами выкидывает вас сразу после подключения, то почти всегда потому, что ваши моды и серверные не совпадают: мода нет с одной стороны или он той же, но другой версии. Сообщение на экране отключения обычно называет мод. Прочитайте его, сделайте свой набор идентичным серверному, и вы войдёте. Трудоёмкие случаи - те, где сообщение расплывчатое, исходит от игры, а не от мода, или где два человека клянутся, что у них "те же моды", а это не так. В статье разбираем, что значит каждое сообщение, какая система его выдала, как точно сравнить два набора и как не допустить повторения при каждом обновлении.
Если вы не используете моды, но всё равно получаете "Incompatible version", это версия игры, а не моды - см. обновление сервера и несовпадение версий.
Три проверки, три разных сообщения#
Подключение к серверу с модами проходит до трёх независимых проверок версий. Если знать, какая из них вас остановила, понятно, куда смотреть.
| Проверка | Кто выполняет | Что сравнивает | Что вы видите |
|---|---|---|---|
| Vanilla | Игра | Версию игры и сети | "Incompatible version" |
| Jotunn | Jotunn с обеих сторон | Моды, объявившие уровень совместимости | Окно со списком модов и версий |
| 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 - сюда:
%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\Player.logСервер пишет BepInEx/LogOutput.log в корне сервера, а консоль показывает тот же вывод в реальном времени. Найдите в обоих момент подключения и слова version, incompatible или имя игрока. Почему серверный журнал стоит скачивать до перезапуска, который его перезапишет, объясняет статья журналы, которые стоит хранить.
Точное сравнение двух наборов#
Фразу "у нас те же моды" никто не проверит, глядя на экран менеджера модов. Сравнивайте реально загруженные версии. BepInEx при запуске печатает по строке на плагин с той версией, которую он действительно загрузил:
# On the server, from the server root$ grep -o 'Loading \[[^]]*\]' BepInEx/LogOutput.log | sort > server-mods.txtНа клиенте Windows после одного запуска с модами выполните то же в PowerShell из папки профиля:
PS> Select-String -Path BepInEx\LogOutput.log -Pattern 'Loading \[[^\]]*\]' | ForEach-Object { $_.Matches.Value } | Sort-Object > client-mods.txtПоложите два файла рядом или сравните их через diff:
$ diff server-mods.txt client-mods.txt< Loading [EpicLoot 0.x.y]> Loading [EpicLoot 0.x.z]Каждая строка в diff - это проблема, хотя не каждая проблема приводит к кику. Клиентские моды будут видны на стороне клиента, и это нормально. Серверные моды будут видны на стороне сервера, и это тоже нормально. Всё остальное должно быть идентичным.
Журнал показывает, что загрузилось, а это главное; мод, лежащий в plugins, но не загрузившийся, в нём не появится. Если вам нужно то, что установлено, а не загружено, у модов, установленных через менеджер, в папке есть manifest.json с полем version_number:
$ grep -H '"version_number"' BepInEx/plugins/*/manifest.jsonУчтите, что версия плагина, которую мод сообщает при загрузке, и версия его пакета на Thunderstore обычно совпадают, но не всегда. Когда они расходятся, проверки версий видят строку загрузки.
Частые причины в порядке возникновения#
У большинства киков одна из нескольких причин:
- Кто-то нажал "Update all". Его менеджер модов обновил каждый мод до последнего релиза. Теперь он опережает сервер. Это самая частая причина с большим отрывом и повод закреплять версии в групповых профилях - как это сделать, показано в статье r2modman для групп Valheim.
- Сервер обновили, а профиль группы нет. Админ обновил моды на сервере и забыл раздать новый профиль, и теперь все отстали.
- Разошлась зависимость. Контентные моды совпадают, а Jotunn или библиотека, от которой зависит один из модов, нет. Зависимости - часть списка.
- Не тот профиль. У игрока два профиля, и он запустил старый, или нажал Play в Steam и запустил ваниль. Ваниль против сервера, требующего моды, получает окно Jotunn, где все моды помечены как отсутствующие.
- Дубликат мода. Две копии одного плагина в
plugins, часто старый отдельный.dllи новый в собственной папке. BepInEx загружает одну и пропускает другую, и не обязательно ту, что вы ожидали. - Различие только в конфигурации. Редкий случай, но некоторые моды включают значение конфига в проверку синхронизации. Копирование серверных файлов
BepInEx/configдля этого мода решает проблему.
Выравнивание наборов клиента и сервера#
Берите сервер за эталон. К нему подключаются все, он меняется реже всего, и его набор уже проверен на этом мире.
- Получите список с сервера. Используйте приведённую выше выборку из журнала и запишите её там, где группа сможет её прочитать.
- Соберите один профиль, который ей соответствует. Один человек собирает или обновляет профиль менеджера модов ровно до этих версий, включая Jotunn, HookGenPatcher и BepInExPack Valheim. В r2modman диалог загрузки мода позволяет выбрать более старую версию.
- Экспортируйте профиль в файл и раздайте. Все импортируют его как новый профиль, а не чинят старый.
- Скопируйте серверные конфиги в профиль для синхронизируемых модов, если какой-либо мод включает конфигурацию в проверку, или пропустите этот шаг, если таких нет.
- Проверьте с одним игроком, прежде чем объявлять. Если он подключился без проблем, профиль верный.
Если ошибся сервер - например, на нём более старая версия мода с известной ошибкой, а вы хотите, чтобы все были на новой, - сначала обновите сервер, убедитесь, что он чисто запускается с миром, и затем повторите те же шаги с новым списком. Никогда не обновляйте сначала клиентов, а потом сервер: все эти часы никто не сможет играть.
Пример из практики#
Группа из шести человек держит сервер с двенадцатью модами. Во вторник вечером двое игроков могут зайти, а четверых кикает при подключении. Вот как это решается за десять минут, а не за целый вечер.
Первый кикнутый игрок присылает скриншот. На нём ванильное сообщение "Incompatible version" и ничего под ним. Это указывает на игру, а не на моды: днём его клиент Steam обновил Valheim. Двое, которые ещё могут зайти, с тех пор не перезапускали Steam. Сервер намеренно оставлен на предыдущем патче, потому что три мода ещё не обновлены.
У админа два варианта. Либо дождаться модов и обновить всё вместе, либо дать кикнутым игрокам откатить свою игру. Для большинства игроков в Steam нет простого отката, поэтому реалистичный вариант - ждать. Админ пишет в чат группы, что сервер остаётся на старом патче, пока моды не будут готовы, и что двум подключённым игрокам сегодня не стоит перезапускать Steam.
В четверг моды обновлены. Админ делает бэкап мира и BepInEx, обновляет игру и моды на сервере, запускает его, проверяет журнал на исключения и на каждую строку Loading [...], один раз заходит и убеждается, что сундук с модовыми предметами цел. Затем он экспортирует новый файл профиля с новым именем и публикует его. Четвёртого игрока всё ещё кикает: в окне Jotunn один мод более старой версии. Он импортировал новый профиль, но запустил старый. Переключение профиля решает проблему.
Ничего в этой последовательности не требовало гадать. Каждый шаг читал сообщение или строку журнала и действовал по ним.
Как не допустить повторения#
Кики возвращаются каждый раз, когда меняется список модов, если у группы нет привычек вокруг обновлений. Что работает:
- Один владелец списка модов. Один человек решает, что установлено и в какой версии. Остальные импортируют.
- Никаких обновлений на месте у клиентов. Правило - "импортируйте новый профиль", а не "обновите свои моды".
- Держите версию игры на сервере, пока моды не готовы. Патч Valheim ломает большинство модов BepInEx, а первый кик в день патча - это версия игры у клиента новее серверной. Как намеренно удерживать сервер, описано в статье закрепление версий игрового сервера и откаты.
- Храните последний рабочий набор. Делайте бэкап
BepInExперед каждым изменением. На RE:NODE слоты бэкапов входят в каждый тариф Valheim, и бэкап можно заблокировать от ротации, чтобы последний заведомо рабочий набор модов не вытеснили ночные бэкапы, пока вы чините новый. - Записывайте версии. Закреплённое сообщение с файлом профиля, датой и версией Jotunn избавит следующего человека от сравнения.
Общие привычки для группового сервера с модами собраны в статье модовый сервер для друзей.
FAQ#
Почему меня кикает, если у меня те же моды, что и у друга?
Потому что "те же моды" обычно означает те же названия, а не те же версии или зависимости. Сравните строки Loading [...] из обоих журналов. Достаточно одной другой версии Jotunn или библиотеки.
Могу ли я зайти на модовый сервер с меньшим числом модов, чем на сервере?
Только если недостающие моды серверные или не проверяются. Любой мод, объявивший, что он нужен всем, вас отклонит, а контентный мод, которого у вас нет, в лучшем случае не даст вам видеть то, что видят другие игроки.
Можно ли отключить проверку версий на сервере?
Общего переключателя нет, и искать его не стоит. Каждый мод объявляет свою проверку, потому что несовпавшая версия ломает предметы, рецепты или объекты мира так, что мир может пострадать. Выравнивайте версии.
В сообщении "Incompatible version", но мы все обновились. Что делать?
Проверьте, обновился ли сервер. Если да, посмотрите, называет ли текст под сообщением какой-нибудь мод - строки туда добавляет ServerSync. Если ничего не названо, сравните версии игры в главном меню каждого клиента с версией в журнале запуска сервера.
Должны ли совпадать и файлы конфигурации?
Для самой проверки обычно нет. Моды, синхронизирующие конфигурацию, отправляют серверные значения при подключении, поэтому собственные файлы клиентов не важны. Несколько модов включают конфигурацию в сравнение, и копирование серверного файла для такого мода решает проблему.


