RE:NODE

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

Выделенный сервер Abiotic Factor: установка и настройки

Запуск сервера Abiotic Factor: установка через SteamCMD, все параметры запуска, SandboxSettings.ini, кроссплей, админы, порты, сохранения и типичные сбои.

2 прочтений

Выделенный сервер Abiotic Factor - это бесплатная загрузка через SteamCMD (app id 2857200), которая настраивается почти целиком аргументами командной строки, плюс один дополнительный файл с правилами мира. Шестеро игроков комфортно помещаются в 4 ГБ памяти; долгоживущему миру с отстроенной базой и дюжиной людей нужно 8 ГБ и больше. Ему нужны два UDP-порта: 7777 для игры и 27015 для запросов Steam, и он с удовольствием проработает месяцы, если останавливать его чисто и делать резервную копию одной папки.

Перед началом нужно понять, где хранятся настройки. Единого server.cfg нет. Имя, порты, слоты и пароли - это аргументы запуска. Правила мира - сложность, скорость появления врагов, скорость голода, штрафы за смерть - лежат в SandboxSettings.ini. Модераторы - в Admin.ini. Измените не то, и ничего не произойдёт, и на это приходится большая часть обращений в поддержку по этой игре.

Что такое выделенный сервер Abiotic Factor#

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

Несколько фактов, которые определяют всё остальное:

  • Серверная утилита - сборка для Windows. В депо Steam для приложения 2857200 лежит исполняемый файл Windows. Хостинг на Linux делается запуском под Proton или Wine, это работает хорошо и именно так поступает большинство Linux-хостов и хостов на контейнерах. Если к моменту, когда вы это читаете, появилась нативная сборка для Linux, она будет отдельным депо в том же приложении.
  • Он бесплатный и анонимный. Достаточно login anonymous в SteamCMD. Для запуска сервера не нужен аккаунт, владеющий игрой.
  • Персонажи хранятся на сервере. Ваш персонаж, ваши перки и ваш инвентарь принадлежат сохранению мира на этом сервере, а не вашему аккаунту Steam. Заход на другой сервер означает другого персонажа. Стоит сказать об этом группе до того, как кто-нибудь потратит вечер на тестовый сервер.
  • Кроссплей включён по умолчанию и ограничивается флагом, а не включается им. Это противоположно большинству игр и сбивает с толку тех, кто считает, что его нужно включать.

Требования и потребление ресурсов#

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

ИгрокиRAMvCPUПримечания
1-4, начало игры4 ГБ1Свежее сохранение, открыт один-два уровня
6, зрелый мир6 ГБ1.5Лимит по умолчанию с настоящей базой
8-128-10 ГБ2Сверх задуманного размера группы
16-2412 ГБ2.5-3Возможно, но не сбалансировано. Ждите странностей
  • CPU: сервер на Unreal, упирающийся в один главный поток. Тактовая частота важнее числа ядер. Нагрузка идёт от ИИ врагов и от симуляции построенных объектов, так что база, набитая машинами, обходится дороже пустого коридора.
  • Диск: закладывайте 10-15 ГБ на установку и помните, что она растёт с каждым патчем контента. Само сохранение невелико, несколько десятков мегабайт.
  • Сеть: лёгкая. Кооперативный сервер на шестерых не создаёт проблем с полосой; ощутима задержка между игроками и сервером.

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

Установка сервера через SteamCMD#

bash
$ steamcmd +force_install_dir C:\abiotic\server +login anonymous \    +app_update 2857200 validate +quit

Исполняемый файл окажется в AbioticFactor/Binaries/Win64/AbioticFactorServer-Win64-Shipping.exe. Запустите его один раз только с -log, дайте создать папки и остановите. Теперь у вас есть:

code
AbioticFactor/Saved/Config/WindowsServer/SandboxSettings.iniAbioticFactor/Saved/SaveGames/Server/Admin.iniAbioticFactor/Saved/SaveGames/Server/Worlds/Cascade/AbioticFactor/Saved/Logs/

На хостинге с панелью ничего из этого не вводится руками: установка выполняется при создании сервера, аргументы - это поля на вкладке Startup, а файлы правятся в браузере или по SFTP. Если вы делаете всё сами, в статье SteamCMD простыми словами разобраны app id, проверка и скрипты обновления.

автосохранение и чистая остановкаАргументы запускаимя, порты, слотыSandboxSettings.iniправила мираAdmin.iniмодераторыПроцесс сервераодин на мирСохранение мираSaved/SaveGames
Откуда сервер Abiotic Factor берёт настройки

Параметры запуска - это и есть конфигурация#

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

bash
AbioticFactorServer-Win64-Shipping.exe -log -useperfthreads \  -NoAsyncLoadingThread -SteamServerName="Cascade Nightshift" \  -MaxServerPlayers=6 -PORT=7777 -QueryPort=27015 \  -ServerPassword=hallway-42 -WorldSaveName=Cascade \  -AdminPassword=change-this
ПараметрПо умолчаниюЧто делает
-SteamServerName=стандартное имяНазвание в браузере серверов. Если есть пробелы, возьмите в кавычки
-MaxServerPlayers=6Слоты. Принимает больше, но игра рассчитана на шестерых
-PORT=7777Игровой порт, UDP
-QueryPort=27015Порт запросов Steam, UDP
-ServerPassword=пустоПароль для входа. Пусто - сервер публичный
-WorldSaveName=CascadeИмя папки сохранения, а значит и способ держать два мира
-AdminPassword=пустоПозволяет игроку получить права админа в игре
-AdminIniPath=по умолчаниюДругое расположение Admin.ini, относительно Saved
-SandboxIniPath=по умолчаниюДругое расположение SandboxSettings.ini
-PlatformLimited=выкл.PC, Playstation или Xbox. Ограничивает кроссплей
-LANOnlyвыкл.Только локальная сеть
-MultiHome=всеПривязка к одному адресу на машине с несколькими адресами
-logвыкл.Писать в стандартный вывод, а именно его читает панель
-newconsoleвыкл.Открывает отдельное окно консоли. Бессмысленно без экрана
-useperfthreadsвыкл.Многопоточность Unreal task-graph, есть в стандартном скрипте запуска
-NoAsyncLoadingThreadвыкл.Тоже есть в стандартном скрипте запуска

-WorldSaveName заслуживает больше внимания, чем ему достаётся. Он задаёт имя папки в Saved/SaveGames/Server/Worlds/, поэтому его смена начинает совершенно новый мир и оставляет старый нетронутым на диске. Это безопасный способ проверить патч или изменение песочницы: укажите серверу новое имя сохранения, поломайте всё что угодно, затем верните прежнее. Так же люди случайно «теряют» мир - ничего не удалялось, просто изменился аргумент.

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

ПортПротоколНазначение
7777UDPИгровой трафик
27015UDPЗапросы Steam, браузер серверов

Оба порта работают по UDP. Правило файрвола, открывающее только TCP, даёт сервер, который работает, пишет логи и никого не пускает, и это самая частая жалоба «не работает» для любой игры на Steam. Почему порт запросов отдельный и что ломается, когда доступен только один из пары, объяснено в статье порты игровых серверов.

Игроки попадают на сервер тремя путями:

  1. Список серверов в игре, который работает через порт запросов. Сервер с паролем всё равно в нём виден; игроков просят ввести пароль.
  2. Избранное Steam. В клиенте Steam откройте «Вид», затем «Игровые серверы», затем «Избранное» и добавьте 203.0.113.10:27015 - это порт запросов, а не игровой порт. Тогда сервер надёжно появляется в списке в игре, даже когда публичный список тормозит.
  3. Имя хоста вместо адреса, если вы предпочитаете раздавать что-то запоминающееся вместо IP. Подробности про запись A есть в статье как привязать домен к игровому серверу.

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

SandboxSettings.ini: правила мира#

Этот файл - аналог экрана песочницы в одиночной игре, и это единственный файл настроек, который нужен большинству серверов. Он должен начинаться с заголовка секции, а ключи чувствительны к регистру:

AbioticFactor/Saved/Config/WindowsServer/SandboxSettings.ini
[SandboxSettings]GameDifficulty=1HardcoreMode=FalseEnemySpawnRate=1.0EnemyHealthMultiplier=1.0EnemyPlayerDamageMultiplier=1.0DetectionSpeedMultiplier=1.0EnemyAccuracy=2HungerSpeedMultiplier=1.0ThirstSpeedMultiplier=1.0FatigueSpeedMultiplier=1.0DamageToAlliesMultiplier=0.5PlayerXPGainMultiplier=1.0DeathPenalties=1DurabilityLossOnDeathMultiplier=0.1ItemStackSizeMultiplier=1.0BaseInventorySize=12LootRespawnEnabled=FalsePowerSocketsOffAtNight=TrueDayNightCycleState=0FoodSpoilSpeedMultiplier=1.0StructuralSupportLimit=5AllowRecipeSharing=True

Настройки, которые меняют характер игры, а не ощущения на пять процентов:

КлючПо умолчаниюЧто делает
GameDifficulty11 обычная, 2 сложная, 3 апокалиптическая
HardcoreModeFalseОдна жизнь. Принудительно включает самую высокую сложность
AllowIronModeTrueIronman, имеет смысл только при включённом hardcore
LootRespawnEnabledFalseГлавная настройка для долгоживущих серверов, см. ниже
EnemySpawnRate1.0Как часто враги возвращаются
EnemyHealthMultiplier1.0Здоровье врагов
EnemyPlayerDamageMultiplier1.0Урон, который враги наносят игрокам
EnemyAccuracy2Меткость дальнобойных врагов по шкале 0-4
DetectionSpeedMultiplier1.0Как быстро вас замечают
DamageToAlliesMultiplier0.5Дружественный огонь. 0 убирает его полностью
DeathPenalties1Уровень штрафа по шкале 0-6
DurabilityLossOnDeathMultiplier0.1Износ снаряжения при смерти
HungerSpeedMultiplier1.0Скорость голода. Меньше - мягче для группы, играющей урывками
ThirstSpeedMultiplier1.0Скорость жажды
FatigueSpeedMultiplier1.0Усталость
PlayerXPGainMultiplier1.0Скорость прокачки
BonusPerkPoints0Бесплатные очки перков при создании персонажа
ItemStackSizeMultiplier1.0Размер стопок
ItemWeightMultiplier1.0Нагрузка от веса
BaseInventorySize12Начальное число слотов инвентаря
DayNightCycleState00 обычный, 1 всегда день, 2 всегда ночь
PowerSocketsOffAtNightTrueНочью питание комплекса отключается
FoodSpoilSpeedMultiplier1.0Порча еды
StructuralSupportLimit5Как далеко можно строить без опоры
AllowRecipeSharingTrueРецепт, выученный одним, узнают все
AllowCharacterResetTrueИгроки могут перераспределить навыки

LootRespawnEnabled=False - значение по умолчанию, и для группы из шести человек, которая проходит кампанию вместе и заканчивает её, оно правильное. Для постоянного публичного сервера оно неправильное: комплекс конечен, и когда его обчистили, новому игроку нечего находить. Включите этот параметр для всего, что будет работать дольше пары месяцев, и ждите, что экономика будет ощущаться совсем иначе.

Ещё одна настройка, о которой стоит подумать осознанно, - AllowRecipeSharing. Оставьте её включённой для группы с разным расписанием, иначе тот, кто может играть только по воскресеньям, будет каждый раз отставать. Отключите, если группа хочет, чтобы специализация что-то значила.

Изменения песочницы применяются при следующем запуске. Остановите сервер, отредактируйте, запустите; правка на работающем сервере рискует тем, что файл перепишут у вас под руками.

Админы и модерация#

К админским правам ведут два пути, и большинство серверов используют оба.

Первый - -AdminPassword= в строке запуска, который позволяет игроку получить права админа в игре по этому паролю. Это удобно, но это общий секрет, так что обращайтесь с ним соответственно: меняйте, когда кто-то уходит из группы, и не выкладывайте его в публичный Discord.

Второй - Admin.ini, создаваемый в AbioticFactor/Saved/SaveGames/Server/Admin.ini при первом запуске. В нём под заголовком секции по одному на строку указаны SteamID64:

AbioticFactor/Saved/SaveGames/Server/Admin.ini
[Moderators]Moderator=76561198012345678Moderator=76561198087654321

Откройте файл, который создал сервер, и следуйте заголовку, который он записал, а не предполагайте - эта часть игры менялась от сборки к сборке. Вам нужен 17-значный SteamID64, а не имя профиля; надёжнее всего прочитать его из лога сервера после того, как человек хотя бы раз зашёл.

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

Сохранения, резервные копии и начало заново#

Мир хранится в одной папке: AbioticFactor/Saved/SaveGames/Server/Worlds/Cascade/ или в той, что вы задали через -WorldSaveName. В ней лежат состояние комплекса, построенные объекты и персонаж каждого игрока. Сохраните эту папку, и всё остальное вы восстановите через SteamCMD за десять минут.

  • Останавливайте сервер чисто. Чистая остановка сбрасывает сохранение на диск. Убийство процесса или хост, исчезнувший без предупреждения, могут стоить вам всего, что произошло с последнего автосохранения.
  • Делайте копию перед каждым патчем. Обновления контента в игре, находящейся в активной разработке, иногда меняют формат сохранений, и копия, которой у вас нет, - именно та, что была нужна.
  • Храните копию не на сервере. Копия в другой папке на том же диске защищает от ошибки в файловом менеджере, но не от потери машины.
  • Два мира на одном сервере. Поскольку -WorldSaveName выбирает папку, вы можете держать второе сохранение для тестов и переключаться правкой одного аргумента. Это самая дешёвая тестовая среда, какую даёт любая игра, - более общее применение той же идеи описано в статье тестовая и рабочая среда на одном аккаунте.

Резервная копия, которую никто не восстанавливал, - это гипотеза. Иногда восстанавливайте одну в запасное имя мира и заходите в игру, чтобы убедиться, что ваш персонаж на месте; почему именно этот второй шаг - вся суть, объяснено в статье резервные копии, которые действительно восстанавливаются.

В RE:NODE кнопка Restart отправляет чистую остановку, слоты для backup входят в каждый тариф Abiotic Factor, восстановление выполняется одной кнопкой, а запись в Schedules может делать ночной backup и перезапуск в час, когда никто не играет. Если сервер достигает лимита памяти, контейнер останавливается и чисто перезапускается, а не уходит в swap, так что риск, под который стоит планировать, - остановка без сохранения, и это довод в пользу ночного backup, а не еженедельного.

Устранение неполадок#

Сервер запускается, но не появляется в списке. Проверьте оба порта UDP, затем добавьте сервер в избранное Steam по address:27015 и зайдите оттуда. Если получилось, с сервером всё в порядке, а публичный список просто тормозит. Убедитесь также, что вы не добавили -NOSTEAM.

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

Ничего из `SandboxSettings.ini` не действует. Либо отсутствует или написан с ошибкой заголовок [SandboxSettings], либо файл лежит не в той папке, либо аргумент -SandboxIniPath указывает в другое место. Посмотрите лог при запуске, в нём названы загруженные файлы.

Все появились в пустом новом мире. Изменился -WorldSaveName либо он не был задан, и значение по умолчанию отличается от ожидаемого. Старая папка по-прежнему лежит в Saved/SaveGames/Server/Worlds/. Остановите сервер, укажите в аргументе имя этой папки и запустите.

Сервер падает после обновления игры. Серверная утилита обновляется отдельно от клиента. Запустите обновление SteamCMD с validate и убедитесь, что сборка совпадает; несовпадающие версии отклоняются при подключении, а не роняют сервер, поэтому падение после патча - обычно несовместимое сохранение или необходимость переустановки без модов.

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

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

FAQ#

Сколько игроков вмещает сервер Abiotic Factor?

По умолчанию шесть. -MaxServerPlayers принимает большие числа, но плотность добычи, масштабирование врагов и экономика крафта рассчитаны на небольшую группу, так что для большего сервера настройки песочницы придётся подправить, чтобы это компенсировать.

Нужно ли владеть игрой, чтобы запустить сервер?

Нет. Выделенный сервер - это приложение 2857200, и оно устанавливается через login anonymous. Игра нужна, чтобы играть, а не чтобы хостить.

Могут ли игроки с консолей и с ПК играть на одном сервере?

Да. Кроссплей включён, пока вы не отключите его через -PlatformLimited=, который принимает PC, Playstation или Xbox и ограничивает сервер этой платформой.

Где находятся настройки песочницы на выделенном сервере?

В SandboxSettings.ini в AbioticFactor/Saved/Config/WindowsServer/, начиная с заголовка [SandboxSettings]. Экран песочницы в игре применяется только к локально запущенной игре.

Работает ли сервер на Linux?

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

Как начать новый мир, не удаляя старый?

Смените -WorldSaveName на новое значение. В Saved/SaveGames/Server/Worlds/ будет создана новая папка, а прежний мир останется на диске, готовый к тому, чтобы вернуться к нему.


Комментарии

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

0/2000