MAATRIX GAMES / Блог / Stationeers: установка модов на сервер

Stationeers: установка модов на сервер

MAATRIX GAMES

Ванильный Stationeers — уже сложная игра, но рано или поздно хочется того, чего в базовой версии нет: нового оборудования, упрощённой логистики труб или готового набора IC10-скриптов без ручного кодинга с нуля. Проблема в том, что моды здесь ставятся не так, как в условном Minecraft одним архивом в папку — на dedicated-сервере это связка Workshop ID, XML-конфига и (для части модов) отдельного лоадера поверх BepInEx. Разберём по шагам, как подписаться на мод, довести его до сервера и не сломать при этом уже идущий сейв. Если сервер ещё не поднят — сначала пошаговая инструкция по установке сервера Stationeers: там про SteamCMD, флаги запуска и структуру папки сервера, на которую мы будем опираться ниже.

Как устроены моды в Stationeers: два разных мира

Прежде чем лезть в конфиги, стоит понять, что под словом "мод" в Stationeers скрываются фактически два разных механизма, и путать их — источник половины проблем на форумах.

  • Контент-моды через Steam Workshop — новые предметы, структуры, рецепты, текстуры, наборы деталей. Технически это XML-описания и ассеты, которые игра подгружает через собственный ModConfig.xml на сервере и клиенте. Разработчики (и Workshop-страница игры) сами предоставляют именно этот путь.
  • Код-моды через BepInEx — полноценные C#-сборки, которые патчат логику игры через Harmony (то же семейство инструментов, что используется в моддинге ряда других Unity-игр через BepInEx). Официальной поддержки у Stationeers для них нет, но сообщество давно закрыло эту нишу — самый популярный лоадер сейчас называется StationeersLaunchPad.
Контент-моды (Workshop)Код-моды (BepInEx)
Что меняютпредметы, структуры, рецепты, текстурылогику, механики, поведение систем
ФорматXML + ассетыскомпилированные DLL-сборки
Конфиг на сервереModConfig.xmlmodconfig.xml + BepInEx/plugins (генерируется лоадером)
Поддержка разработчиковофициальная, через Workshopнеофициальная, силами сообщества
Риск при обновлении игрыломается реже (в основном данные)ломается чаще (правки в C#-коде игры)

Оба типа модов можно использовать одновременно на одном сервере — они не конфликтуют по механизму подключения, но каждый требует своей настройки, и ниже мы пройдём по обеим.

Находим ID мода и скачиваем его через SteamCMD

Для сервера (в отличие от клиента) подписка через Steam-клиент не обязательна — проще и надёжнее стянуть мод напрямую через SteamCMD, тем же способом, каким качали сам сервер.

Сначала находим числовой Published File ID мода:

  1. Открываем страницу мода в Steam Workshop (steamcommunity.com/sharedfiles/filedetails/?id=...).
  2. Число после ?id= в адресной строке — это и есть искомый ID, обычно 9-10 цифр.

Скачиваем контент мода на сервер. Обратите внимание: Workshop-элементы Stationeers привязаны к app ID основной игры (544550), а не к app ID dedicated-сервера (600760, который мы использовали при установке самого сервера):

steamcmd +login anonymous \
  +force_install_dir ~/stationeers-server \
  +workshop_download_item 544550 3570726509 \
  +quit

Мод скачается в ~/stationeers-server/steamapps/workshop/content/544550/3570726509/. Дальше содержимое этой папки нужно перенести в мод-директорию самого сервера:

mkdir -p ~/stationeers-server/rocketstation_DedicatedServer_Data/StreamingAssets/mods
cp -r ~/stationeers-server/steamapps/workshop/content/544550/3570726509 \
  ~/stationeers-server/rocketstation_DedicatedServer_Data/StreamingAssets/mods/

Папка StreamingAssets/mods в свежей установке сервера не создаётся автоматически — её приходится завести руками при первой установке мода. Имя вложенной папки должно совпадать с Workshop ID (3570726509 в примере) — сервер ищет контент именно по этому имени, а не по названию мода.

Поднять сервер Stationeers за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Настройка ModConfig.xml

Файл ModConfig.xml живёт в корне сервера — рядом с исполняемым файлом rocketstation_DedicatedServer.x86_64, а не внутри _Data. Если его ещё нет, создаём вручную:

<?xml version="1.0" encoding="utf-8"?>
<ModConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Mods>
    <unsignedLong>1</unsignedLong>
    <unsignedLong>1001</unsignedLong>
  </Mods>
  <DisabledMods>
  </DisabledMods>
  <LocalMods>
    <LocalMod>
      <folder>3570726509</folder>
      <modID>1001</modID>
    </LocalMod>
  </LocalMods>
</ModConfig>

Что здесь происходит:

  • <Mods> — список внутренних ID модов, которые сервер должен загрузить. 1 — зарезервированное значение под базовый контент игры, трогать его не нужно. Собственные моды нумеруются начиная с 1001 и далее по возрастанию (1002, 1003...) — это внутренняя нумерация ModConfig.xml, никак не связанная с реальным Workshop ID.
  • <LocalMods> — сопоставление внутреннего modID с реальной папкой мода на диске. folder — это как раз то самое имя папки, совпадающее с Workshop ID (3570726509), которую мы скопировали на предыдущем шаге.
  • <DisabledMods> — список модов, которые физически лежат на сервере, но временно выключены; удобно, когда нужно быстро откатиться после спорного обновления мода, не удаляя файлы.

Для каждого следующего мода добавляйте новую строку <unsignedLong> с очередным внутренним ID и свой блок <LocalMod> с соответствующей парой folder/modID. Порядок элементов в <Mods> — это ещё и порядок загрузки: моды ниже по списку перекрывают правки тех, что выше, так что общие оверхолы логично ставить в начало списка, а точечные правки — в конец.

Сервер перечитывает ModConfig.xml только при старте — на лету список не обновляется, поэтому перед правкой файла сервер обязательно останавливаем, а после — перезапускаем.

Код-моды через BepInEx и StationeersLaunchPad

Если нужный мод — не набор XML-данных, а C#-сборка (меняет игровую логику, а не просто добавляет предметы), путь через ModConfig.xml не подойдёт: такие моды идут через BepInEx — тот же принцип, что и в моддинге Valheim или Rust, только для Stationeers эту связку собирает и поддерживает сообщество, а не разработчики игры.

Базовый порядок действий:

  1. Установите BepInEx (актуальная 5.4.x на момент написания) в папку dedicated-сервера — распаковывается рядом с rocketstation_DedicatedServer.x86_64.
  2. Установите StationeersLaunchPad — он идёт как плагин BepInEx, файлы кладутся в BepInEx/plugins.
  3. На своей клиентской машине с уже настроенным LaunchPad откройте окно загрузки игры (клик по строке загрузки внизу экрана при старте) и нажмите Export Mod Package — соберётся zip с включёнными модами и конфигом.
  4. Распакуйте этот zip в папку dedicated-сервера — на выходе появятся modconfig.xml (в нижнем регистре — это отдельный файл от классического ModConfig.xml, они не пересекаются) и папка mods рядом с исполняемым файлом сервера.
  5. Перезапустите сервер.

Такой способ удобнее ручной правки XML тем, что список модов и их порядок собираются один раз в игровом клиенте, а не вручную построчно — особенно ощутимо на сборках из полутора десятков модов и больше. Минус — лишний слой (BepInEx + лоадер), который тоже может отставать от новой версии игры после патча.

Кое-где в сторонних гайдах встречается параметр запуска вида -mod="id1,id2" как альтернатива конфигу. Официально он нигде не задокументирован и на части сборок сервера не срабатывает — не стоит полагаться на него вместо ModConfig.xml/modconfig.xml.

Синхронизация версий и порядка модов с клиентами

Самая частая причина, по которой игроки не могут зайти на модифицированный сервер, — не баг, а банальное рассогласование списков.

  • Список модов должен совпадать буквально. Если на сервере включены три мода, а у игрока в игровом меню Mods подписаны и активны только два (или те же три, но в другом порядке) — подключение либо не пройдёт, либо пройдёт с расхождениями по контенту.
  • Порядок важен так же, как и состав. Как и в ModConfig.xml на сервере, в клиентском меню Mods порядок модов определяет, какие правки перекрывают какие — держите один и тот же порядок везде, а не только один и тот же набор.
  • Версия игры должна совпадать у сервера и клиентов — это касается и без модов, но с ними цена рассинхрона выше: устаревший клиент может просто не знать о новых предметах или структурах из мода, актуального под свежий патч.
  • Клиентам не нужно скачивать контент-моды вручную с вашего сервера — обычная практика в сообществе Stationeers: администратор публикует список Workshop ID в описании сервера или в Discord, а игроки сами подписываются на те же моды через Steam Workshop у себя. Автораздачи модов при коннекте, как в некоторых других играх, тут можно не ждать — планируйте на это отдельное объявление для игроков перед запуском модифицированного сейва.

Типичные ошибки и диагностика

  • Сервер не стартует после добавления мода. Первым делом — в лог. Чаще всего причина в опечатке: имя папки в <folder> не совпадает с реальным названием директории мода на диске, либо забыли продублировать внутренний ID в обеих секциях (<Mods> и <LocalMods>). Если после правки конфига сервер отказывается подниматься — см. общий разбор в статье «Stationeers не запускается», там частая база причин, не только по модам.
  • Мод скачался, но сервер его не видит. Проверьте, что содержимое из steamapps/workshop/content/544550/<ID>/ действительно скопировано в StreamingAssets/mods/, а не осталось только в папке SteamCMD — сам факт скачивания через workshop_download_item ничего не переносит в игровую директорию автоматически, это отдельный шаг.
  • После добавления мода ломаются старые сохранения. Контент-моды, которые вводят новые предметы или структуры, при удалении могут оставить в сейве "осиротевшие" ссылки на несуществующий контент — сохранение либо откажется грузиться, либо покажет заглушки вместо пропавших объектов. Перед экспериментами с новым модом на боевом сейве сделайте бэкап — как описано в статье про восстановление и проблемы с сохранением Stationeers.
  • Мод работал, а после обновления игры перестал. Контент-моды переживают патчи лучше код-модов, но не всегда: если структура XML-данных в игре поменялась, старый мод может просто не подхватиться. Держите привычку проверять список модов на тестовом сейве после каждого крупного обновления, прежде чем катить изменения на сервер, где играют люди — тот же принцип разобран в статье про автообновление модов на сервере.
  • Игроки видят разный контент друг у друга. Почти всегда — рассинхрон списка или порядка модов между клиентами, реже — разные версии одного и того же мода (автор выпустил обновление, а часть игроков ещё не переподписалась). Попросите всех проверить список активных модов в игровом меню Mods и порядок в нём.

Поднять сервер Stationeers за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Нужно ли серверу иметь купленную копию игры для скачивания модов?

Нет, workshop_download_item через анонимный вход SteamCMD работает для публичных Workshop-элементов Stationeers так же, как и скачивание самого dedicated-сервера — покупать игру на аккаунт для сервера не требуется.

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

Нет, и ModConfig.xml, и modconfig.xml от StationeersLaunchPad читаются только при старте сервера — любое изменение требует остановки и повторного запуска процесса.

Чем контент-мод отличается от код-мода на практике?

Контент-мод — это новые предметы, структуры или рецепты в виде данных (XML), а код-мод меняет саму логику игры через C#-сборку и BepInEx. Первые ставятся через ModConfig.xml и Workshop, вторые — через BepInEx и StationeersLaunchPad.

Что делать, если после удаления мода сейв не грузится?

Восстановите мод обратно (проще всего — если делали бэкап до эксперимента) или проверьте лог сервера на упоминание конкретного отсутствующего ID/предмета — иногда достаточно временно вернуть только один недостающий мод, а не откатывать весь список.

Работают ли одновременно контент-моды и код-моды через BepInEx?

Да, механизмы независимы: ModConfig.xml отвечает за Workshop-контент, BepInEx/StationeersLaunchPad — за код-моды, и они не конфликтуют между собой на уровне подключения, хотя логику каждого мода всё равно стоит проверять по отдельности.