RE:NODE

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

Сервер Insurgency: Sandstorm: настройка, конфиги и моды

Выделенный сервер Insurgency: Sandstorm: строка запуска и сценарии, Game.ini, ротация карт, мутаторы, админы, RCON, порты, токены статистики и mod.io.

0 прочтений

Выделенный сервер Insurgency: Sandstorm - это бесплатная загрузка через SteamCMD (app id 581330) с нативной сборкой под Linux. Он слушает два UDP-порта и хочет от 2 до 3 ГБ памяти и одно быстрое ядро. Почти всё, что заставляет его вести себя так, как вам нужно, лежит в двух местах: в длинном travel-URL, дописанном к названию карты в командной строке, и в файле Game.ini, которого не существует, пока вы его не создадите. Второй пункт ловит почти всех: на свежей установке нет вообще никакого каталога конфигурации, поэтому первый час часто уходит на правку файлов, которые сервер никогда не читал.

Что даёт выделенный сервер#

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

Два семейства режимов стоит разделять, потому что настраиваются и рассчитываются они по-разному:

  • Co-op: Checkpoint, Outpost, Survival и их hardcore-варианты. Люди против ботов. Восемь живых игроков - жёсткий потолок: если указать больше, число игнорируется. Стоимость содержания определяет количество ботов, а не игроков.
  • PvP: Push, Firefight, Skirmish, Frontline, Domination, Team Deathmatch, Ambush и Defusal. Двадцать восемь игроков - число из всех официальных примеров.

Из коробки вы также получаете настоящую реализацию RCON по протоколу Source, файл администраторов со Steam ID и админ-меню в игре, файл банов, который сервер ведёт сам, ротацию карт, сообщение дня и два десятка с лишним поставляемых мутаторов, которые меняют правила без всякого стороннего кода. Моды поверх этого приходят через mod.io, а то, как это работает, изменилось так недавно, что большая часть написанного об этом неверна.

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

New World Interactive не публикует официальных цифр, так что эти получены измерением, а не из спецификации. Дорого обходятся боты, а не люди.

КонфигурацияRAMCPUПримечания
Co-op Checkpoint на 8 игроков2 GB1,5 ядраПеременная величина - число ботов
Co-op с большим числом врагов3 GB2 ядраMaximumEnemies влияет на оба параметра
PvP на 16-24 игрока2-3 GB1,5-2 ядраДешевле co-op при том же числе игроков
PvP на 28 игроков3 GB2 ядраСамая крупная поддерживаемая конфигурация
  • CPU: выделенный сервер на Unreal Engine 4 выполняет игровой поток на одном ядре. Тактовая частота - то, что удерживает tick rate во время перестрелки; лишние ядра в основном помогают рабочим потокам движка и операционной системе.
  • Диск: сама установка занимает несколько гигабайт, и моды добавляют к этому. Пятнадцать-двадцать гигабайт - комфортный минимум для сервера с модами.
  • Сеть: скромная. Sandstorm не требователен к пропускной способности, и задержка между игроками и сервером значит гораздо больше, чем throughput; как отличить одно от другого, см. в статье задержка, джиттер и потеря пакетов.

Неприятная версия вопроса о размерах: co-op сервер с завышенным MaximumEnemies - гораздо более тяжёлый сервер, чем та же машина с 28 игроками в Push, и никакой объём памяти не исправит числа ботов, которое одно ядро не в состоянии просчитать.

Установка и папка конфигурации, которой не существует#

Анонимный вход в SteamCMD, аккаунт не нужен:

bash
$ steamcmd +force_install_dir /home/sandstorm/server +login anonymous \    +app_update 581330 validate +quit

Общий вид команды, включая скрипты обновления, есть в статье SteamCMD простыми словами. Исполняемые файлы:

ПлатформаИсполняемый файл
LinuxInsurgency/Binaries/Linux/InsurgencyServer-Linux-Shipping
WindowsInsurgencyServer.exe в корне установки

Теперь то, что неочевидно. Ini-конфигурация лежит в Insurgency/Saved/Config/LinuxServer/ (или WindowsServer/ в Windows), и ни каталога, ни файлов на свежей установке нет. Их создаёте вы:

bash
$ mkdir -p Insurgency/Saved/Config/LinuxServer$ touch Insurgency/Saved/Config/LinuxServer/Game.ini$ touch Insurgency/Saved/Config/LinuxServer/Engine.ini

Отдельный второй каталог хранит текстовые серверные файлы, и вот он поставляется вместе с установкой:

code
Insurgency/Config/Server/  Admins.txt      one SteamID64 per line  MapCycle.txt    the rotation  Motd.txt        the message of the day  Mods.txt        mod ids, on the older mod scheme  Bans.json       written and read by the server itself

Два дерева конфигурации с разными правилами - вещь необычная, и именно из-за неё чаще всего настройки попадают не в тот файл. Настройки в ini идут в Saved/Config/<platform>Server/. Списки чего-либо идут в Config/Server/. В RE:NODE оба доступны в файловом менеджере и по SFTP, а редактор в браузере подсвечивает синтаксис ini, так что пропущенная скобка видна сразу.

Строка запуска: карты, сценарии и освещение#

Сервер запускается с названием карты, travel-URL из параметров, разделённых ?, и затем ключей командной строки:

bash
$ ./Insurgency/Binaries/Linux/InsurgencyServer-Linux-Shipping \    Oilfield?Scenario=Scenario_Refinery_Push_Security?MaxPlayers=28 \    -Port=27102 -QueryPort=27131 -log -hostname="Frankfurt Push"

Посмотрите на эту строку внимательно: в ней самая запутанная особенность игры. Токен карты - Oilfield. Токен сценария говорит Refinery. Это одно и то же место. У карт Sandstorm есть внутреннее имя и отображаемое, и travel-URL требует внутреннее, а сценарий - отображаемое:

Внутреннее имяОтображаемое имя
OilfieldRefinery
TownHideout
CanyonCrossing
CompoundOutskirts
SinjarHillside
MountainSummit
BuhrizTideway

У Farmhouse, Ministry, Precinct, PowerPlant, Tell и Bab имена в обоих случаях совпадают. Всё остальное в таблице пар - ловушка, в которую вы попадёте ровно один раз.

Имена сценариев строятся по схеме Scenario_<DisplayName>_<Mode> с суффиксом фракции или раскладки там, где режиму он нужен: Scenario_Refinery_Push_Security, Scenario_Hideout_Checkpoint_Security, Scenario_Crossing_Skirmish, Scenario_Farmhouse_Firefight_West, Scenario_Precinct_Domination, Scenario_Bab_Survival. В Checkpoint фракция - это сторона, за которую вы играете; в Push - сторона, которой вы атакуете.

Параметры travel, которые стоит знать, каждый с префиксом ?:

ПараметрДействие
Scenario=Сценарий, как описано выше
MaxPlayers=Люди. 28 для PvP, для co-op ограничено 8
Password=Пароль для входа. Учтите, что с паролем сервер лишается права на статистику
Lighting=Day или Night

Game.ini: настройки, которые важны#

Большую часть несут три секции, и то, к какой секции относится ключ, не всегда интуитивно.

Insurgency/Saved/Config/LinuxServer/Game.ini
[/Script/Insurgency.INSGameMode]bKillFeed=FalsebKillFeedSpectator=TrueTeamKillLimit=3TeamKillGrace=0.2bDeadSay=FalsebVoiceAllowDeadChat=False[/Script/Insurgency.INSMultiplayerMode]bAllowFriendlyFire=TrueFriendlyFireModifier=0.2FriendlyFireReflect=0bAutoBalanceTeams=TruebMapVoting=TruebUseMapCycle=TrueTeamSwitchTime=10IdleLimit=150bBots=False[/Script/Insurgency.INSCoopMode]AIDifficulty=0.5FriendlyBotQuota=4MinimumEnemies=6MaximumEnemies=12bUseVehicleInsertion=True

Четыре ключа в [/Script/Insurgency.INSCoopMode] - это вся настройка co-op. AIDifficulty - число с плавающей точкой от 0 до 1, по умолчанию 0.5; небольшие изменения ощущаются сразу, а значение 1 делает ботов неприятно меткими, но не тактически умнее. MinimumEnemies и MaximumEnemies задают диапазон, внутри которого сервер масштабирует число ботов, и именно эти числа определяют, хватит ли вам выбранного тарифа. FriendlyBotQuota добавляет ИИ-напарников, благодаря чему сервер из трёх друзей всё равно ощущается как отряд.

Некоторые места стоит запомнить, потому что их часто путают:

  • Friendly fire, RoundLimit, bBots и таймер смены команды находятся в INSMultiplayerMode, а не в INSGameMode и не в INSCoopMode.
  • Ключ называется TeamSwitchTime, а не TeamSwitchTimer.
  • Семейства ключей bVoteX не существует. Голосование - это [/Script/Insurgency.TeamInfo] bVotingEnabled плюс секция [/Script/Insurgency.VoteIssueKick] с MinimumPlayersRequired, VotePassRatio, VoteTimeout и другими. Кик по голосованию по-прежнему единственный поддерживаемый вид голосования.

Есть и секции для отдельных режимов, названные по режиму: [/Script/Insurgency.INSCheckpointGameMode] содержит DefendTimer, RetreatTimer, RespawnDelay, CounterAttackRespawnDelay и остальной темп Checkpoint. Это ручки для co-op сервера, который кажется слишком суматошным или слишком вялым.

Ротации карт и мутаторы#

MapCycle.txt принимает две формы. Для большинства серверов хватает одного сценария на строку:

Insurgency/Config/Server/MapCycle.txt
Scenario_Crossing_SkirmishScenario_Hideout_SkirmishScenario_Refinery_Push_Security

Форма с кортежем позволяет переопределить режим или освещение для каждой записи, и именно так одна и та же карта попадает в ротацию и днём, и ночью:

code
(Scenario="Scenario_Town_Checkpoint_Security",Lighting="Day")(Scenario="Scenario_Town_Checkpoint_Security",Lighting="Night")(Scenario="Scenario_Town_Checkpoint_Security",Mode="CheckpointHardcore")

Чтобы ротация вообще использовалась, нужен bUseMapCycle=True, а файл выбирается ключом -MapCycle=, если у вас их несколько. Без файла ротации сервер перебирает все PvP-сценарии, чего co-op серверу почти никогда не нужно.

Мутаторы - вторая половина этой темы, и это по-настоящему хорошая возможность, которую ничего не стоит попробовать. Около двух десятков поставляются с игрой и выбираются по имени в командной строке: -mutators=Hardcore или несколько через запятую. В списке есть Competitive, Hardcore, Frenzy, BoltActionsOnly, PistolsOnly, ShotgunsOnly, HeadshotOnly, Vampirism, LowGravity, FastMovement, SlowMovement, BulletSponge, HotPotato, Warlords и SoldierOfFortune. Сервер с Hardcore и ночной ротацией Checkpoint - это совершенно иной опыт по сравнению со стандартным, и без единого мода.

Админы, RCON и команды#

Admins.txt - это один SteamID64 на строку, без пустых строк, в Insurgency/Config/Server/. Он читается при старте и при смене уровня, так что чтобы добавить кого-то посреди раунда, нужно дождаться следующей карты, а не перезапускать сервер.

Администратор в игре открывает админ-меню, по умолчанию привязанное к Keypad Subtract. Те же команды идут по RCON или в консоль сервера. RCON здесь - настоящее удалённое управление, и в отличие от Killing Floor 2 или Valheim это полноценная реализация протокола Source, а значит, она работает по TCP, и привычные клиенты с ней совместимы.

Insurgency/Saved/Config/LinuxServer/Game.ini
[Rcon]bEnabled=TruePassword=a-long-random-stringListenPort=27015bAllowConsoleCommands=TrueMaxPasswordAttempts=3IncorrectPasswordBanTime=30

Набор команд; <> обозначает обязательный аргумент, [] - необязательный:

КомандаСинтаксис
helphelp
listplayerslistplayers
kickkick <id/netid/name> [reason]
banban <id/netid/name> [minutes] [reason]
banidbanid <netid> [minutes] [reason]
permbanpermban <id/netid/name> [reason]
unban / listbansunban <netid>
saysay <message>
restartroundrestartround [0 keep teams, 1 swap]
maps / scenariosscenarios [filter]
travelscenariotravelscenario <scenario>
traveltravel <travel url>
gamemodepropertygamemodeproperty <property> [value]
listgamemodepropertieslistgamemodeproperties [filter]

Стоит выучить gamemodeproperty. Она меняет значение из Game.ini на работающем сервере, так что вы можете поднять MaximumEnemies посреди сессии и посмотреть, что получится, вместо того чтобы править, перезапускать и гадать. listgamemodeproperties выводит те свойства, которые открывает текущий режим.

Всё, что сервер не распознаёт как команду администратора, передаётся как консольная команда, поэтому и существует bAllowConsoleCommands, и поэтому к паролю RCON стоит относиться так же бережно, как к паролю root.

Порты, браузер серверов и статистика#

ПортПротоколНазначение
27102UDPИгровой трафик
27131UDPSteam query - браузер серверов
на ваш выборTCPRCON, только если вы его включили

Первые два задаются ключами -Port= и -QueryPort=. Официальная рекомендация - открыть игровой порт и порт query и для TCP, и для UDP, и следовать ей ничего не стоит. Сервер, который работает, но нигде не появляется, в девяти случаях из десяти страдает из-за порта query: почему существует эта пара и как проверять каждую половину отдельно, описано в статье порты игрового сервера.

находит сервериграеткомандыИгрокклиент SteamАдминклиент RCONQuery 27131UDP, браузерИгра 27102UDP, играПорт RCONTCP, на выборСервер Sandstorm8 coop / 28 PvP
Что должно быть открыто на сервере Sandstorm и зачем

Статистика и XP - отдельная вещь по сравнению с присутствием в списке, и здесь в дело вступают токены. Любой серверный хост сообщества может проводить игры со статистикой, и требования конкретны: токен входа игрового сервера Steam, ключ -GameStats, второй токен, созданный на собственном сайте игровой статистики New World и передаваемый как -GameStatsToken=, и отсутствие пароля на сервере. Пароль полностью лишает сервер статистики. GSLT создаётся для app id 581320, то есть для игры, а не для серверного инструмента; что такое GSLT и как работают баны против него, описано в статье токены игровых серверов Steam. Если XP вам не важен, всё это не нужно: сервер прекрасно работает и отображается в списке без токена.

Моды через mod.io#

Моды для Sandstorm приходят из mod.io, а не из Steam Workshop, и способ подписки сервера на них изменился. Обе схемы задокументированы в интернете, а работает сейчас только одна, так что проверяйте, о какой из них вы читаете.

Старая схема помещала токен доступа OAuth от mod.io в Engine.ini в секции [/Script/ModKit.ModIOClient], перечисляла числовые id модов в Insurgency/Config/Server/Mods.txt и добавляла -Mods в командную строку. Почти каждая база знаний хостингов до сих пор описывает именно её.

Текущая схема регистрирует сам сервер как пользователя mod.io. Вы один раз авторизуете его кодом безопасности, присланным на ваш аккаунт mod.io, передаёте этот код только при первом запуске и управляете тем, какие моды запускает сервер, через веб-портал mod.io, а не через текстовый файл:

bash
$ ./InsurgencyServer-Linux-Shipping -mods -SecurityCode=34678 \    -ModDownloadTravelTo=Mod_Test?Scenario=Scenario_Mod_Test \    -Port=27102 -QueryPort=27131 -hostname="Modded"

Каждый последующий запуск использует -SecurityCode=none. Есть одно ограничение, на котором попадаются те, кто запускает сервер на собственном игровом компьютере: клиент mod.io не поддерживает больше одного экземпляра под одним аккаунтом на одной машине, поэтому игровому клиенту на том же компьютере приходится подписываться на моды отдельно, под собственным аккаунтом.

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

Диагностика#

Ничего в моём конфиге не работает. Каталога Saved/Config/LinuxServer или ini-файлов в нём не существует. Сервер их не создаёт.

Настройка игнорируется, хотя файл правильный. Проверьте секцию. Friendly fire и bBots относятся к INSMultiplayerMode; настройки мутаторов - к Engine.ini; [Rcon] - к Game.ini.

Больше восьми человек не могут зайти на мой co-op сервер. Это потолок. ?MaxPlayers= выше восьми и [/Script/Engine.GameSession] MaxPlayers= для co-op игнорируются, что бы ни утверждал шаблон конфига.

Сервер работает, но его нет в браузере. Порт query. Откройте 27131 на вход и, если сомневаетесь, откройте оба протокола.

Лог забит предупреждениями `LogSkinnedMeshComp` про сокет головы. Безвредный шум. Подавите его секцией [Core.Log] в Engine.ini, поставив для этой категории уровень Error.

RCON отвергает мой правильный пароль. Вас забанили. Три неудачные попытки по умолчанию вызывают блокировку на тридцать минут; она настраивается через MaxPasswordAttempts и IncorrectPasswordBanTime.

На сервере нет XP. Нет GSLT, нет -GameStats, нет токена статистики или задан пароль сервера. Последнее удивляет людей.

Моды работали в прошлом месяце, а теперь нет. Схема mod.io изменилась. Авторизуйтесь заново по коду безопасности и управляйте подписками на портале.

При старте в логе жалобы на пакеты редактора. Карта ссылается на контент только для редактора либо установка устарела. Запустите app_update с validate заново.

В RE:NODE игровой порт и порт query идут вместе с сервером, а дополнительный порт для RCON добавляется на вкладке Network. Консоль - это собственный вывод сервера с командной строкой, слоты backup покрывают оба дерева конфигурации, а вкладка Schedules запустит ночной backup и перезапуск по cron-выражению; это полезно именно здесь, потому что сервер Unreal, прошедший через двадцать карт, находится не в том состоянии, что только что запущенный. Если он упрётся в лимит памяти, контейнер будет остановлен и перезапущен с чистого листа, а не уйдёт в swap.

FAQ#

Сколько игроков вмещает сервер Insurgency: Sandstorm?

Двадцать восемь в PvP - это число из всех официальных примеров. Co-op ограничен восемью живыми игроками, и никакая настройка этот предел не снимает; ощущение полноты раунда в co-op создают боты, а их число задаётся через MinimumEnemies и MaximumEnemies.

Нужен ли мне токен входа игрового сервера Steam?

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

Куда писать RCON: в Game.ini или в Engine.ini?

В Game.ini. Это самая частая ошибка в описаниях настройки сервера Sandstorm. Порта RCON по умолчанию тоже нет, поэтому выберите его, укажите в ListenPort и откройте для TCP.

Почему в строке запуска Oilfield, а в сценарии Refinery?

Потому что у некоторых карт внутреннее имя отличается от того, которое видят игроки. Travel-URL принимает внутреннее имя, токен сценария - отображаемое. Oilfield - это Refinery, Town - Hideout, Canyon - Crossing.

Как изменить сложность ботов?

Через AIDifficulty в [/Script/Insurgency.INSCoopMode]: число от 0 до 1, по умолчанию 0.5. Менять её можно и на лету командой gamemodeproperty AIDifficulty 0.6 по RCON, и это гораздо лучший способ найти значение, которое действительно нужно вашей группе.

Можно ли запускать моды без портала mod.io?

При текущей схеме нет. Подписками управляют на веб-портале mod.io под собственным зарегистрированным аккаунтом сервера, а прежняя схема с токеном и Mods.txt заменена. Любое руководство, всё ещё описывающее AccessToken в Engine.ini, устарело.


Комментарии

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

0/2000