MAATRIX GAMES / Блог / Icarus — продвинутая настройка через WorldSettings

Icarus — продвинутая настройка через WorldSettings

MAATRIX GAMES

Базового запуска IcarusServer.exe хватает, чтобы поднять сервер и зайти в лобби, но дальше начинаются вопросы, на которые дефолтный конфиг не отвечает: почему после рестарта сервер каждый раз спрашивает, какую миссию грузить, можно ли доверить игрокам запуск собственных прогонов без прав админа, и куда делся прогресс персонажа после провала экспедиции. У Icarus нет единого WorldSettings.ini в духе ARK — вместо этого связка из ServerSettings.ini и параметров CreateProspect, и разобраться в них стоит один раз, чтобы не переизобретать конфиг при каждом новом сезоне сервера.

Как устроены "мировые настройки" в Icarus: Prospect против Open World

Первое, что стоит понять до правки конфигов: у Icarus нет одного персистентного мира, как в ARK или Rust. Сервер работает через Prospect — отдельные сессии-вылазки со своим таймером, набором целей и картой, которые запускаются, проходятся и завершаются извлечением (или провалом). Есть и постоянная карта Styx (OpenWorld_Styx) — открытый мир без жёсткого таймера, ближе по духу к привычному "постоянному серверу", но технически тоже отдельный prospect-файл.

Поэтому то, что в других играх называется world settings — сложность, погода, доступность ресурсов, — в Icarus задаётся не одним статичным файлом, а комбинацией:

  • ServerSettings.ini — постоянные параметры самого сервера (имя, пароли, лимиты, поведение при простое);
  • CreateProspect — параметры конкретной миссии/мира, которые фиксируются в момент её создания и намертво привязываются к save-файлу этого prospect.

Это ключевая особенность серверной модели игры: сменить сложность или тип мира на лету нельзя — только создать новый prospect с нужными параметрами. Держите это в голове, читая разделы ниже.

ServerSettings.ini: полный разбор параметров

Файл лежит по пути Icarus\Saved\Config\WindowsServer\ServerSettings.ini (при кастомной директории через -UserDir путь считается относительно неё, секция всё равно WindowsServer, даже на Linux-хостах через Wine). Секция одна — [/Script/Icarus.DedicatedServerSettings].

ПараметрНазначение
SessionNameИмя сервера в браузере. На многих сборках не применяется — надёжнее флаг -SteamServerName
JoinPasswordПароль на вход, пусто — сервер открыт для всех
MaxPlayersЛимит игроков, 1-8 — официальный потолок кооператива, выше не поставить
AdminPasswordПароль RCON/админ-доступа. Пусто — вход без пароля, для публичного сервера не годится
ShutdownIfNotJoinedForСекунд ожидания первого игрока, после чего сервер завершится сам (по умолчанию 300)
ShutdownIfEmptyForСекунд простоя без игроков перед автовыключением (по умолчанию 300)
AllowNonAdminsToLaunchProspectsРазрешает игрокам без прав админа запускать prospect-миссии (по умолчанию True)
AllowNonAdminsToDeleteProspectsРазрешает игрокам без прав админа удалять prospect-сейвы (по умолчанию False)
LoadProspectИмя prospect-файла, который загрузится при старте
CreateProspectСтрока создания нового prospect при старте — разбор ниже
ResumeProspectАвтопродолжение последней активной сессии при рестарте (по умолчанию True)
LastProspectNameИмя последнего активного prospect, сервер обновляет его сам

Для управления доступом администраторов на серверах с несколькими модераторами эти два флага (AllowNonAdminsTo...) стоит держать в связке с ролями — подробнее в статье про права доступа и роли администраторов.

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

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

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

Параметры командной строки запуска

Часть настроек задаётся не в ini, а флагами при старте бинарника — это удобно вынести в ExecStart systemd-юнита или batch/wine-скрипт запуска.

ФлагНазначение
-SteamServerName=Имя сервера в списке (лимит 64 символа), надёжнее SessionName из ini
-PORT=Игровой порт (по умолчанию 17777)
-QueryPort=Порт Steam-запросов для списка серверов
-MULTIHOME=IP для машин с несколькими адресами
-UserDir=Кастомная директория для Saved-папки
-saveddirsuffix=Суффикс к Saved — для нескольких инстансов на одной машине
-LOG= / -ABSLOG=Относительный/абсолютный путь к лог-файлу
-ResumeProspectАналог ResumeProspect=True из ini, но как флаг запуска
-LoadProspect=[Имя]Загрузить конкретный prospect по имени
-CreateProspect="[Тип] [Сложность] [Хардкор] [ИмяСейва]"Создать новый prospect при старте

Пример строки запуска через Wine на Linux-хосте (почему именно Wine — см. раздел про особенности серверной модели ниже):

wine IcarusServer.exe -SteamServerName="MAATRIX Icarus" \
  -PORT=17777 -QueryPort=27015 \
  -log -ABSLOG="/home/icarus/server/logs/server.log" \
  -ResumeProspect

Если сервер уже под systemd, вывод удобнее не дублировать через -ABSLOG, а читать через journalctl -u icarus -f — общие приёмы диагностики Icarus разобраны в статье про краш при загрузке мира.

CreateProspect и LoadProspect: профили миссий и сложность

Формат строки создания prospect фиксированный, из четырёх позиций через пробел:

CreateProspect=[Тип миссии] [Сложность 1-4] [Хардкор true/false] [Имя сейва]

Пример из строки запуска:

CreateProspect=Tier1_Forest_Recon_0 3 false TestProspect01

Разбор параметров:

  • Тип миссии — внутренний идентификатор prospect. Для постоянного открытого мира это OpenWorld_Styx. Для аутпостов (сюжетных баз с расширенным таймером) — Outpost002_Forest (ARCWOOD), Outpost003_Arctic (ICEHOLM), Outpost005_Forest (HOLDFAST), Outpost006_Olympus. Обычные миссии называются по схеме TierN_Биом_Тип_Индекс, например Tier1_Forest_Recon_0 — разведка первого тира в лесном биоме. Список идентификаторов обновляется с патчами, поэтому перед запуском лучше свериться с актуальным списком prospect-имён в репозитории RocketWerkz: непроверенный идентификатор сервер просто не найдёт.
  • Сложность — число от 1 до 4, где 1 примерно соответствует лёгкому режиму, 4 — максимально жёсткому. Точный баланс между тирами меняется патчами, так что это относительная шкала, а не фиксированные цифры урона или спавна.
  • Хардкор — true включает перманентную смерть персонажа на этом prospect (при гибели теряется весь локальный прогресс сессии), false — обычный режим с респауном.
  • Имя сейва — как файл будет называться на диске; используйте понятные имена, если держите несколько параллельных миров (например, разные сезоны сообщества).

Тот же синтаксис работает и как чат-команда прямо в игре (для админов), без правки конфига и перезапуска сервера: LoadProspect [Имя], CreateProspect [Тип] [Сложность] [Хардкор] [ИмяСейва], ResumeProspect. В лобби префикс слэша не нужен, во время активной сессии — через /.

Важная оговорка: параметры сложности и хардкора фиксируются в момент создания prospect и намертво зашиваются в его save-файл. Перезапуск сервера с другими значениями CreateProspect не поменяет уже существующий мир — придётся создавать новый с другим именем сейва.

Персистентность прогресса между сессиями

Здесь Icarus устроен иначе, чем большинство survival-серверов, и это стоит явно объяснить игрокам заранее:

  • Прогресс персонажа (уровень, таланты, разблокированные технологии) привязан к профилю игрока в целом, а не к конкретному prospect. Он копится через успешные экспедиции и переносится между разными мирами и миссиями — провал или гибель на одном prospect не откатывает общий прогресс персонажа, если это не hardcore-сессия с локальной permadeath.
  • Состояние конкретного мира (постройки, инвентарь на базе, прогресс задач) хранится только в файле этого prospect и не переносится на другие. Экспедиция на аутпост не появится в открытом мире Styx и наоборот — это разные сохранения.
  • ResumeProspect=True + LastProspectName — при рестарте (по питанию, обновлению или краху) сервер сам поднимет последнюю активную сессию, а не откатится в лобби выбора миссии. Для сервера с постоянным составом это почти всегда правильный дефолт — иначе после каждого рестарта нужно вручную поднимать прошлый мир.
  • Чтобы временно переключиться на другую миссию, не теряя основной прогресс, используйте LoadProspect с именем нужного сейва, а не пересоздавайте CreateProspect поверх существующего имени — так рискуете перезаписать рабочий мир.

Save-файлы уязвимы к тем же рискам, что и в любой другой игре — настройте регулярное копирование папки Saved целиком, не полагаясь только на встроенную персистентность. Как организовать копирование по расписанию — в статье про автобэкапы игрового сервера, общие принципы работы с сейвами — в статье про работу с сейв-файлами игрового сервера.

Миграция сейвов и управление несколькими prospect-файлами

Prospect-сейвы — отдельные JSON-файлы. С ними можно работать как с обычными файлами на диске, с одной строгой оговоркой: не переименовывайте файл и не редактируйте содержимое вручную — это необратимо ломает сохранение.

На дедике они лежат в:

Icarus\Saved\PlayerData\DedicatedServer\Prospects\<ИмяProspect>.json

Перенести одиночный (singleplayer) прогресс на выделенный сервер можно, скопировав файл из локального клиента:

%UserProfile%\AppData\Local\Icarus\Saved\PlayerData\<SteamID>\Prospects\<Имя>.json

прямо в серверную папку PlayerData\DedicatedServer\Prospects\, создав недостающие подпапки вручную, если сервер их ещё не создавал. Перед переносом обязательно сделайте резервную копию исходника — если что-то пойдёт не так при копировании, откатиться будет не на что.

Если на сервере одновременно живёт несколько prospect-сейвов (открытый мир для основной команды плюс пара аутпост-миссий для разных групп), заведите понятную схему имён и не давайте AllowNonAdminsToDeleteProspects=True рядовым игрокам — единичная случайность сотрёт часовую работу группы. Разводить несколько миров на одной машине физически удобно через -saveddirsuffix для отдельных инстансов, аналогично другим играм — см. статью про несколько игровых серверов на одной машине.

Особенности серверной модели: Windows-бинарник, Wine и лимиты

Несколько нюансов, которые стоит знать заранее, а не выяснять на живом сообществе:

  • IcarusServer.exe официально существует только под Windows. Нативной Linux-сборки дедика у RocketWerkz нет, поэтому на Linux-хостинге сервер почти всегда запускают через Wine (иногда Proton headless). Это работает стабильно на актуальных сборках, но добавляет слой абстракции: обновления через SteamCMD стоит перепроверять на конкретной версии Wine, если после патча игры сервер отказывается стартовать.
  • Лимит в 8 игроков — жёсткий потолок кооператива, не просто дефолт в конфиге. Нужно больше — разводите сообщество по нескольким параллельным prospect-мирам, а не ищите скрытый параметр.
  • RCON/админ-доступ работает через AdminPassword из ServerSettings.ini — общие принципы подключения и базовые команды разобраны в статье про RCON-подключение и основные команды.
  • Порты — пробросьте и игровой -PORT, и -QueryPort, иначе игроки смогут зайти по прямому IP, но не увидят сервер в браузере.

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

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

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

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

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

Нет, она фиксируется в момент CreateProspect и хранится в save-файле. Только новый prospect с другим именем сейва.

Что будет с прогрессом персонажа, если prospect провалится (не хардкор)?

Локальный прогресс сессии теряется, но уровень, таланты и разблокировки персонажа сохраняются и переносятся в следующие вылазки.

ResumeProspect и LoadProspect можно использовать одновременно?

Лучше держать в конфиге только нужный вариант: ResumeProspect=True сам поднимает последний prospect, LoadProspect явно указывает файл — при расхождении не всегда очевидно, что победит.

SessionName в ServerSettings.ini не подхватывается — это баг?

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

Обязательно ли гонять сервер через Wine на Linux?

Альтернативы нет — официальной Linux-сборки дедика не существует.