Выделенный сервер 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 и большую карту, поэтому сервер не лёгкий. Память растёт с размером баз и числом размещённых объектов в проспекте, а карты открытого мира тяжелее коротких миссий.
| Проспект | RAM | CPU | Примечания |
|---|---|---|---|
| Миссия, 1-4 игрока | 6-8 GB | 2-3 ядра | Короткие сессии, маленькие базы |
| Open World, 2-4 игрока | 8-10 GB | 3 ядра | Базы растут неделями |
| Open World, 5-8 игроков | 10-16 GB | 3-4 быстрых ядра | Много построек, больше ИИ |
- CPU: игровой поток и ИИ. Для плавного боя и строительства важна тактовая частота.
- Диск: установка большая - закладывайте 30 GB или больше, - а сохранения проспектов растут вместе с базами. Оставьте место для backup.
- Игроки: потолок - 8, так что размер сервера определяется тем, насколько разрастается мир, а не тем, сколько людей заходит.
Это типичные цифры с серверов сообщества, а не официальные минимумы. Прежде чем решать, понаблюдайте за памятью через неделю на проспекте открытого мира; в статье CPU или RAM для игровых серверов объясняется, как понять, что из них вас ограничивает.
Установка и первый запуск#
Сервер работает только под Windows:
$ 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, ключ за ключом#
Все настройки находятся в одной секции:
[/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; пусто - войти может кто угодно |
ShutdownIfNotJoinedFor | 300 | Секунды до выключения, если никто не зашёл; ниже 0 - никогда |
ShutdownIfEmptyFor | 300 | Секунды после ухода последнего игрока; ниже 0 - никогда |
AllowNonAdminsToLaunchProspects | True | Может ли любой игрок запустить проспект из лобби |
AllowNonAdminsToDeleteProspects | False | Может ли любой игрок удалять проспекты |
ResumeProspect | True | Продолжать последний проспект при запуске |
LoadProspect | пусто | Загрузить указанный проспект при запуске |
CreateProspect | пусто | Создать проспект при запуске |
LastProspectName | авто | Записывается сервером; проспект, который будет продолжен |
Таймеры выключения заслуживают ещё одного предложения. Со значениями по умолчанию сервер на панели выглядит сломанным: он запускается, за пять минут никто не заходит, и он останавливается. Если хостинг перезапускает его автоматически, получается цикл; если нет, сервер просто стоит офлайн. -1 в обоих превращает его в обычный постоянно работающий сервер.
AllowNonAdminsToLaunchProspects по умолчанию True, а на публичном сервере это значит, что любой посетитель может завершить ваш проспект открытого мира и запустить другой. Для всего, кроме приватной группы, где все друг другу доверяют, ставьте False.
Создание, загрузка и продолжение проспектов#
Что сервер запустит при старте, решают три настройки: CreateProspect создаёт новый проспект, LoadProspect загружает проспект по имени, а ResumeProspect подхватывает последний проспект, который запускал сервер. Задавайте только одну из них за раз, и поведение будет предсказуемым.
CreateProspect принимает четыре значения через пробел:
CreateProspect=<ProspectType> <Difficulty 1-4> <Hardcore True/False> <SaveName>Например, из официальной документации:
CreateProspect=Tier1_Forest_Recon_0 3 false TestProspect01Четыре значения по порядку:
ProspectType- внутреннее имя, а не отображаемое. Список ведётся на официальной вики по выделенному серверу; у карт открытого мира имена вродеOpenWorld_StyxиOutpost006_Olympus.Difficulty- от 1 (лёгкая) до 4 (экстремальная).Hardcoretrue включает для этого проспекта правила hardcore, где смерть стоит гораздо дороже обычного.SaveName- имя файла, под которым сохраняется проспект, и имя, которое вы потом используете сLoadProspect.
Обычный порядок для долгоживущего сервера с открытым миром:
- Задайте
CreateProspectс картой открытого мира, сложностью и именем сохранения. Запустите сервер один раз. - Остановите его, очистите
CreateProspectи оставьтеResumeProspect=True. - С этого момента каждый запуск продолжает тот же проспект.
Оставить CreateProspect заданным после первого запуска - частая ошибка: в зависимости от версии сервер либо пересоздаёт проспект, либо жалуется, что он уже существует. Очистите его, когда проспект создан.
Сохранения проспектов - это JSON-файлы в папке сервера Saved/PlayerData/DedicatedServer/Prospects. Чтобы перенести на сервер проспект, в который вы играли локально, при остановленном сервере скопируйте его файл из своей локальной папки Prospects в эту и загрузите по имени.
Порты и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
17777 | UDP | Игровой трафик |
27015 | UDP | Steam 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.