Выделенный сервер 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. Заход на другой сервер означает другого персонажа. Стоит сказать об этом группе до того, как кто-нибудь потратит вечер на тестовый сервер.
- Кроссплей включён по умолчанию и ограничивается флагом, а не включается им. Это противоположно большинству игр и сбивает с толку тех, кто считает, что его нужно включать.
Требования и потребление ресурсов#
Комплекс - это набор связанных уровней, а не одна открытая карта, и сервер держит загруженными те, где сейчас находятся игроки. Память растёт с числом игроков, с тем, сколько уровней группа открыла, и с числом построенных объектов.
| Игроки | RAM | vCPU | Примечания |
|---|---|---|---|
| 1-4, начало игры | 4 ГБ | 1 | Свежее сохранение, открыт один-два уровня |
| 6, зрелый мир | 6 ГБ | 1.5 | Лимит по умолчанию с настоящей базой |
| 8-12 | 8-10 ГБ | 2 | Сверх задуманного размера группы |
| 16-24 | 12 ГБ | 2.5-3 | Возможно, но не сбалансировано. Ждите странностей |
- CPU: сервер на Unreal, упирающийся в один главный поток. Тактовая частота важнее числа ядер. Нагрузка идёт от ИИ врагов и от симуляции построенных объектов, так что база, набитая машинами, обходится дороже пустого коридора.
- Диск: закладывайте 10-15 ГБ на установку и помните, что она растёт с каждым патчем контента. Само сохранение невелико, несколько десятков мегабайт.
- Сеть: лёгкая. Кооперативный сервер на шестерых не создаёт проблем с полосой; ощутима задержка между игроками и сервером.
Поднять -MaxServerPlayers выше шести параметр позволяет, а игра - нет. Масштабирование врагов, плотность добычи и экономика крафта рассчитаны на небольшую команду, и на практике двенадцать игроков означают мир, обчищенный до последнего за два вечера. Если нужна большая группа, увеличьте в настройках песочницы возрождение добычи и множители врагов, чтобы это компенсировать, а не надейтесь, что всё сложится само. Общий довод приведён в статье сколько игроков помещается на сервере.
Установка сервера через SteamCMD#
$ steamcmd +force_install_dir C:\abiotic\server +login anonymous \ +app_update 2857200 validate +quitИсполняемый файл окажется в AbioticFactor/Binaries/Win64/AbioticFactorServer-Win64-Shipping.exe. Запустите его один раз только с -log, дайте создать папки и остановите. Теперь у вас есть:
AbioticFactor/Saved/Config/WindowsServer/SandboxSettings.iniAbioticFactor/Saved/SaveGames/Server/Admin.iniAbioticFactor/Saved/SaveGames/Server/Worlds/Cascade/AbioticFactor/Saved/Logs/На хостинге с панелью ничего из этого не вводится руками: установка выполняется при создании сервера, аргументы - это поля на вкладке Startup, а файлы правятся в браузере или по SFTP. Если вы делаете всё сами, в статье SteamCMD простыми словами разобраны app id, проверка и скрипты обновления.
Параметры запуска - это и есть конфигурация#
Вот полная строка запуска, и для большинства серверов это единственное место, где вы что-либо когда-либо зададите:
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/, поэтому его смена начинает совершенно новый мир и оставляет старый нетронутым на диске. Это безопасный способ проверить патч или изменение песочницы: укажите серверу новое имя сохранения, поломайте всё что угодно, затем верните прежнее. Так же люди случайно «теряют» мир - ничего не удалялось, просто изменился аргумент.
Порты, кроссплей и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
7777 | UDP | Игровой трафик |
27015 | UDP | Запросы Steam, браузер серверов |
Оба порта работают по UDP. Правило файрвола, открывающее только TCP, даёт сервер, который работает, пишет логи и никого не пускает, и это самая частая жалоба «не работает» для любой игры на Steam. Почему порт запросов отдельный и что ломается, когда доступен только один из пары, объяснено в статье порты игровых серверов.
Игроки попадают на сервер тремя путями:
- Список серверов в игре, который работает через порт запросов. Сервер с паролем всё равно в нём виден; игроков просят ввести пароль.
- Избранное Steam. В клиенте Steam откройте «Вид», затем «Игровые серверы», затем «Избранное» и добавьте
203.0.113.10:27015- это порт запросов, а не игровой порт. Тогда сервер надёжно появляется в списке в игре, даже когда публичный список тормозит. - Имя хоста вместо адреса, если вы предпочитаете раздавать что-то запоминающееся вместо IP. Подробности про запись A есть в статье как привязать домен к игровому серверу.
Кроссплей включён, пока вы его не отключите. -PlatformLimited=PC ограничивает сервер игроками Steam, а остальные значения делают то же для консольных платформ. Причина ограничивать - единообразие, а не производительность: серверы с ограничением платформы избегают окна несовпадения версий, которое появляется, когда патч доходит до одного магазина раньше другого.
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Настройки, которые меняют характер игры, а не ощущения на пять процентов:
| Ключ | По умолчанию | Что делает |
|---|---|---|
GameDifficulty | 1 | 1 обычная, 2 сложная, 3 апокалиптическая |
HardcoreMode | False | Одна жизнь. Принудительно включает самую высокую сложность |
AllowIronMode | True | Ironman, имеет смысл только при включённом hardcore |
LootRespawnEnabled | False | Главная настройка для долгоживущих серверов, см. ниже |
EnemySpawnRate | 1.0 | Как часто враги возвращаются |
EnemyHealthMultiplier | 1.0 | Здоровье врагов |
EnemyPlayerDamageMultiplier | 1.0 | Урон, который враги наносят игрокам |
EnemyAccuracy | 2 | Меткость дальнобойных врагов по шкале 0-4 |
DetectionSpeedMultiplier | 1.0 | Как быстро вас замечают |
DamageToAlliesMultiplier | 0.5 | Дружественный огонь. 0 убирает его полностью |
DeathPenalties | 1 | Уровень штрафа по шкале 0-6 |
DurabilityLossOnDeathMultiplier | 0.1 | Износ снаряжения при смерти |
HungerSpeedMultiplier | 1.0 | Скорость голода. Меньше - мягче для группы, играющей урывками |
ThirstSpeedMultiplier | 1.0 | Скорость жажды |
FatigueSpeedMultiplier | 1.0 | Усталость |
PlayerXPGainMultiplier | 1.0 | Скорость прокачки |
BonusPerkPoints | 0 | Бесплатные очки перков при создании персонажа |
ItemStackSizeMultiplier | 1.0 | Размер стопок |
ItemWeightMultiplier | 1.0 | Нагрузка от веса |
BaseInventorySize | 12 | Начальное число слотов инвентаря |
DayNightCycleState | 0 | 0 обычный, 1 всегда день, 2 всегда ночь |
PowerSocketsOffAtNight | True | Ночью питание комплекса отключается |
FoodSpoilSpeedMultiplier | 1.0 | Порча еды |
StructuralSupportLimit | 5 | Как далеко можно строить без опоры |
AllowRecipeSharing | True | Рецепт, выученный одним, узнают все |
AllowCharacterReset | True | Игроки могут перераспределить навыки |
LootRespawnEnabled=False - значение по умолчанию, и для группы из шести человек, которая проходит кампанию вместе и заканчивает её, оно правильное. Для постоянного публичного сервера оно неправильное: комплекс конечен, и когда его обчистили, новому игроку нечего находить. Включите этот параметр для всего, что будет работать дольше пары месяцев, и ждите, что экономика будет ощущаться совсем иначе.
Ещё одна настройка, о которой стоит подумать осознанно, - AllowRecipeSharing. Оставьте её включённой для группы с разным расписанием, иначе тот, кто может играть только по воскресеньям, будет каждый раз отставать. Отключите, если группа хочет, чтобы специализация что-то значила.
Изменения песочницы применяются при следующем запуске. Остановите сервер, отредактируйте, запустите; правка на работающем сервере рискует тем, что файл перепишут у вас под руками.
Админы и модерация#
К админским правам ведут два пути, и большинство серверов используют оба.
Первый - -AdminPassword= в строке запуска, который позволяет игроку получить права админа в игре по этому паролю. Это удобно, но это общий секрет, так что обращайтесь с ним соответственно: меняйте, когда кто-то уходит из группы, и не выкладывайте его в публичный Discord.
Второй - Admin.ini, создаваемый в AbioticFactor/Saved/SaveGames/Server/Admin.ini при первом запуске. В нём под заголовком секции по одному на строку указаны SteamID64:
[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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.