RE:NODE

Руководства12 мин чтения

Сервер Space Engineers: конфиг и PCU

Как поднять выделенный сервер Space Engineers: SpaceEngineers-Dedicated.cfg, настройки мира, PCU и лимиты блоков, порты, админы, моды и sim speed на уровне 1.0.

0 прочтений

Выделенный сервер Space Engineers - это бесплатная программа для Windows (Steam app 298740, скачивается анонимно), которая загружает один мир и держит его запущенным, даже когда никого нет онлайн. Его настройки лежат в SpaceEngineers-Dedicated.cfg и в собственном файле мира Sandbox_config.sbc, по умолчанию он слушает UDP 27016, а играбельность сервера определяет не RAM и не число игроков, а sim speed - отношение симулированного времени к реальному, которое должно держаться на 1.0. Всё, что тянет sim speed вниз, - это физика: гриды, сабгриды, столкновения и скрипты. Лимиты PCU нужны, чтобы игроки не строили больше физики, чем может потянуть CPU. Настройте лимиты до того, как появится первая база, и сервер будет радовать месяцами; настроите потом - и придётся удалять чей-то корабль.

Как устроен хостинг Space Engineers#

Запустить мультиплеерный мир можно тремя способами, и они не взаимозаменяемы:

  • Лобби (хост из игры): мир работает на ПК одного из игроков, который одновременно играет. Мир существует, только пока этот игрок онлайн, а его FPS конкурирует с симуляцией.
  • Выделенный сервер (от Keen): SpaceEngineersDedicated.exe из app 298740. В Windows у него есть графический конфигуратор, а без интерфейса он работает как консольный процесс или служба Windows.
  • Torch: созданная сообществом обёртка вокруг того же выделенного сервера, которая добавляет систему плагинов, более удобный интерфейс администратора и плагин Essentials, на который опирается большинство публичных серверов. Это не официальный продукт, и он отстаёт от обновлений игры на часы или дни.

Сервер работает только под Windows. В Linux его запускают через Wine, и есть контейнерные образы от сообщества, которые делают ровно это, но Keen такой вариант не поддерживает, и иногда обновление игры ломает связку с Wine раньше, чем кто-то успевает её починить. Если вы выбираете машину для долгоживущего сервера, Windows VDS - вариант без сюрпризов; Linux с Wine работает и обходится дешевле, если вы готовы сами быть службой поддержки. В статье Выбор между VDS и игровой панелью этот компромисс разобран в общем виде.

Space Engineers 2 - отдельная игра со своей историей серверов, которая ещё меняется в раннем доступе. Если не сказано иное, ничего из написанного ниже к ней не относится.

Требования: сначала CPU, потом память#

Space Engineers - самый чистый пример игры, где CPU важнее RAM. Физика в основном работает в одном потоке, поэтому потолок задаёт тактовая частота. Память растёт вместе с числом гридов, загруженных вокруг игроков, и с модами.

МирRAMCPUПримечания
2-4 игрока, ванилла, одна планета4-6 GB2 быстрых ядраКомфортно, пока базы маленькие
5-10 игроков, несколько станций6-8 GB2-3 ядраЛимиты PCU начинают иметь значение
10-20 игроков, моды, много гридов10-16 GB3-4 ядраНужны очистка мусора и строгие лимиты
Публичный сервер, 30+ игроков16 GB+4 быстрых ядраTorch, плагины, агрессивная очистка
  • Диск: сервер занимает примерно 10 GB. Папка мира поначалу маленькая и по мере строительства разрастается до сотен мегабайт; с модами добавьте ещё кеш модов. NVMe заметно сокращает подвисание при сохранении.
  • Планеты стоят памяти: каждая загруженная планета держит вокруг игроков воксельные данные. Мир с пресетом полной солнечной системы потребляет больше, чем старт на одной планете или в пустом космосе.
  • Игроки стоят ресурсов через то, что строят, а не через своё присутствие онлайн. Десять человек, копающих астероиды, обходятся дёшево; трое с буровыми установками на роторах и стеной принтеров - нет.

Установка и первый запуск#

В Windows через SteamCMD:

bash
$ steamcmd +force_install_dir C:\se-server +login anonymous +app_update 298740 validate +quit

В статье Что такое SteamCMD объясняется, что делает validate и почему для этого приложения работает анонимный вход. В установке есть DedicatedServer64\SpaceEngineersDedicated.exe. Запустите его без аргументов, и откроется конфигуратор от Keen: выберите шаблон мира или существующее сохранение, заполните имя и лимиты, а затем либо запустите сервер прямо в этом окне, либо сохраните конфигурацию.

Для сервера без интерфейса запускайте его с -console:

bash
$ SpaceEngineersDedicated.exe -console -path "C:\se-server\instance"

Три аргумента, которые стоит знать:

  • -console запускает сервер как консольный процесс без GUI.
  • -path указывает на папку инстанса, где лежат SpaceEngineers-Dedicated.cfg, папка Saves и логи. Без него используется %AppData%\SpaceEngineersDedicated.
  • -ignorelastsession загружает мир, указанный в конфиге, а не последнюю сессию, которую запускал сервер.

Для ванильного мира первый запуск ничего дополнительно не скачивает, но если в списке есть моды, сервер перед загрузкой подтягивает их из Steam Workshop, и это может занять несколько минут. Следите в логе за строкой о том, что игра готова и сервер зарегистрирован в Steam.

SpaceEngineers-Dedicated.cfg: важные настройки#

Конфиг написан в XML. Настройки уровня сервера стоят вверху, правила мира - внутри <SessionSettings>. Сокращённый пример:

SpaceEngineers-Dedicated.cfg
<MyConfigDedicated>  <SessionSettings>    <GameMode>Survival</GameMode>    <MaxPlayers>12</MaxPlayers>    <AutoSaveInMinutes>5</AutoSaveInMinutes>    <ViewDistance>15000</ViewDistance>    <SyncDistance>3000</SyncDistance>    <EnableIngameScripts>true</EnableIngameScripts>    <BlockLimitsEnabled>PER_PLAYER</BlockLimitsEnabled>    <TotalPCU>200000</TotalPCU>    <TrashRemovalEnabled>true</TrashRemovalEnabled>    <InventorySizeMultiplier>3</InventorySizeMultiplier>    <AssemblerSpeedMultiplier>3</AssemblerSpeedMultiplier>    <RefinerySpeedMultiplier>3</RefinerySpeedMultiplier>  </SessionSettings>  <LoadWorld>C:\se-server\instance\Saves\Frontier\Sandbox.sbc</LoadWorld>  <IP>0.0.0.0</IP>  <ServerPort>27016</ServerPort>  <SteamPort>8766</SteamPort>  <ServerName>Frontier Engineering</ServerName>  <WorldName>Frontier</WorldName>  <PauseGameWhenEmpty>false</PauseGameWhenEmpty>  <Administrators>    <unsignedLong>76561198012345678</unsignedLong>  </Administrators></MyConfigDedicated>

Что делает каждая важная настройка:

НастройкаЧто она определяет
GameModeSurvival или Creative
MaxPlayersЧисло слотов, которое сервер объявляет и соблюдает
AutoSaveInMinutesИнтервал автосохранения; 0 его отключает
ViewDistanceДальность отрисовки гридов у клиентов, в метрах
SyncDistanceРадиус вокруг каждого игрока, в котором сервер держит полную синхронизацию
EnableIngameScriptsСкрипты программируемых блоков включены или выключены
BlockLimitsEnabledNONE, GLOBALLY, PER_FACTION или PER_PLAYER
TotalPCUБюджет PCU, распределяемый по режиму выше
TrashRemovalEnabledАвтоматическая уборка обломков и брошенных гридов
PauseGameWhenEmptyЗамораживает симуляцию, когда никого нет онлайн
AdministratorsSteamID64 с правами администратора

Что путает всех: у существующего мира есть собственная копия настроек сессии в Saves\<World>\Sandbox_config.sbc. SessionSettings из конфига выделенного сервера - это то, с чем создаётся новый мир; когда мир уже существует, действует то, что записано в файле мира, а некоторые конфигураторы пишут в оба места. Надёжный способ - остановить сервер, поменять значение и в Sandbox_config.sbc, и в конфиге сервера, чтобы они совпадали, и снова запустить. Править любой из них при работающем сервере бессмысленно - при сохранении он их перезапишет.

PCU и лимиты блоков#

PCU расшифровывается как Performance Cost Unit. У каждого блока есть значение PCU, отражающее его стоимость для сервера: броня дешёвая, функциональные блоки дороже, а всё, что связано с подвижной физикой или скриптами, дороже всего. PCU грида - сумма его блоков; PCU игрока или фракции - сумма всего, чем они владеют.

BlockLimitsEnabled определяет, как применяется TotalPCU:

  • `NONE`: лимита нет. Нормально для двух друзей в креативе, опасно в любом другом случае.
  • `GLOBALLY`: один общий пул на весь мир. Просто, но первый же любитель тяжёлых построек съест лимит всех остальных.
  • `PER_PLAYER`: общий объём делится между игроками. Предсказуемо и обычно выбирается на небольших приватных серверах.
  • `PER_FACTION`: общий объём делится между фракциями, что подталкивает людей объединяться. Так делают многие публичные серверы, часто с ограничением на размер фракции.

Значения по умолчанию менялись от версии к версии и зависят от пресета мира, поэтому откройте Sandbox_config.sbc своего мира и посмотрите фактические значения, а не верьте гайду. Помимо PCU есть MaxGridSize (блоков на грид) и MaxBlocksPerPlayer, а также лимиты по типам блоков, ограничивающие число конкретных дорогих блоков вроде буров или проекторов. Для небольшой группы хорошая отправная точка - PCU на игрока в пределах десятков тысяч, лимит размера грида, позволяющий построить настоящий флагман, и ограничение на проекторы.

Чего PCU плохо отражает, так это поведение. Конструкция из роторов и поршней на 3,000 PCU, которая каждый тик сталкивается сама с собой, может стоить больше, чем статичная станция на 30,000 PCU. Так что лимиты необходимы, но недостаточны - нужны ещё очистка и правила насчёт сабгридов.

Порты, админы и подключение#

ПортПротоколНазначение
27016UDPИгровой трафик (ServerPort)
8766UDPСвязь со Steam (SteamPort)
8080TCPRemote API, только если включён

Игроки находят сервер во внутриигровом браузере серверов или через список серверов Steam по IP и игровому порту. Remote API (RemoteApiEnabled, RemoteApiPort, RemoteSecurityKey в конфиге) используют удалённый клиент Keen и некоторые инструменты; держите его выключенным, если он вам не нужен, и никогда не открывайте его наружу с ключом по умолчанию. В статье Порты игровых серверов объясняется, почему сервер может прекрасно работать и при этом оставаться невидимым, если закрыт один из пары портов.

Админы берутся из списка Administrators в виде 17-значных SteamID64. В игре админ открывает экран администратора по Alt+F10: там инструменты очистки, список сущностей, режим наблюдателя, креативные инструменты и повышение других игроков. Список сущностей - самый полезный инструмент модерации на сервере: отсортируйте гриды по PCU или по владельцу, найдите брошенный горнодобывающий корабль на 400 блоков на краю системы и удалите его.

Torch добавляет команды чата через плагины - большинство серверов ставят Essentials, ради плановой очистки, управления гридами и перезапусков. Эти команды предоставляет плагин, а не игра, и их синтаксис описан в документации плагина.

Моды и Workshop#

Моды Space Engineers берутся из Steam Workshop, и выделенный сервер скачивает их сам. Они перечисляются в конфиге внутри <Mods>, каждый со своим id из Workshop:

xml
<Mods>  <ModItem FriendlyName="Example mod">    <Name>123456789.sbm</Name>    <PublishedFileId>123456789</PublishedFileId>  </ModItem></Mods>

Id выше - заглушка; настоящий id берите из URL страницы в Workshop. Клиенты при подключении скачивают те же моды автоматически, поэтому Space Engineers - одна из самых простых игр для мультиплеера с модами: вручную следить за совпадением модов не нужно. В статье Моды Steam Workshop на выделенных серверах в общем виде объясняется, как устроено скачивание на стороне сервера.

На что обращать внимание:

  • Скриптовые моды работают на сервере и могут обходиться так же дорого, как любая конструкция игроков. Фреймворк оружия или ИИ-кораблей - это решение о производительности, а не только о контенте.
  • Моды на блоки добавляют PCU так же, как ванильные блоки, но некоторые авторы ставят значения, не отражающие реальную стоимость.
  • Порядок модов важен, когда два мода меняют одно и то же определение; побеждает тот, что ниже.
  • После обновления игры сломанные моды обычно не дают миру загрузиться или выдают ошибки при подключении. Держите список того, что у вас стоит, и прочитайте что делать, когда обновление мода всё ломает, до того как это понадобится.

Как держать sim speed на 1.0#

Sim speed виден в отладочном оверлее (Shift+F11) и в Torch. Всё ниже примерно 0.8 ощущается вязким; ниже 0.5 игра уже сломана. Причины - примерно в порядке того, как часто именно они оказываются ответом:

  1. Сталкивающиеся сабгриды. Роторы, шарниры и поршни, которые касаются друг друга или земли, создают физическую работу на каждом тике. Классические виновники - clang-двигатели, буры на роторах, которые врезаются в воксели, и поршни, упирающиеся в статичные гриды.
  2. Слишком много активных гридов. Симулируется каждый грид, который запитан, движется или недавно был затронут. Обломки после боя и поле брошенных роверов обходятся гораздо дороже, чем говорит их PCU.
  3. Скрипты программируемых блоков, работающие каждый тик. EnableIngameScripts в false - грубое решение; лучше ввести правило, что скрипты работают на Update10 или Update100, а не на Update1.
  4. Большие `SyncDistance` и `ViewDistance`. Об этом выше.
  5. Изменения вокселей. Активное бурение на планетах обходится дорого; масштабные проекты по бурению лучше вести на астероидах.
  6. Сохранение. Большой мир на мгновение замирает при каждом автосохранении. Не ставьте AutoSaveInMinutes в 1.

Инструменты:

  • Уборка мусора. TrashRemovalEnabled вместе с флагами очистки через некоторое время убирает обломки, обесточенные и безымянные гриды, а также гриды далеко от игроков. Подберите задержку так, чтобы разбившийся корабль дожил до возвращения хозяина.
  • Список сущностей (Alt+F10), чтобы находить и удалять дорогие гриды.
  • Плановые перезапуски. Space Engineers на долгих сессиях течёт по памяти, а плавающие объекты накапливаются. Перезапуск раз в 12 или 24 часа, в тихий час и с предупреждением, держит сервер свежим - в статье Расписание перезапусков, которое помогает объясняется, как часто это полезно, а когда только мешает.
  • Правила. На большинстве публичных серверов есть письменные правила о числе сабгридов и роях дронов. Лимиты следят за числами, правила - за поведением.

Сохранения, backup и перенос мира#

Мир - это папка Saves\<WorldName>\, в которой лежат Sandbox.sbc (заголовок мира и настройки), Sandbox_config.sbc, SANDBOX_0_0_0_.sbs (гриды и сущности, самый большой файл), а также бинарные копии .sbsB5 и воксельные файлы изменённых астероидов и планет. Внутри сохранения сервер держит папку Backup с копиями по времени, которой управляют настройки backup в конфиге.

Чтобы перенести мир из одиночной игры на сервер:

  1. Найдите его в %AppData%\SpaceEngineers\Saves\<SteamID>\<WorldName>.
  2. Остановите сервер.
  3. Загрузите всю папку в каталог Saves на сервере - как это сделать, описано в статье SFTP и файловый менеджер.
  4. Укажите в LoadWorld путь к его Sandbox.sbc и убедитесь, что в Sandbox_config.sbc стоят нужные вам лимиты, потому что в мирах из одиночной игры их часто нет вовсе.
  5. Запустите сервер и проверьте лог.

Встроенная папка backup лежит на том же диске, что и мир, поэтому она защищает от повреждённого сохранения, но не от потери диска или сервера. Храните копии вне машины и время от времени восстанавливайте одну из них. Развёрнутая версия этого аргумента - в статье Backup, которые действительно восстанавливаются.

На RE:NODE у каждого игрового сервера есть слоты backup, которые хранятся вне защищаемой машины и восстанавливаются одной кнопкой, и вкладка Schedules, которая умеет по очереди запускать backup и перезапуск. Однако Space Engineers нет в каталоге, а его серверу нужны Windows или Wine, чего ни один игровой тариф здесь не даёт, - собирать такой сервер самостоятельно стоит на линейке VDS.

Решение проблем#

Сервер работает, но его нет в браузере. Проверьте, что оба UDP-порта открыты и что IP равен 0.0.0.0, а не устаревшему адресу. Подключитесь через список серверов Steam по IP, чтобы отделить проблему браузера от сетевой.

Игроков кикает из-за несовпадения мода или версии. Игра обновилась, а сервер нет, или предмет из Workshop обновился посреди сессии. Обновите сервер через SteamCMD и перезапустите, чтобы он подтянул актуальные моды.

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

Мир загружается с настройками по умолчанию. Вы правили конфиг выделенного сервера, но в Sandbox_config.sbc мира остались старые значения. Отредактируйте оба файла при остановленном сервере.

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

FAQ#

Сколько игроков выдержит сервер Space Engineers?

Настройка позволяет гораздо больше, чем обычно способна вытянуть симуляция. Хорошо настроенный ванильный сервер спокойно держит 10-20 игроков; дальше всё почти целиком зависит от того, что они строят и насколько строго вы следите за лимитами и очисткой.

Нужен ли серверу Space Engineers аккаунт Steam с купленной игрой?

Нет. Выделенный сервер скачивается через SteamCMD с анонимным входом. Игра нужна игрокам, серверу - нет.

Какой лимит PCU разумен для небольшой группы?

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

Можно ли запустить сервер Space Engineers на Linux?

Только через Wine. У многих это работает, но не поддерживается и иногда ломается после обновлений. Если аптайм важнее стоимости, запускайте на Windows.

Что выбрать - Torch или ванильный сервер?

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


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000