Выделенный сервер 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 ГБ диска. Это нижняя граница, а не рекомендация, и она совпадает с тем, сколько на самом деле расходует обычный сервер на двадцать слотов.
| Конфигурация | RAM | CPU | Примечания |
|---|---|---|---|
| 20 слотов, ванильный | 4 GB | 2 ядра | Документированный минимум и обычный сервер |
| 30-40 слотов, ванильный | 5-6 GB | 2-2.5 ядра | Комфортный запас |
| 20-30 слотов с плагинами | 6-8 GB | 2.5-3 ядра | Переменная здесь плагины, а не игроки |
| 60 слотов | 8-10 GB | 3 ядра | Документированный максимум для верифицированного сервера |
- CPU: симуляция раунда идёт в одном потоке, поэтому tick rate определяет тактовая частота одного ядра, а не их число. По умолчанию
server_tickrateравен60; если машина не тянет, сервер не предупреждает, а просто отстаёт. - Диск: сама установка скромная, а растут журналы раундов. LocalAdmin почистит их за вас - именно для этого есть
delete_old_round_logsиround_logs_expiration_days. - Сеть: на игрока нагрузка небольшая, транспорт - LiteNetLib поверх UDP. Широкий канал здесь не нужен.
Честный ответ по подбору ресурсов: если сервер с большим числом плагинов тормозит, почти всегда виноваты плагины, а не число игроков. В статье что на самом деле значит tick rate объясняется, почему это число важно и что чувствует игрок, когда оно падает.
Установка и запуск через LocalAdmin#
Анонимный SteamCMD, без аккаунта и без токена:
$ 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 принимает порт первым позиционным аргументом, перезапускает сервер при падении, ведёт журналы и даёт вам консоль:
$ 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/ лежит отдельная папка на каждый порт, поэтому из одной установки можно запускать несколько серверов с совершенно раздельными настройками:
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 молча игнорируется. Эта единственная деталь порождает больше жалоб «моя настройка ничего не делает», чем всё остальное в файле.
Файл длинный. Вот те настройки, которые решают, каким будет ваш сервер:
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 |
| Простой и AFK | idle_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 вы делаете себя администратором, и его формат достаточно необычен, чтобы записать его в точности. Три части: кто в какой роли, как выглядит каждая роль и какие роли какими правами обладают.
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 / bc | broadcast <seconds> <text> |
ban | ban <playerID> <length> |
oban | oban <userID|steamID|discordID> <duration> <reason> |
unban | unban id <playerID> или unban ip <address> |
cassie | cassie <words> |
disarm / release | disarm <playerID> / release <playerID> |
hp | hp <playerID> <value> |
setgroup | setgroup <playerID> <group_name> |
ffd | ffd status / ffd pause / ffd unpause |
roundtime / rt | roundtime |
stopnextround | stopnextround |
config / cfg | config reload / config value <option> |
perm | perm |
help | help <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 - это удобство для игроков и не более того.
| Порт | Протокол | Назначение |
|---|---|---|
7777 | UDP | Игровой трафик, единственный порт, который нужно открыть |
игровой порт + query_port_shift | TCP | Query, только при enable_query: true |
Это действительно весь список портов, и об этом стоит сказать прямо, потому что люди ищут второй. TCP-порт, через который LocalAdmin общается с игровым процессом, привязан к loopback на случайном номере, и пробрасывать или настраивать его не нужно. В статье порты игровых серверов простыми словами объяснено, почему у большинства игр портов больше и почему здесь их нет.
Плагины: LabAPI и EXILED#
Именно здесь ошибается любое руководство старше примерно года, поэтому скажем точно.
LabAPI - официальный фреймворк от Northwood, и он уже установлен. LabAPI.dll входит в каждую сборку выделенного сервера. Ничего скачивать не нужно. Плагины - это DLL, которые кладутся в папки внутри того же корня профиля, что и ваши конфиги:
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 Admin | EXILED/<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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.