RE:NODE

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

Выделенный сервер Icarus: настройка и проспекты

Как запустить выделенный сервер Icarus: установка, все ключи ServerSettings.ini, автовыключение через 5 минут, создание и продолжение проспектов, порты 17777 и 27015, админ-команды.

0 прочтений

Выделенный сервер Icarus - это бесплатная программа для Windows (Steam app 2089300, скачивается анонимно, IcarusServer.exe), которая настраивается через Icarus/Saved/Config/WindowsServer/ServerSettings.ini и несколько аргументов запуска. Он слушает UDP 17777 для игры и UDP 27015 для Steam query, вмещает до восьми игроков и запускает один проспект за раз - миссию или карту открытого мира, - который создаёт, загружает или продолжает в зависимости от настроек. На двух значениях по умолчанию спотыкаются почти все: сервер сам выключается, если в течение 300 секунд после запуска никто не зашёл, и ещё раз - через 300 секунд после того, как ушёл последний игрок. На хостинге, где сервер должен работать постоянно, первым делом задайте ShutdownIfNotJoinedFor и ShutdownIfEmptyFor отрицательное значение.

Как устроены серверы и проспекты Icarus#

Icarus построен вокруг проспектов. Проспект - это одна высадка на планету: карта, сложность, набор миссий и файл сохранения с состоянием мира. Они бывают двух видов:

  • Проспекты-миссии: высадка с ограничением по времени и целями. Игроки выполняют их и возвращаются на орбиту; проспект заканчивается.
  • Проспекты Open World и Outpost: постоянные карты без таймера миссии, рассчитанные на долгоживущие базы. Большинство выделенных серверов запускают именно Open World.

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

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

Миссии или открытый мир на выделенном сервере

Оба вида проспектов работают на выделенном сервере, но подходят ему по-разному.

Проспекты-миссии по задумке короткие. Группа высаживается, за несколько сессий выполняет контракт и эвакуируется. На выделенном сервере это работает, но сервер проводит много времени в лобби между миссиями, и кто-то должен выбирать и запускать следующую. Здесь и важен AllowNonAdminsToLaunchProspects: в группе, где все друг другу доверяют, возможность для любого запустить следующую миссию избавляет от ожидания админа; в публичной группе она позволяет незнакомцу оборвать миссию на середине.

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

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

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

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

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

ПроспектRAMCPUПримечания
Миссия, 1-4 игрока6-8 GB2-3 ядраКороткие сессии, маленькие базы
Open World, 2-4 игрока8-10 GB3 ядраБазы растут неделями
Open World, 5-8 игроков10-16 GB3-4 быстрых ядраМного построек, больше ИИ
  • CPU: игровой поток и ИИ. Для плавного боя и строительства важна тактовая частота.
  • Диск: установка большая - закладывайте 30 GB или больше, - а сохранения проспектов растут вместе с базами. Оставьте место для backup.
  • Игроки: потолок - 8, так что размер сервера определяется тем, насколько разрастается мир, а не тем, сколько людей заходит.

Это типичные цифры с серверов сообщества, а не официальные минимумы. Прежде чем решать, понаблюдайте за памятью через неделю на проспекте открытого мира; в статье CPU или RAM для игровых серверов объясняется, как понять, что из них вас ограничивает.

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

Сервер работает только под Windows:

bash
$ steamcmd +force_install_dir C:\icarus-server +login anonymous +app_update 2089300 validate +quit$ cd C:\icarus-server$ IcarusServer.exe -log -SteamServerName="Arctic Prospectors" -PORT=17777 -QueryPort=27015

На практике -log не опционален: без него консоль ничего не показывает, пока сервер работает. В Linux сервер запускается через Wine - так его запускают многие хостинги и контейнерные образы; это работает, но не поддерживается, и обновления иногда это ломают. Анонимная установка и обновление описаны в статье Что такое SteamCMD.

Первый запуск создаёт ServerSettings.ini. Если вы запускаете сервер сами, по умолчанию он лежит в %LOCALAPPDATA%\Icarus\Saved\Config\WindowsServer\; с -UserDir можно перенести всю папку сохранённых данных в другое место, что упрощает backup и переезды. Остановите сервер, отредактируйте файл, запустите снова.

Аргументы запуска

АргументНазначение
-SteamServerName=Имя в браузере серверов (до 64 символов)
-PORT=Игровой порт, по умолчанию 17777
-QueryPort=Порт Steam query, по умолчанию 27015
-MULTIHOME=Привязка к одному конкретному IP-адресу
-UserDir=Своё расположение сохранённых данных
-logПоказывать лог в консоли
-CreateProspect=Создать проспект при запуске (формат ниже)
-LoadProspect=Загрузить проспект с указанным именем при запуске
-ResumeProspectПродолжить последний проспект при запуске

Для имени используйте -SteamServerName, а не SessionName в ini. В официальных заметках сказано, что настройка в ini для этого сейчас не работает.

ServerSettings.ini, ключ за ключом#

Все настройки находятся в одной секции:

Icarus/Saved/Config/WindowsServer/ServerSettings.ini
[/Script/Icarus.DedicatedServerSettings]SessionName=JoinPassword=long-join-passwordMaxPlayers=8AdminPassword=a-different-long-passwordShutdownIfNotJoinedFor=-1.000000ShutdownIfEmptyFor=-1.000000AllowNonAdminsToLaunchProspects=FalseAllowNonAdminsToDeleteProspects=FalseLoadProspect=CreateProspect=ResumeProspect=TrueLastProspectName=
КлючПо умолчаниюЧто делает
JoinPasswordпустоПароль на вход; пусто - сервер открыт
MaxPlayers-1-8
AdminPasswordпустоПароль для /AdminLogin; пусто - войти может кто угодно
ShutdownIfNotJoinedFor300Секунды до выключения, если никто не зашёл; ниже 0 - никогда
ShutdownIfEmptyFor300Секунды после ухода последнего игрока; ниже 0 - никогда
AllowNonAdminsToLaunchProspectsTrueМожет ли любой игрок запустить проспект из лобби
AllowNonAdminsToDeleteProspectsFalseМожет ли любой игрок удалять проспекты
ResumeProspectTrueПродолжать последний проспект при запуске
LoadProspectпустоЗагрузить указанный проспект при запуске
CreateProspectпустоСоздать проспект при запуске
LastProspectNameавтоЗаписывается сервером; проспект, который будет продолжен

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

AllowNonAdminsToLaunchProspects по умолчанию True, а на публичном сервере это значит, что любой посетитель может завершить ваш проспект открытого мира и запустить другой. Для всего, кроме приватной группы, где все друг другу доверяют, ставьте False.

Создание, загрузка и продолжение проспектов#

Что сервер запустит при старте, решают три настройки: CreateProspect создаёт новый проспект, LoadProspect загружает проспект по имени, а ResumeProspect подхватывает последний проспект, который запускал сервер. Задавайте только одну из них за раз, и поведение будет предсказуемым.

CreateProspect принимает четыре значения через пробел:

code
CreateProspect=<ProspectType> <Difficulty 1-4> <Hardcore True/False> <SaveName>

Например, из официальной документации:

ini
CreateProspect=Tier1_Forest_Recon_0 3 false TestProspect01

Четыре значения по порядку:

  • ProspectType - внутреннее имя, а не отображаемое. Список ведётся на официальной вики по выделенному серверу; у карт открытого мира имена вроде OpenWorld_Styx и Outpost006_Olympus.
  • Difficulty - от 1 (лёгкая) до 4 (экстремальная).
  • Hardcore true включает для этого проспекта правила hardcore, где смерть стоит гораздо дороже обычного.
  • SaveName - имя файла, под которым сохраняется проспект, и имя, которое вы потом используете с LoadProspect.

Обычный порядок для долгоживущего сервера с открытым миром:

  1. Задайте CreateProspect с картой открытого мира, сложностью и именем сохранения. Запустите сервер один раз.
  2. Остановите его, очистите CreateProspect и оставьте ResumeProspect=True.
  3. С этого момента каждый запуск продолжает тот же проспект.

Оставить CreateProspect заданным после первого запуска - частая ошибка: в зависимости от версии сервер либо пересоздаёт проспект, либо жалуется, что он уже существует. Очистите его, когда проспект создан.

Сохранения проспектов - это JSON-файлы в папке сервера Saved/PlayerData/DedicatedServer/Prospects. Чтобы перенести на сервер проспект, в который вы играли локально, при остановленном сервере скопируйте его файл из своей локальной папки Prospects в эту и загрузите по имени.

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

ПортПротоколНазначение
17777UDPИгровой трафик
27015UDPSteam query - браузер серверов

Оба должны быть открыты, и оба - UDP. Если хостинг выдаёт другие номера, передайте их через -PORT и -QueryPort. В статье Порты игровых серверов объясняется, почему сервер может отображаться в браузере, но отказывать в подключении, когда доступен только один из портов.

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

Админ-команды#

Доступ админа - это пароль. В чате игрок набирает /AdminLogin и значение AdminPassword, и сервер даёт ему права админа на эту сессию. Дальше доступны команды:

КомандаДействие
/AdminLogin <password>Стать админом на эту сессию
/HelpСписок доступных админ-команд
/KickPlayer <name or SteamID> [reason]Выкидывает игрока из проспекта
/BanPlayer <name or SteamID> [reason]Банит игрока на сервере
/UnbanPlayer <name or SteamID>Снимает бан
/AdminSay <message>Рассылает сообщение всем
/ReturnToLobbyЗавершает сессию и возвращает к выбору проспекта
/ReturnToLobbyWhenEmptyВозвращает в лобби, когда все ушли

В лобби та же консоль принимает LoadProspect, CreateProspect и ResumeProspect с описанными выше аргументами, так что админ может переключать проспекты без правки файлов.

Осторожно используйте /ReturnToLobby на сервере с открытым миром: команда завершает идущую сессию для всех. Сначала предупредите через /AdminSay. И поскольку права админа - это один общий пароль, меняйте его каждый раз, когда группу покидает кто-то, кто его знает, - как обращаться с командой на небольших серверах, описано в статье Правила сервера, модерация и команда.

Сохранения, backup и обновления#

Файл проспекта - это и есть мир. Всё, что размещено, построено и сложено в этом проспекте, лежит в одном JSON-файле, что делает backup простым, а повреждение - тотальным: если файл повреждён, повреждён весь проспект.

  • Корректно останавливайте сервер, прежде чем копировать проспект. При убитом процессе можно потерять всё с последнего сохранения.
  • Делайте backup перед каждым обновлением. Icarus часто патчится, и крупные обновления меняли содержимое проспектов.
  • Храните копии вне машины. Копия рядом с оригиналом не защищает ни от чего существенного. В статье Backup, которые действительно восстанавливаются объясняется, почему настоящая проверка - время от времени восстанавливать одну из них.

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

Как сохранить долгоживущий проспект здоровым

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

  • Следите за размером сохранения. Файл проспекта, который быстро растёт, обычно означает, что кто-то строит с размахом, который сервер почувствует, - очень большие базы, массовые хранилища или фермы размещаемых объектов. Само по себе это не проблема, но объясняет медленную загрузку после перезапуска.
  • Перезапускайте по расписанию. На серверах на Unreal Engine, работающих сутками, память имеет свойство потихоньку расти. Перезапуск в тихий час после корректного сохранения её сбрасывает.
  • Убирайте то, чем никто не пользуется. Брошенные аванпосты и недостроенные базы ушедших игроков всё равно стоят серверу ресурсов. Договоритесь всей группой, когда их можно разбирать.
  • Сохраняйтесь перед рискованными событиями. Бои с боссами, сильные бури и большие стройки - моменты, когда сбой обходится дороже всего. Ручной backup перед ними - дешёвая страховка.

Ничто из этого не требует настроек. Это рутина, которая сохраняет сервер приятным после того, как новизна нового мира прошла.

На RE:NODE слоты backup на каждом игровом тарифе хранятся вне машины, могут быть заблокированы от ротации и восстанавливаются одной кнопкой, а вкладка Schedules умеет делать backup перед перезапуском. Сервер Icarus работает только под Windows и в каталог не входит, так что воспринимайте это как описание панели, а не тарифа для Icarus.

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

Сервер сам останавливается через пять минут. Таймеры выключения. Задайте ShutdownIfNotJoinedFor и ShutdownIfEmptyFor значение -1.

Сервер показывает не то имя. SessionName в ini не учитывается. Используйте -SteamServerName в командной строке.

Посетитель завершил наш проспект открытого мира. AllowNonAdminsToLaunchProspects всё ещё True. Поставьте False и при необходимости восстановите проспект из backup.

Вместо нашего проспекта появился новый. CreateProspect всё ещё был задан, или LoadProspect указывал на несуществующий файл. Очистите CreateProspect и проверьте имя сохранения.

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

FAQ#

Сколько игроков может зайти на выделенный сервер Icarus?

Восемь. MaxPlayers принимает 1-8, и игра сбалансирована под группы такого размера.

Может ли выделенный сервер постоянно держать проспект открытого мира?

Да. Создайте проспект открытого мира один раз через CreateProspect, затем оставьте ResumeProspect=True и отключите таймеры выключения. Сервер будет продолжать его при каждом запуске.

Почему мой сервер Icarus постоянно выключается?

Таймеры по умолчанию останавливают сервер через 300 секунд, если никто не зашёл, и через 300 секунд после ухода последнего игрока. Для постоянно работающего сервера задайте обоим отрицательное значение.

Можно ли перенести проспект из своей игры на сервер?

Да. При остановленном сервере скопируйте JSON-файл проспекта из своей локальной папки Prospects в папку сервера Saved/PlayerData/DedicatedServer/Prospects, затем загрузите его по имени.

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

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


Комментарии

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

0/2000