RE:NODE

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

Сервер SCP: Secret Laboratory: конфиг, роли и плагины

Запуск сервера SCP: Secret Laboratory: LocalAdmin, config_gameplay.txt, роли и права в Remote Admin, верификация и плагины на LabAPI или EXILED.

0 прочтений

Выделенный сервер SCP: Secret Laboratory - это бесплатная загрузка через SteamCMD (app id 996560), у него есть нативная сборка под Linux, он слушает один UDP-порт и прекрасно работает в 4 ГБ памяти при двадцати слотах. Это ещё и самый капризный сервер в своей категории: игровой бинарник напрямую не запускают, запускают обёртку LocalAdmin; конфигурация лежит не в папке установки, а в профиле пользователя, причём отдельная папка на каждый порт; а официальный фреймворк плагинов теперь входит в сборку сервера, и это незаметно изменило всё, о чём написаны руководства по модам старше года. Здесь разобрано всё это целиком, в том порядке, в каком оно вам понадобится.

Что такое выделенный сервер и что он умеет#

Сервер - это Unity-сборка без графики. Он ведёт один комплекс, один раунд за раз, перезапускает раунд, когда тот заканчивается, и вмещает max_players человек, по умолчанию 20. Шестьдесят - практический потолок и документированный максимум для верифицированного сервера. Игра сбалансирована примерно на двадцать - тридцать пять игроков, а сервер на шестьдесят слотов играется как другая игра, а не как более крупная.

Что вы получаете из коробки, без единого плагина:

  • Remote Admin - настоящая система прав с именованными ролями, значками, силой кика и двадцатью девятью отдельными правами.
  • Баны и белые списки в виде обычных текстовых файлов, по ID пользователя и по IP.
  • Большой игровой конфиг: волны возрождения, боеголовка, обеззараживание, огонь по своим, выносливость, кик за AFK и защита при спавне.
  • Детектор огня по своим, который сам банит тимкиллеров: четыре независимых детектора с настраиваемыми порогами.
  • Геоблокировка, лимиты запросов, проверки до аутентификации и вебхук для жалоб в Discord.
  • Режим простоя, который снижает tick rate до 1, когда никого нет.

Чего нет, так это RCON в стиле Source. Администрирование идёт через игровую панель Remote Admin, консоль LocalAdmin на самой машине и необязательный query-порт, который по умолчанию выключен. Остальное добавляют плагины.

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

Northwood называет одну жёсткую цифру: верифицированному серверу нужно минимум 2 физических ядра, 4 ГБ памяти и 20 ГБ диска. Это нижняя граница, а не рекомендация, и она совпадает с тем, сколько на самом деле расходует обычный сервер на двадцать слотов.

КонфигурацияRAMCPUПримечания
20 слотов, ванильный4 GB2 ядраДокументированный минимум и обычный сервер
30-40 слотов, ванильный5-6 GB2-2.5 ядраКомфортный запас
20-30 слотов с плагинами6-8 GB2.5-3 ядраПеременная здесь плагины, а не игроки
60 слотов8-10 GB3 ядраДокументированный максимум для верифицированного сервера
  • CPU: симуляция раунда идёт в одном потоке, поэтому tick rate определяет тактовая частота одного ядра, а не их число. По умолчанию server_tickrate равен 60; если машина не тянет, сервер не предупреждает, а просто отстаёт.
  • Диск: сама установка скромная, а растут журналы раундов. LocalAdmin почистит их за вас - именно для этого есть delete_old_round_logs и round_logs_expiration_days.
  • Сеть: на игрока нагрузка небольшая, транспорт - LiteNetLib поверх UDP. Широкий канал здесь не нужен.

Честный ответ по подбору ресурсов: если сервер с большим числом плагинов тормозит, почти всегда виноваты плагины, а не число игроков. В статье что на самом деле значит tick rate объясняется, почему это число важно и что чувствует игрок, когда оно падает.

Установка и запуск через LocalAdmin#

Анонимный SteamCMD, без аккаунта и без токена:

bash
$ steamcmd +force_install_dir /home/scpsl/server +login anonymous \    +app_update 996560 validate +quit

Общая форма команды разобрана в статье SteamCMD простыми словами. В установке вы найдёте игровой бинарник - SCPSL.x86_64 в Linux, SCPSL.exe в Windows - и обёртку LocalAdmin или LocalAdmin.exe. Запускать нужно обёртку, а не игру. LocalAdmin принимает порт первым позиционным аргументом, перезапускает сервер при падении, ведёт журналы и даёт вам консоль:

bash
$ cd /home/scpsl/server$ ./LocalAdmin 7777

Если порт не указать, он спросит его в диалоге, по умолчанию 7777. При первом запуске он проведёт вас через мастер настройки и запишет файлы, описанные ниже. В любом запуске без присмотра понадобится ещё --acceptEULA (или переменная окружения ACCEPT_SCPSL_EULA=TRUE), а также --config <path>, если вы храните конфигурацию в своём месте.

У LocalAdmin есть собственные команды, отдельные от игровых: exit, restart, forcerestart, resave, help, а также p для встроенного менеджера плагинов. Он читает и файл config/laargs.txt с дополнительными аргументами запуска - это аккуратнее, чем держать их в стартовом скрипте.

Где на самом деле лежат файлы конфигурации#

Не в папке установки. Корень - это ваш профиль пользователя:

ПлатформаКорень
Linux~/.config/SCP Secret Laboratory/
Windows%AppData%\SCP Secret Laboratory\

Внутри корня в config/ лежит отдельная папка на каждый порт, поэтому из одной установки можно запускать несколько серверов с совершенно раздельными настройками:

code
config/  config_localadmin_global.txt  laargs.txt  7777/    config_gameplay.txt    config_remoteadmin.txt    config_localadmin.txt    config_sharing.txt    UserIDBans.txt    IPBans.txt    UserIDWhitelist.txt    UserIDReservedSlots.txt

Есть одно переопределение, о котором стоит знать, потому что им пользуется почти любая игровая панель. Если файл hoster_policy.txt в рабочей папке сервера содержит строку gamedir_for_configs: true, весь корень переезжает в AppData/ внутри папки сервера, а не в профиль пользователя. Поэтому пути из руководства могут не совпадать с тем, что вы видите в файловом менеджере, и поэтому на хостинге ответ на вопрос «где мой конфиг» обычно звучит так: «ищите папку AppData рядом с бинарником». В RE:NODE вы найдёте её в файловом менеджере в браузере или по SFTP, а встроенный редактор подсветит синтаксис.

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

Файла `motd.txt` нет. Описание, которое игроки видят в браузере серверов, берётся из serverinfo_pastebin_id - это ID записи на Pastebin, которую сервер загружает. На этом спотыкаются все.

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

Синтаксис - key: value, по одному на строку, и пробел после двоеточия обязателен: парсер разбивает строку по двоеточию с пробелом, поэтому key:value молча игнорируется. Эта единственная деталь порождает больше жалоб «моя настройка ничего не делает», чем всё остальное в файле.

Файл длинный. Вот те настройки, которые решают, каким будет ваш сервер:

config_gameplay.txt
server_name: Facility 07max_players: 20server_tickrate: 60serverinfo_pastebin_id: 7wV681fTcontact_email: admin@example.comfriendly_fire: falsefriendly_fire_multiplier: 0.4auto_round_restart_time: 10end_round_on_one_player: falserestart_after_rounds: 0online_mode: trueenable_whitelist: falseip_banning: trueafk_time: 90spawn_protect_enabled: falsespawn_protect_time: 8idle_mode_enabled: trueidle_mode_time: 5000idle_mode_tickrate: 1enable_query: false

Сгруппировано по назначению:

ОбластьКлючи
Идентификацияserver_name, serverinfo_pastebin_id, contact_email, max_players
Ход раундаauto_round_restart_time, end_round_on_one_player, restart_after_rounds, lobby_waiting_time, enable_fast_round_restart
Возрожденияminimum_MTF_time_to_spawn (280), maximum_MTF_time_to_spawn (350), maximum_MTF_respawn_amount (15), respawn_tickets_enable
Боеголовкаwarhead_tminus_start_duration (90), auto_warhead_start_minutes, lock_gates_on_countdown, open_doors_on_countdown
Обеззараживаниеdisable_decontamination, auto_decon_broadcast_enabled
Огонь по своимfriendly_fire, friendly_fire_multiplier (0.4), семейство ff_detector_*
Доступonline_mode, enable_whitelist, ip_banning, same_account_joining, geoblocking_mode
Простой и AFKidle_mode_enabled, idle_mode_time, idle_mode_tickrate, afk_time, constantly_check_afk

Несколько замечаний, каждое из которых сэкономит вам вечер. idle_mode_enabled: true - настройка, благодаря которой пустой сервер ничего не стоит: через пять секунд без игроков он опускается до одного тика в секунду. Детектор огня по своим действительно хорош и действительно агрессивен: ff_detector_spawn_enabled включён по умолчанию и забанит человека за случайность в комнате спавна, так что прочитайте значения _kills, _damage и _ban_time, прежде чем открывать двери. enable_whitelist: true вместе с UserIDWhitelist.txt, где на каждой строке одна запись вида 76561198071934271@steam или 274613382353518592@discord, - самый простой способ запустить закрытый сервер.

Одна поправка ко многим старым руководствам: smart_class_picker, human_class_ratio и scp_ratio больше не входят в текущую конфигурацию. Распределением классов управляют team_respawn_queue - строка из цифр, где каждая цифра означает слот класса, - и server_forced_class. Если вы нашли шаблон конфига со старыми ключами, он написан для сборки несколькими крупными версиями раньше, и остальное в нём, скорее всего, тоже устарело.

Remote Admin: роли, участники и права#

В config_remoteadmin.txt вы делаете себя администратором, и его формат достаточно необычен, чтобы записать его в точности. Три части: кто в какой роли, как выглядит каждая роль и какие роли какими правами обладают.

config_remoteadmin.txt
Members: - 76561198801452050@steam: owner - 2141379914474455080@discord: moderatorowner_badge: SERVER OWNERowner_color: redowner_cover: trueowner_hidden: falseowner_kick_power: 255owner_required_kick_power: 255Permissions: - AdminChat: [owner, moderator] - KickingAndShortTermBanning: [owner, moderator] - PlayersManagement: [owner] - ServerConsoleCommands: [owner]

К ID участника добавляется суффикс, указывающий поставщика идентификации: @steam для 17-значного SteamID64, @discord для идентификатора Discord, @northwood для аккаунта Northwood. Параметры роли получают префикс из имени роли и подчёркивания - синтаксиса с $ здесь нет, что бы ни писало старое руководство. Права перечисляются не так, как ожидают: по одной строке на каждое право, с указанием всех ролей, которые им обладают, и запятой с пробелом между именами ролей.

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

Всего есть двадцать девять прав. Чаще всего вы будете выдавать такие: AdminChat, KickingAndShortTermBanning, BanningUpToDay, LongTermBanning, PlayersManagement, GameplayData, Overwatch, Noclip, ForceclassSelf, GivingItems, RoundEvents, WarheadEvents, Broadcasting. Три требуют осторожности, потому что фактически равны root: PermissionsManagement позволяет переписать действие этого файла, ServerConfigs - менять игровой конфиг, а ServerConsoleCommands даёт консоль сервера.

После правки выполните reload rolesconfig, а не перезапускайте сервер, и проверьте результат в игре командой perm.

Команды, которыми вы будете пользоваться#

Remote Admin в игре открывается клавишей M по умолчанию. Панель в основном состоит из кнопок, а внизу есть текстовая консоль. Команды, которые стоит запомнить:

КомандаСинтаксис
Чат администраторов@<text>
broadcast / bcbroadcast <seconds> <text>
banban <playerID> <length>
obanoban <userID|steamID|discordID> <duration> <reason>
unbanunban id <playerID> или unban ip <address>
cassiecassie <words>
disarm / releasedisarm <playerID> / release <playerID>
hphp <playerID> <value>
setgroupsetgroup <playerID> <group_name>
ffdffd status / ffd pause / ffd unpause
roundtime / rtroundtime
stopnextroundstopnextround
config / cfgconfig reload / config value <option>
permperm
helphelp <command>

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

Остальные команды и их точные аргументы меняются от сборки к сборке чаще, чем хотелось бы. Авторитетен help на вашем собственном сервере, а не список команд из блога. Это относится и к этому списку.

Список серверов, верификация и ваш IP-адрес#

online_mode: true соединяет сервер с центральными серверами Northwood, и именно это помещает его в браузер. Ключа API и токена игрового сервера нет. Вместо них есть верификация, и работает она не так, как в любой другой игре из этого каталога: верификация выдаётся адресу IPv4, а не аккаунту и не доменному имени.

Чтобы подать заявку, выполните !verify static или !verify dynamic в консоли LocalAdmin либо напишите на адрес, который публикует Northwood, и приготовьтесь ждать несколько рабочих дней. Требования публичные и конкретные: почти непрерывная работа, минимум два физических ядра и 4 ГБ памяти, не больше шестидесяти слотов, правильно заданные server_name, serverinfo_pastebin_id, contact_email и max_players, доступность извне вашей собственной сети и контакты персонала в информации на pastebin.

Последствие, о котором никто не говорит, пока не наступит: если ваш сервер делит публичный IPv4 с другими серверами, этот адрес уже может быть верифицирован за кем-то другим, и ответом будет «Port Not Registered» без всяких объяснений. Спросите у хостера, какой адрес у вашего сервера и общий ли он, до подачи заявки, а не после. Домены для верификации тоже не принимаются, поэтому запись A - это удобство для игроков и не более того.

ПортПротоколНазначение
7777UDPИгровой трафик, единственный порт, который нужно открыть
игровой порт + query_port_shiftTCPQuery, только при enable_query: true

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

Плагины: LabAPI и EXILED#

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

LabAPI - официальный фреймворк от Northwood, и он уже установлен. LabAPI.dll входит в каждую сборку выделенного сервера. Ничего скачивать не нужно. Плагины - это DLL, которые кладутся в папки внутри того же корня профиля, что и ваши конфиги:

code
LabAPI/plugins/global/          loaded on every portLabAPI/plugins/<port>/          loaded on that port onlyLabAPI/dependencies/global/     shared librariesLabAPI/configs/<port>/<PluginName>/*.ymlLabAPI/LabApi-<port>.yml        the loader's own config

Менеджер плагинов LocalAdmin (p install, p list, p update) сам загрузит и разместит плагины из официального каталога, записывая их в папки отдельных портов. Собственный конфиг загрузчика определяет, какие папки просматриваются, и, что важно, параметр LoadUnsupportedPlugins: по умолчанию он false и заставляет загрузчик отказываться от плагина, собранного под другую крупную версию LabAPI. Этот отказ - полезное свойство: это разница между плагином, который не загрузился, и плагином, который загрузился и испортил раунд.

EXILED - фреймворк сообщества, и начиная с версии 9 это плагин LabAPI, а не его соперник. DLL его загрузчика лежит в LabAPI/plugins/global/, а сам он приносит своё дерево папок:

ЧтоГде
Корень~/.config/EXILED/ или %AppData%\EXILED\
DLL плагиновEXILED/Plugins/
Зависимости плагиновEXILED/Plugins/dependencies/
Конфиг для портаEXILED/Configs/<port>-config.yml
Журнал Remote AdminEXILED/<port>-RemoteAdminLog.txt

Ставится он через Exiled.Installer-Linux или Exiled.Installer-Win.exe, которым в --path указывают папку сервера, а --target-port разместит его для конкретного порта, а не глобально. Две вещи, в которых ошибаются старые руководства: EXILED 9 больше не патчит Assembly-CSharp.dll, и плагины не кладутся в папку Plugins рядом с конфигами. Если руководство велит делать что-то из этого, оно описывает EXILED 8 или старше.

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

Стоит знать о нескольких плагинах, все они есть в официальном каталоге: CedMod для веб-модерации, банов и прав; AdminTools для дополнительных административных команд и журналирования; UncomplicatedCustomRoles для собственных ролей, описываемых в YAML; SCPStats для статистики между серверами и синхронизации ролей Discord. Всё, что вы устанавливаете, работает с полным доверием сервера, поэтому правила гигиены из статьи как держать сервер с модами в чистоте здесь важнее, чем в большинстве игр.

Обновления, диагностика и типичные ошибки#

SCP: Secret Laboratory выпускает промежуточную версию раз в месяц-два, SteamCMD подтягивает её сразу, как она выходит, а плагины, скомпилированные под старую сборку, перестают работать. Если ваш сервер обновляется автоматически, он может сломаться посреди вторника. Порядок восстановления описан в статье что делать, когда обновление мода всё сломало; коротко: держите копию рабочей папки плагинов и обновляйте плагины до того, а не после того, как позволите серверу перезапуститься.

Настройка в `config_gameplay.txt` ничего не делает. Вы написали key:value. Нужно key: value с пробелом.

Сервера нет в браузере вообще. online_mode равен false, либо UDP 7777 недоступен.

Сервер в браузере есть, но поиском его не найти. Дело в названии. Теги размера в процентах вроде <size=20%> и необычные символы ломают совпадение при поиске. Наберите server_name заново обычным текстом.

«Port Not Registered» при верификации. IPv4-адрес уже верифицирован, обычно за другим сервером, который его делит. Это вопрос к хостеру, а не к конфигу.

`Method not found` или `MissingMethodException` в журнале после обновления. Сборка плагина сделана под предыдущую версию. Обновите или удалите его.

`DllNotFoundException` при запуске. Не хватает системной библиотеки в минимальном образе Linux. Установите зависимости, которых ждёт сервер, а не ищите обходной путь.

LocalAdmin грузит процессор на 100%, хотя никого нет. На стандартном вводе нет терминала. Запускайте его в screen или tmux.

Файлы конфигурации постоянно сбрасываются. Два сервера делят одну папку порта, либо сервер убили, а не остановили штатно, пока он писал.

В RE:NODE консоль - это консоль LocalAdmin с историей и автодополнением по табуляции, в тарифы входят слоты backup для папок конфигурации и плагинов, а вкладка Schedules умеет выполнять ежедневный перезапуск по выражению cron - для этой игры это стоит сделать и ради памяти, и чтобы самому выбрать момент для обновлений. Цикл падений замечается автоматически: три перезапуска за час вызывают предупреждение и открывают тикет, а не оставляют вас узнавать об этом из Discord. О перезапусках вообще - в статье расписания перезапусков, которые помогают.

FAQ#

Сколько RAM нужно серверу SCP: Secret Laboratory?

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

Есть ли в SCP: Secret Laboratory RCON?

Нет. Есть необязательный query-порт, выключенный по умолчанию, игровая панель Remote Admin и консоль LocalAdmin на самой машине. Удалённое администрирование на практике - это Remote Admin с правильно настроенной ролью либо плагин вроде CedMod, добавляющий веб-панель.

Как сделать себя администратором?

Добавьте свой SteamID64 в список Members в config_remoteadmin.txt в виде - <id>@steam: owner, задайте параметры роли owner_*, впишите owner в каждое нужное право, затем выполните reload rolesconfig. Проверьте, что всё сработало, командой perm в игре.

Почему мой сервер не верифицирован и важно ли это?

Верификация выдаётся IPv4-адресу после ручной проверки и занимает дни. Неверифицированный сервер всё равно работает и появляется в списке, но не получает отметки верификации и доверия, которое с ней приходит. Самое частое препятствие - адрес уже верифицирован за кем-то другим.

Что выбрать: LabAPI или EXILED?

По сути, оба. LabAPI - официальный и уже установлен, так что плагин, написанный под него, требует меньше всего сопровождения. У EXILED больший каталог плагинов, и теперь он сам работает как плагин LabAPI, так что его добавление означает ещё один слой, который может сломаться при крупном обновлении.

Какой максимум игроков?

Шестьдесят для верифицированного сервера, и это же практический потолок вообще. По умолчанию двадцать, а по-настоящему игра сбалансирована на двадцать - тридцать пять. Увеличение числа не делает комплекс больше.


Комментарии

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

0/2000