RE:NODE

Сервер Valheim с модами после патча игры: день патча

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


Когда Valheim получает патч, а на вашем сервере стоят моды, безопасный порядок такой: не обновлять сервер, сделать его backup и заблокировать этот backup, проверить на странице каждого мода наличие обновления или пометки "всё ещё работает", протестировать новую сборку игры с обновлёнными модами на копии мира и только потом обновить сервер и разом раздать группе новый профиль. Большинство патчей снова играбельны через день-два; крупный, меняющий версию Unity, может потребовать недели, пока контентные моды не догонят. Патч превращается в потерянный мир не из-за ожидания, а из-за того, что кто-то в спешке обновил половину стека и начал на нём играть.

В этой статье разобран один день патча на сервере, близком к реальному: шесть игроков, десяток модов, один контентный мод - от момента, когда Steam скачивает обновление, до вечера, когда все снова играют.

Почему патч игры ломает сервер с модами#

Когда Iron Gate выпускает обновление, происходят три разные вещи, и полезно не смешивать их.

Игра обновляется сама на ПК каждого игрока. Steam раздаёт патч, как только он выходит. Можно настроить обновление игры только при запуске, но r2modman запускает Valheim через Steam, так что запуск профиля с модами всё равно скачает патч. Официального способа надолго оставить клиентов группы на старой сборке нет.

Выделенный сервер не обновляется. Это отдельное приложение Steam, 896660, и обновляется оно, только когда что-то запускает SteamCMD для него. Старый сервер и новый клиент не могут общаться: игрок получает "Incompatible version". Не каждый небольшой патч меняет то, что проверяют сервер и клиент, поэтому некоторые хотфиксы подключаются нормально между сборками - наличие или отсутствие ошибки подсказывает, какой у вас случай.

Моды могут пережить патч, а могут и нет. Моды BepInEx работают, патча код самой игры во время её работы. Если патч переименовал или изменил метод, который патчит мод, мод перестаёт работать - иногда с понятной ошибкой в BepInEx/LogOutput.log, иногда молча, иногда с падением при запуске. Небольшие QoL-моды часто переживают мелкий патч без изменений. Библиотеки вроде Jotunn и крупные контентные моды вроде Epic Loot с наибольшей вероятностью потребуют обновления, потому что затрагивают больше всего кода игры.

Следствие: какое-то время после патча у игроков новая игра, у сервера старая, а моды где-то посередине. Ваша задача - свести все три к одному состоянию за один шаг, а не за три.

До дня патча: что должно быть готово заранее#

Всё проходит гораздо спокойнее, если четыре вещи были настроены задолго до любого патча.

  1. Закреплённый файл профиля. Набор модов группы в виде экспортированного .r2z с названием, содержащим дату или номер, закреплённый в канале группы. Если у вас есть только код профиля, к нужному моменту он может перестать работать. Как собрать и закрепить профиль, описано в материале Профили r2modman для групп.
  2. Никаких автоматических обновлений на сервере. Если сервер подтягивает новую сборку игры при каждом запуске, плановый перезапуск в ночь патча обновит игру под вашими модами без спроса. На вашей собственной машине это значит, что строки SteamCMD нет в скрипте запуска. На панельном хостинге проверьте, что делает запуск: многие запускают SteamCMD при каждом старте, у некоторых есть переменная, чтобы это отключить, - и убедитесь, что никакое расписание не перезапускает сервер ночью во время заморозки.
  3. Свежий backup всего сервера. Файлы мира и папка BepInEx вместе, а не только мир.
  4. Один ответственный. Тот, кто отвечает за профиль, отвечает и за день патча. Все остальные ждут его сообщения.

Час ноль: заморозить сервер#

Патч вышел. Steam на вашем ПК его скачивает. Что делать в первый час:

  1. Не обновляйте сервер. Оставьте его на старой сборке. Если он должен был обновиться при запуске, остановите его сейчас.
  2. Сделайте backup и заблокируйте его. Это копия мира до того, как кто-то сыграет на новой сборке игры со старыми модами. Назовите её так, чтобы узнать потом, например pre-patch-0.2xx, и заблокируйте, чтобы ночная ротация её не вытеснила.
  3. Сообщите группе. Одно сообщение: сервер заморожен, пока моды не догонят, не нажимайте "Update all" в r2modman, не устанавливайте моды вручную, вы напишете, когда всё будет готово.
  4. Запишите новую версию игры. Она указана в заметках к патчу и в главном меню игры. Она нужна, чтобы читать страницы модов.

Пока это всё. Игроки, которые хотят играть во время заморозки, могут запустить игру без модов на локальном одиночном мире. Зайти на сервер они не могут: он на старой версии, а они на новой.

The message to pin in your group channel
Valheim patched today. Server is on hold until the mods update.Do NOT press "Update all" in r2modman. Do NOT add mods.I will post a new profile file when it is ready. Probably 1-3 days.

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

Проверка страницы каждого мода#

Теперь пройдите по профилю пакет за пакетом. Для каждого откройте его страницу на Thunderstore и посмотрите на три вещи: последнюю версию и её дату, список изменений и любую заметку автора о новой версии игры. У многих авторов есть Discord или страница задач на GitHub, где на вопрос "работает ли это на новом патче" отвечают в течение нескольких часов.

Идите снизу вверх по дереву зависимостей:

  1. BepInExPack Valheim. Обычно без изменений. Новый релиз нужен в основном тогда, когда игра меняет версию Unity, а это бывает при крупных обновлениях.
  2. Библиотеки - Jotunn, HookGenPatcher и всё, от чего зависят другие моды. Обычно они обновляются первыми, потому что остальные ждут именно их.
  3. Контентные моды. Они занимают больше всего времени. Следите за обновлением или явной пометкой "works on the new patch".
  4. QoL-моды. Часто продолжают работать. Отсутствие обновления не доказывает поломку.

Ведите небольшую таблицу по ходу дела; она превращает "готово ли уже" из ощущения в список.

ПакетСостояние после патчаДействие
BepInExPack ValheimНовой версии нет, не нужнаОставить
JotunnОбновлён в тот же деньОбновить
PlantEverythingОбновлён на следующий деньОбновить
AzuCraftyBoxesОбновления нет, автор говорит, что работаетОставить, проверить
Epic LootОбновление в работеЖдать
Discord ConnectorОбновления нетОставить, проверить

Таблица выше - пример, а не отчёт о каком-то конкретном патче. Ваша настоящая таблица зависит от патча и модов.

Мод, помеченный на Thunderstore как deprecated, или мод, автор которого сказал, что прекратил работу, требует решения, а не терпения. Замену или отказ от мода разбирает материал Что делать, когда обновление мода всё ломает.

Если хотите получить предупреждение до выхода патча: Iron Gate сначала тестирует крупные обновления на публичной тестовой ветке, и многие авторы модов тестируют там же. Запуск копии вашего сервера на этой ветке описан в материале Сервер на публичной тестовой ветке.

Тест на копии#

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

  1. Скопируйте профиль. В r2modman экспортируйте текущий профиль в файл, затем импортируйте его как новый профиль с тестовым названием, например Longship-test. Никогда не тестируйте на профиле, которым пользуется группа.
  2. Обновите тестовый профиль. Обновляйте только пакеты, которые указаны в вашей таблице, а не "Update all", который подтянет версии, о которых вы ничего не читали.
  3. Скопируйте мир. Скачайте .db и .fwl мира из backup сервера и положите их в локальную папку worlds_local: в Windows это %USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local\. Переименуйте пару, если мир с таким названием уже есть локально, сохранив у обоих файлов одинаковое имя.
  4. Запустите с модами и загрузите копию. Запустите тестовый профиль, откройте скопированный мир и зайдите в него персонажем, которым не жалко рискнуть: моды могут съесть инвентарь, если ломаются.
  5. Выполните проверки. Дойдите до главной базы. Откройте сундуки. Скрафтите что-нибудь на каждой станции, включая всё, что добавляют контентные моды. Убедитесь, что модовые предметы всё ещё лежат в сундуках и сохранили свои свойства. Посадите что-нибудь. Переспите ночь. Затем корректно выйдите и посмотрите лог.
bash
# In the test profile's folder after quitting$ grep -E 'Error|Exception' BepInEx/LogOutput.log | sort | uniq -c | sort -rn | head

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

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

Поэтапное развёртывание#

Тест пройден. Теперь настоящий сервер, в строгом порядке, чтобы сбой на любом шаге оставлял вас в точке, из которой можно откатиться. Обновление игры на шаге 4 на Linux-сервере, которым вы управляете сами, - это одна строка SteamCMD:

bash
$ steamcmd +force_install_dir /home/valheim/server +login anonymous \    +app_update 896660 validate +quit

validate не затрагивает BepInEx/, doorstop_libs и start_server_bepinex.sh, потому что они не входят в файлы игры. На панельном хостинге используйте тот способ обновления, который есть у хостинга: часто это перезапуск с включённым обновлением, иногда кнопка переустановки. С кнопками переустановки будьте осторожны: выясните, что именно удаляет переустановка на хостинге, прежде чем применять её на сервере с модами.

  1. Объявите время. "Сервер будет недоступен двадцать минут начиная с 19:00." Пока это происходит, никто не заходит.
  2. Корректно остановите сервер и дождитесь в логе строки о сохранении мира.
  3. Сделайте второй backup. Первый был до патча; этот зафиксирует всё, что играли с тех пор, если ваш сервер оставался на старой сборке.
  4. Обновите файлы игры командой выше или способом вашего хостинга.
  5. Обновите BepInExPack, если так сказано в таблице, загрузив содержимое нового пака поверх корня сервера.
  6. Замените моды. Удалите BepInEx/plugins и BepInEx/patchers на сервере и загрузите на их место папки из тестового профиля. Снова уберите клиентские моды. Файлы BepInEx/config оставьте серверные, если только в списке изменений не сказано, что формат конфига изменился: в серверной копии лежат ваши настройки, нужные только серверу.
  7. Запустите и прочитайте лог. Все моды перечислены с новыми номерами версий, Chainloader startup complete, затем загрузка мира. Запуск с модами может занять пару минут.
  8. Первым заходит владелец, на тестовом профиле, и повторяет быстрые проверки из теста.
  9. Экспортируйте и опубликуйте новый профиль. Экспортируйте тестовый профиль в файл с новым названием - Longship-2026-10b - и опубликуйте его. Все импортируют его перед следующей сессией.

Если шаг 7 или 8 не удался, остановите сервер и восстановите backup из шага 3. Вы ничего не теряете, сервер возвращается в известное состояние, и вы можете разбираться, не заставляя группу ждать из-за сломанного мира.

restore if it failsСтраницы модовсначала зависимостиТест на копиипрофиль, копия мираОбновить серверигра, пак, модыГруппа импортируетфайл нового профиляЗаморозка сервераbackup, блокировка
Порядок дня патча - каждый шаг можно откатить к предыдущему

Когда один мод не готов#

Патчи редко ломают все моды сразу. Обычно группу задерживают один-два, и у вас три варианта.

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

Временно убрать клиентский или QoL-мод. Если AzuCraftyBoxes - единственный неготовый мод и группа может неделю прожить без крафта из сундуков, уберите его из профиля и с сервера, экспортируйте, раздайте и верните, когда он обновится. QoL-моды редко хранят что-либо в мире, так что риск низкий, но проверьте страницу мода на случай, если хранит.

Убрать контентный мод. Это дорогой вариант. Предметы и элементы построек, добавленные контентным модом, без него не загрузятся, а предметы в инвентаре игроков могут пропасть, когда персонаж сохранится без них. Что-то может вернуться, если переустановить мод до того, как мир и персонажи сохранены снова, но рассчитывать на это нельзя. Если идёте этим путём, сначала сделайте заблокированный backup и смиритесь с тем, что мир может не вернуться в точности к прежнему виду.

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

Пример хода патча#

Вот как один патч прошёл у группы из шести человек с примерным набором из руководства по серверу с модами. У вас детали будут другими; общая форма обычно та же.

КогдаЧто произошлоЧто сделал владелец
День 1, 14:00Вышел патч, Steam обновляет клиентыОстановил сервер, заблокировал backup, опубликовал сообщение о заморозке
День 1, 18:00Обновился JotunnОтметил это, больше ничего не делал
День 2, 10:00Обновился PlantEverything, QoL-моды не тронутыОбновил таблицу
День 2, 21:00Обновился Epic LootСкопировал профиль, обновил моды из списка, протестировал копию мира
День 2, 22:00Тест чистый, кроме одного предупрежденияПрочитал предупреждение, счёл безвредным
День 3, 19:00Объявлено развёртываниеВторой backup, обновление через SteamCMD, новые моды, проверка лога
День 3, 19:25Владелец зашёл, проверки пройденыОпубликовал файл нового профиля
День 3, 20:00Группа снова в игреЧерез неделю разблокировал самый старый backup до патча

Общий простой около двух дней - это типично для патча среднего размера с одним контентным модом. Патч, меняющий версию Unity, идёт медленнее; хотфикс часто решается за часы.

Диагностика после патча#

"Incompatible version" после развёртывания. Кто-то не обновил игру, либо обновление сервера не применилось. Лог сервера выводит версию игры при запуске; сравните её с версией в главном меню на ПК игрока.

Выкидывает при подключении, в сообщении указан мод. Игрок на старом профиле или нажал "Update all" и опережает сервер. Пусть импортирует новый файл. Каждое сообщение объясняет материал Отключения из-за несовпадения версий модов.

Сервер запускается, но моды не загружаются. Он работает на ванильном запуске, часто после того, как обновление или переустановка на стороне хостинга сбросили команду запуска. Проверьте, что BepInEx по-прежнему включён и что BepInEx/LogOutput.log был перезаписан при последнем запуске.

Сервер падает во время запуска. Какой-то плагин не работает. Прочитайте последние строки LogOutput.log, переместите названный мод из plugins и попробуйте снова. На RE:NODE три перезапуска из-за падения за час выводят предупреждение на странице сервера и открывают тикет, так что цикл заметят, но останавливайте сервер сами, а не давайте ему крутиться.

У предметов пропали зачарования или сами предметы исчезли. Контентный мод не загрузился на сервере или у клиента во время сессии. Остановите сервер, восстановите backup, сделанный перед развёртыванием, и исправьте набор модов до того, как кто-нибудь снова сыграет: каждое сохранение на сломанном наборе делает потерю окончательной.

В мире нет нового контента биомов. Это не проблема модов: новый контент генерируется только в зонах, которых никто не исследовал. Что патч может и чего не может добавить в уже исследованный мир, объясняет материал Старые миры и новые биомы, а сбои при запуске, не связанные с модами, разбирает Сервер Valheim падает при запуске.

FAQ#

Можно ли оставить сервер на старой версии, пока моды не будут готовы?

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

Стоит ли отключить моды и играть в ваниль, пока они не обновятся?

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

Как понять, что мод работает, если автор его не обновил?

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

Нужно ли обновлять BepInExPack после каждого патча?

Нет. Обновление нужно в основном тогда, когда игра переходит на новую версию Unity, а это бывает при крупных обновлениях. Когда нужен новый релиз, сказано на его странице Thunderstore и в списке изменений.

Как долго хранить backup до патча?

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

Безопасно ли настраивать автоматические обновления на сервере с модами?

Для обновлений игры - нет. Плановый backup и плановый перезапуск - хорошие идеи, если только перезапуск не подтягивает заодно новую сборку игры. На сервере с модами обновления игры должен запускать человек.