"Incompatible version" на сервере Valheim означает, что игра на ПК игрока и сервер находятся на разных сборках, и почти всегда лечится обновлением сервера: корректно остановите его, выполните steamcmd +login anonymous +app_update 896660 validate +quit для его папки установки и запустите снова. Игра обновляется через Steam сразу после выхода патча, а выделенный сервер - отдельное приложение, которое обновляется только тогда, когда его кто-то об этом просит. Остальная часть статьи посвящена случаям, когда одной этой команды недостаточно: серверы с модами, игроки на публичной тестовой ветке, игроки на Xbox и Game Pass, отстающие на день, и группы, которые не хотят терять вечер из-за патча.
Почему версии расходятся#
В Steam Valheim - это два продукта. Игра - приложение 892970, выделенный сервер - приложение 896660. Выходят они одновременно, но устанавливаются и обновляются по отдельности:
- Клиент обновляется через Steam автоматически, обычно как только игрок открывает Steam после патча. Отказаться от обновления игроку непросто.
- Сервер обновляется, когда SteamCMD или клиент Steam запускает обновление его установки. Сервер, проработавший неделю, находится на той сборке, которая была актуальна, когда его в последний раз запускали с обновлением.
Поэтому в день патча всё идёт так: Iron Gate выпускает патч, игры у половины группы обновляются, они пробуют зайти, и сервер их отклоняет. Ничего не сломалось. Просто сервер отстал на день.
Расхождение возможно и в других направлениях:
- Сервер новее клиента. Игрок, не перезапустивший Steam или приостановивший обновления, отстаёт. Ошибка при этом та же самая.
- Разные платформы обновляются в разные дни. Патчи сначала получает Steam. Сборки для Microsoft Store и Xbox иногда приходят позже, так что в группе с кроссплеем могут оказаться игроки в Steam, которым нужен новый сервер, и игроки на Xbox, которые пока не могут на него зайти. Этот случай разобран в статье кроссплей Valheim и игроки на Xbox.
Как узнать версию на обеих сторонах#
Прежде чем что-либо менять, убедитесь в несовпадении.
На клиенте версия указана в нижнем углу главного меню - строка вроде 0.219.14. Любой игрок прочитает её за пару секунд.
На сервере версия выводится в начале лога при запуске:
Valheim version: l-0.219.14 (network version 34)Префикс l- обозначает тип сборки и не входит в номер. Число в скобках - сетевая версия, и именно по ней в последних сборках проверяется совместимость подключения: сборки с одинаковой сетевой версией могут общаться друг с другом. Iron Gate не сохраняет её неизменной между патчами с новым контентом, и заранее надёжно узнать, изменил ли её тот или иной хотфикс, игрок не может, поэтому рабочее правило проще: если номера в меню и в логе различаются, обновите ту сторону, которая отстаёт.
Когда игрока отклоняют, сервер тоже записывает это в лог. Точная формулировка менялась от сборки к сборке, но в строке указаны игрок и обе версии, так что сразу видно, какая сторона старше.
Обновление через SteamCMD#
На вашей собственной машине обновление выполняется той же командой, что и установка. SteamCMD сравнивает установленную сборку с актуальной и скачивает только изменившееся.
$ sudo systemctl stop valheim$ steamcmd +force_install_dir /home/valheim/server \ +login anonymous +app_update 896660 validate +quit$ sudo systemctl start valheimПорядок важен:
- Сначала корректно остановите сервер. При корректной остановке мир записывается. Обновление под работающим сервером само по себе миру не вредит, а вот последующий перезапуск вредит, если процесс был убит, а не остановлен. Дождитесь
World savedв логе. - Запускайте обновление от пользователя, которому принадлежат файлы. Если запустить SteamCMD от root для папки, принадлежащей пользователю
valheim, останутся файлы root, которые сервер потом не сможет перезаписать, и следующее обновление остановится на полпути. - Каждый раз используйте один и тот же `+force_install_dir`. Если по ошибке указать другой путь, SteamCMD установит там вторую, актуальную копию, а ваша служба продолжит запускать старую.
- Запустите сервер и прочитайте строку с версией. Если она не изменилась, обновление попало не туда, куда вы думаете.
В актуальных версиях SteamCMD +force_install_dir должен стоять раньше +login, иначе он игнорируется с предупреждением. Анонимный вход здесь правильный: выделенному серверу не нужна учётная запись, владеющая игрой.
В Windows команда та же, только с steamcmd.exe и путём Windows. Если вы ставили сервер через раздел Tools клиента Steam, Steam обновляет его как любое другое приложение; проверьте, что автоматические обновления для него включены в свойствах, и останавливайте сервер до того, как Steam начнёт править файлы под ним.
Что делает validate и когда его не использовать
validate заставляет SteamCMD сверить каждый установленный файл с манифестом и заново скачать все отличающиеся. Это лечит повреждённую или недоустановленную сборку. Но он также перезаписывает любой изменённый вами файл в папке установки, включая start_server.sh или start_headless_server.bat, если вы правили копию, которую поставил Steam.
Отсюда два вывода:
- Храните свой скрипт запуска под другим именем, например
start_valheim.sh, чтобыvalidateникогда не сбрасывал ваши аргументы запуска. - Файлы BepInEx в манифест не входят, поэтому
validateне трогаетBepInEx/,doorstop_libsиstart_server_bepinex.sh. Если сервер с модами после обновления всё равно перестал загружать моды, проверьте, что он по-прежнему запускается черезstart_server_bepinex.sh, а не через ванильный скрипт, и затем переустановите актуальный BepInExPack поверх сервера: паки иногда обновляются вместе с патчем игры.
Обычный +app_update 896660 без validate подходит для плановых обновлений. Используйте validate, когда сервер ведёт себя странно после обновления или установка была прервана. Общие плюсы и минусы разобраны в статье автоматизация обновлений игровых серверов.
Серверы с модами: дождитесь модов#
На ванильном сервере обновляться в день патча всегда правильно. На сервере с BepInEx это часто неправильно.
Моды встраиваются в код игры. Патч, который переименовывает или меняет метод, затронутый модом, ломает мод - иногда с ошибкой при запуске, иногда молча, иногда повреждая то, что мод сохраняет. А поскольку игроки запускают те же моды на своих клиентах, их игра после обновления Steam оказывается в том же состоянии.
Разумный порядок для сервера с модами:
- До установки патча где бы то ни было сделайте бэкап мира и скопируйте всю папку
BepInEx, и плагины, и конфигурацию. - Проверьте страницу каждого мода на предмет обновления или отметки, что он по-прежнему работает. Библиотеки вроде Jotunn обычно обновляются первыми, а зависящие от них моды - следом.
- Обновляйте сервер, только когда готовы все нужные вам моды. До тех пор игроки, уже обновившиеся, зайти не смогут - такова цена модов.
- Обновляйте моды на сервере и на всех клиентах одновременно, лучше всего из общего профиля менеджера модов, чтобы версии совпадали точно.
- Запустите сервер и прочитайте `BepInEx/LogOutput.log`: нет ли плагинов, которые не загрузились, до того как кто-либо зайдёт.
Игроки, обновившие игру раньше, чем были готовы моды, получают несовпадение версии от самой игры, несовпадение модов от Jotunn или ServerSync, а то и оба сразу. Это разные ошибки с разными решениями: про модовую рассказано в статье кики из-за несовпадения версий модов Valheim. Откат одного неудачного мода описан в статье что делать, если обновление мода всё сломало.
Откат обновления сервера#
В обычной работе Steam не предлагает старых сборок выделенного сервера. После того как SteamCMD обновил установку, старая версия пропадает, если вы её не сохранили.
Поэтому практичный откат - это копия, сделанная заранее:
$ sudo systemctl stop valheim$ cp -a /home/valheim/server /home/valheim/server-0.219.14$ steamcmd +force_install_dir /home/valheim/server \ +login anonymous +app_update 896660 +quitЕсли новая сборка оказалась плохой, остановите сервер, уберите новую установку в сторону и верните копию. Это работает только если игроки всё ещё могут запустить старую версию, а обычно они не могут: Steam уже обновил им игру. Откат сервера в основном полезен группе с модами, где все согласились остаться на старой сборке, а для этого у каждого игрока должна быть копия старой игры, что большинство групп делать не станет.
Чаще правильный "откат" - это откат мира: если патч и сломанный мод вместе повредили сохранение, восстановите мир из состояния до обновления, а не бинарный файл сервера. Именно поэтому бэкап из первого пункта списка для серверов с модами важнее копии установки.
Публичная тестовая ветка#
Крупные обновления Iron Gate проверяет на публичной тестовой ветке до выхода. Игроки подключаются к ней через Steam: свойства игры, вкладка Betas и код, который Iron Gate публикует для каждого теста - исторически это yesimadebackups, и это хорошо показывает, что они думают о тех, кто не делает бэкапы.
Игрок на публичной тестовой сборке не может зайти на обычный сервер, а обычный игрок - на тестовый. Чтобы запустить тестовый сервер, установите соответствующую ветку сервера:
$ steamcmd +force_install_dir /home/valheim/ptb \ +login anonymous \ +app_update 896660 -beta public-test -betapassword yesimadebackups validate \ +quitПеред использованием проверьте актуальное название ветки и пароль в объявлении самой Iron Gate; они много лет не менялись, но менять их вправе только она.
Правила для тестовых серверов:
- Используйте отдельную папку установки и отдельную папку сохранений. Мир, открытый на тестовой сборке, может быть сохранён в формате, который релизная сборка прочитать не сможет.
- Никогда не направляйте тестовый сервер на свой основной мир. Скопируйте его и смиритесь с тем, что копия может пропасть.
- Игрокам нужно снова отказаться от беты в Steam, чтобы вернуться на обычный сервер, после чего Steam скачает релизную сборку.
Как планировать обновления для группы#
Главная цена обновления Valheim - не загрузка, которая занимает минуту. Это полчаса растерянности, когда группа садится играть и никто не может зайти. Небольшая рутина это убирает.
- Обновляйтесь при запуске, а не посреди сессии. На ванильном сервере пусть обновление выполняется при каждом запуске сервера, а ежедневный перезапуск назначьте на час, когда никто не играет. Тогда в день патча всё решится за ночь.
- Знайте, когда выходят патчи. Iron Gate объявляет об обновлениях в Steam и на своих каналах. Если патч вышел, пока люди в игре, корректный перезапуск с обновлением занимает пару минут; предупредите об этом заранее.
- Назначьте ответственного. Пусть кто-то в группе после каждого патча проверяет, что строка версии сервера совпадает с игрой. На сервере с модами этот же человек решает, когда обновляться.
- Перезапустите Steam на клиенте. Игрок, у которого "Incompatible version" остаётся после обновления сервера, сидит на старой игре; перезапуск Steam обычно запускает загрузку.
Как именно происходит обновление на хостинге с панелью, зависит от панели. Многие панели запускают SteamCMD при каждом старте сервера, так что перезапуск и есть обновление; у других есть переключатель среди переменных запуска. В RE:NODE вкладка Startup показывает переменные, с которыми запускается сервер, кнопка Restart отправляет корректную остановку, чтобы мир успел сохраниться, а вкладка Schedules может в заданный час выполнить бэкап и затем перезапуск. Для ванильной группы это и есть вся процедура обновления; для группы с модами убедитесь, что в расписании нет ничего, что подтянет новую сборку игры раньше, чем будут готовы ваши моды. Примеры разумных расписаний есть в статье расписания перезапусков, которые помогают.
Обновления и файл мира#
С некоторыми обновлениями формат мира меняется. Valheim конвертирует более старый мир, когда его загружает более новая сборка, и сохраняет его в новом формате. Из этого два следствия:
- Для этого мира пути назад нет. Как только новая сборка его сохранила, старая может отказаться его загружать. Ваш бэкап до обновления - единственная копия, которую сможет прочитать старая версия.
- Первый запуск после крупного обновления медленнее. Конвертация и новое сохранение большого мира могут занять заметно больше времени, чем обычный запуск. Не убивайте процесс из-за того, что консоль молчит; дайте ему закончить и сохраниться.
Хорошая привычка - делать ручной бэкап непосредственно перед каждым обновлением и подписывать его версией, на которой он снят. Чек-лист дня обновления игрового сервера подходит для Valheim без изменений.
FAQ#
Почему Valheim пишет Incompatible version, если ничего не менялось?
Кое-что изменилось: патч игры дошёл до игроков раньше, чем до сервера. Сравните версию в главном меню со строкой Valheim version в логе сервера и обновите ту сторону, которая отстаёт.
Нужно ли обновлять сервер после каждого хотфикса?
Считайте, что нужно. Некоторые небольшие хотфиксы сохраняют ту же сетевую версию и остаются совместимыми, но заранее не угадаешь, какие именно, а обновление ванильного сервера стоит одного перезапуска.
Можно ли запретить Steam обновлять игру, чтобы группа осталась на старой версии?
Надёжно - нет. Steam устанавливает обновления при запуске, а релизная ветка не предлагает старых сборок. Группы, которым нужна замороженная версия, борются с платформой; проще дождаться модов и обновиться вместе.
Удаляет ли validate мой мир?
Нет. Он только сверяет файлы в папке установки с манифестом Steam. Миры лежат в папке сохранений вне установки, если только вы не указали -savedir внутри неё, а это хороший повод так не делать.
Почему мой друг на Xbox не может зайти после того, как я обновил сервер?
Сборки для Xbox и Microsoft Store иногда получают патчи позже Steam. Пока у него нет обновления, он остаётся на старой версии, и обновлённый сервер его отклоняет. Обычно хватает подождать день.
Сколько занимает обновление сервера Valheim?
Загрузка обычно занимает минуту-две. Прибавьте корректную остановку, запуск и загрузку мира и рассчитывайте на пять минут, а при первом запуске после большого контентного обновления - больше.


