MAATRIX GAMES / Блог / SCP: Secret Laboratory: установка плагинов на сервер

SCP: Secret Laboratory: установка плагинов на сервер

MAATRIX GAMES

Ванильный сервер SCP: Secret Laboratory быстро упирается в потолок — нет кастомных команд, нет своей экономики, нельзя докрутить баланс ролей под конкретное коммьюнити. Всё это закрывает EXILED — сторонний фреймворк, который патчит игровую логику и даёт плагинам C#-API поверх LabAPI. Ниже — рабочий порядок: куда класть файлы, как не словить краш из-за рассинхрона версий и что проверить, если плагин после установки просто не грузится.

Что такое EXILED и с чем его не путают

EXILED — это не плагин, а фреймворк-загрузчик: он встраивается в процесс сервера через Harmony-патчинг (подмену IL-кода на лету) и даёт плагинам событийную модель — подписался на Player.Dying, Door.Opened, Round.Started и так далее, а не ищешь нужный метод в игровом коде вручную. Сам EXILED сейчас развивает сообщество под именем ExMod-Team на GitHub — оригинальная команда Exiled-Team в какой-то момент передала проект дальше, и это нормально для опенсорс-фреймворков с многолетней историей: перед установкой стоит зайти на актуальную страницу релизов, а не искать первую ссылку в поиске, старые зеркала и форки могут годами не обновляться.

Отдельно стоит LabAPI — официальный плагин-API, который Northwood Studios развивает сама. Он не заменяет EXILED полностью: часть плагинов пишется под LabAPI напрямую, часть — под EXILED, работающий поверх LabAPI как надстройка. Смотри, что указано в описании плагина на GitHub или в каталоге SCP:SL Plugins — если там написано "EXILED plugin", ставится он так, как описано ниже; если "LabAPI plugin" без упоминания EXILED — процесс другой и в этой статье не разбирается.

Если сервер у тебя ещё не поднят — сначала пройди базовую установку SCP: Secret Laboratory: там разобраны SteamCMD, LocalAdmin и структура папки конфигов по портам, которая пригодится и здесь.

Ставим сам EXILED на сервер

Скачивай EXILED только с официального репозитория проекта на GitHub, раздел Releases — там же в описании релиза указано, под какую версию SCP:SL он собран (это важно, разберём отдельно ниже). В архиве релиза для Linux два принципиально разных куска:

  • Бутстрап-файл (EXILED.Bootstrap.dll в актуальных релизах) — идёт не в конфиги, а прямо в папку сервера, в SCPSL_Data/Managed/. Это тот кусок, который цепляется за загрузку сборок Unity при старте процесса и запускает остальной EXILED раньше, чем это может сделать обычный плагин.
  • Остальные сборки EXILED (Exiled.API.dll, Exiled.Events.dll, Exiled.Loader.dll и другие) — идут в домашнюю директорию пользователя, от которого крутится сервер, в папку ~/.config/EXILED/.
cd ~/scpsl-server
cp ~/downloads/EXILED.Bootstrap.dll SCPSL_Data/Managed/

mkdir -p ~/.config/EXILED
cp -r ~/downloads/exiled-files/* ~/.config/EXILED/

После копирования — обычный старт через LocalAdmin. В консоли при загрузке должна появиться строка о версии EXILED сразу после версии сервера — это твой сигнал, что бутстрап сработал и фреймворк реально подхватился, а не просто лежит файлами на диске без эффекта:

./LocalAdmin 7777

Если строки про EXILED в консоли нет вообще — фреймворк не загрузился, и ставить плагины пока рано, сначала разберись с самим EXILED (раздел про типичные ошибки ниже).

Поднять сервер SCP: Secret Laboratory за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Куда класть .dll плагинов

После первого успешного запуска EXILED сам создаёт нужную структуру папок под текущим портом внутри ~/.config/EXILED/:

~/.config/EXILED/
├── Plugins/           # сюда кладутся .dll плагинов
│   ├── dependencies/  # сюда — вспомогательные библиотеки, которые требует плагин
│   └── <порт>/        # опционально: плагины только для конкретного порта/инстанса
├── Configs/           # конфиги EXILED и автогенерируемые конфиги плагинов
└── Logs/              # логи загрузки и рантайма

Сама установка плагина — это копирование одного файла:

cp ~/downloads/MyPlugin.dll ~/.config/EXILED/Plugins/
sudo systemctl restart scpsl

Если на одной машине под одним пользователем крутится несколько инстансов сервера на разных портах, а плагин нужен не всем — клади его не в общую Plugins/, а в Plugins/<порт>/, тогда загрузится он только для этого конкретного инстанса. Общая папка Plugins/ при этом всё равно подхватывается всеми инстансами — используй её для плагинов, которые нужны везде.

Отдельно смотри описание плагина на предмет дополнительных .dll-зависимостей — часть плагинов тянет сторонние библиотеки (клиенты БД, JSON-сериализаторы нестандартных версий и так далее), которые не встроены в сам EXILED. Такие файлы идут не рядом с основным .dll плагина, а именно в Plugins/dependencies/:

mkdir -p ~/.config/EXILED/Plugins/dependencies
cp ~/downloads/MySQLConnector.dll ~/.config/EXILED/Plugins/dependencies/

После рестарта плагин при первой загрузке обычно создаёт себе конфиг в ~/.config/EXILED/Configs/ (имя файла — либо общий config_exiled.yml, либо отдельный <port>-config.yml, в зависимости от того, разнесены ли у тебя конфиги по портам). Правь параметры плагина именно там, а не в самом .dll — очевидно, но новички иногда пытаются редактировать бинарник или ищут настройки не в том файле.

Синхронизация версии плагина с версией сервера

Это главный источник проблем при установке плагинов на SCP:SL, и вот почему: EXILED патчит игровой код через Harmony по сигнатурам методов. Если Northwood в очередном патче игры переименовала метод, изменила параметры или сдвинула логику — старая версия EXILED будет пытаться патчить то, чего уже нет в прежнем виде. То же самое, только на уровень выше, происходит с плагинами: плагин собран под конкретную версию EXILED API, и если фреймворк успел уйти вперёд с изменёнными сигнатурами — плагин может не загрузиться или упасть при обращении к устаревшему методу API.

Порядок проверки перед установкой любого нового плагина:

  1. Посмотри версию своего сервера — печатается в консоли LocalAdmin в первой строке после старта.
  2. Посмотри версию EXILED — печатается в консоли сразу после версии сервера, в блоке загрузки фреймворка.
  3. Зайди на страницу плагина (GitHub, каталог SCP:SL Plugins) и проверь, под какую версию EXILED он собран — обычно указано явно в README или в описании релиза.
  4. Если версии не совпадают — не устанавливай вслепую. Либо обнови EXILED до версии, под которую собран плагин, либо поищи более свежую сборку самого плагина.
СитуацияЧто делать
Сервер обновился через SteamCMD, EXILED ещё старыйПодожди новый релиз EXILED (сообщество вокруг SCP:SL реагирует быстро) или временно зафиксируй версию сервера через -beta/manifest в SteamCMD
EXILED свежий, плагин собран под старый EXILED APIИщи обновлённую версию плагина у автора; если проект заброшен — смотри альтернативы в каталоге SCP:SL Plugins
Всё совпадает, но плагин всё равно не грузитсяСмотри лог ~/.config/EXILED/Logs/ — там обычно явно видно Exception/StackTrace, а не догадывайся

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

Проверяем, что плагин реально загрузился

Просто скопировать .dll и перезапустить сервер — не гарантия, что плагин работает. Проверка в три шага:

  1. Консоль LocalAdmin при старте. EXILED печатает список загруженных плагинов с версиями сразу после инициализации фреймворка. Нет твоего плагина в списке — значит, не загрузился, ищи причину в логе, а не пробуй команды плагина вслепую.
  2. Лог EXILED. Свежий файл в ~/.config/EXILED/Logs/:
   ls -lt ~/.config/EXILED/Logs/ | head -5
   grep -i "myplugin" ~/.config/EXILED/Logs/<файл>.txt
  1. Команда плагина в игре или через RA-консоль. Если у плагина есть своя команда (часто регистрируется через RemoteAdmin), вызови её сразу после захода — финальное подтверждение, что плагин не просто загрузился, а реально отвечает.

Если в списке загруженных плагинов пусто вообще — весь EXILED не встал, возвращайся к разделу про установку самого фреймворка и проверяй бутстрап-файл в SCPSL_Data/Managed/.

Обновление и отключение плагинов

Обновление плагина — та же процедура, что установка: скачал новую версию .dll, заменил старый файл, перезапустил сервер. EXILED сам не тянет обновления плагинов из интернета — в отличие от Steam Workshop, где мод обновляется автоматически вместе с сервером, здесь замена файлов вручную. Если хочешь автоматизировать этот процесс на нескольких серверах или следить за версиями без ручной проверки при каждом релизе — общий подход к автообновлению модов и плагинов разобран в статье про автообновление модов на сервере.

Отключить плагин, не удаляя его насовсем — вынести .dll за пределы папки Plugins/, а не переименовать расширение (EXILED всё равно может попытаться его прочитать):

mkdir -p ~/.config/EXILED/Plugins/disabled
mv ~/.config/EXILED/Plugins/MyPlugin.dll ~/.config/EXILED/Plugins/disabled/
sudo systemctl restart scpsl

Часть плагинов также можно временно выключить прямо в конфиге EXILED (config_exiled.yml), не трогая файлы физически — быстрее для теста на живом сервере, но не забудь вернуть флаг обратно после диагностики, иначе через неделю сам забудешь, что и почему выключено.

Типичные ошибки при установке

  • Забыли бутстрап-файл в SCPSL_Data/Managed/. Самая частая причина, почему "EXILED вроде установлен, а в консоли про него ни слова" — скопировали только основные сборки в ~/.config/EXILED/, но не положили EXILED.Bootstrap.dll в папку сервера. Без него фреймворк не встраивается в процесс вообще.
  • Плагин собран под .NET Framework не той версии. Сборка, скомпилированная под несовместимый таргет рантайма, либо не загрузится с понятной ошибкой в логе, либо (реже) уронит процесс на инициализации. Сверяйся с требованиями конкретного плагина, которые обычно указаны в его репозитории.
  • Забытая зависимость из папки dependencies. Скопировали основной .dll плагина, но не положили рядом библиотеку, которую автор упоминал отдельным архивом или строчкой "Requirements" в описании — плагин либо не грузится, либо роняет сервер при попытке инициализации.
  • Плагин положен не в ту папку порта. На сервере с несколькими инстансами плагин иногда кладут в Plugins/<чужой-порт>/ по ошибке — файл на месте, но грузится только для другого процесса, а нужный инстанс его в упор не видит.
  • Забыли перезапустить сервер после копирования файла. EXILED не подхватывает новые .dll на лету — только при следующем старте процесса. Банально, но регулярно списывается на "плагин не работает", хотя реально он просто ещё не загружен.
  • Права доступа на файл. Если .dll скопирован через sudo без явного chown, процесс сервера от отдельного непривилегированного пользователя может не иметь прав на чтение файла — EXILED в логе обычно пишет про отказ доступа, но это легко пропустить среди других строк.

Поднять сервер SCP: Secret Laboratory за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

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

Штатно — нет, EXILED сканирует папку Plugins/ только при старте. Некоторые плагины реализуют собственную команду hot-reload конфига (не файла целиком), но это решает автор конкретного плагина, а не сам фреймворк.

EXILED и LabAPI можно использовать вместе?

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

Где брать сами плагины?

Каталог SCP:SL Plugins на GitHub — основная точка сборки актуальных плагинов сообщества, там же обычно указана совместимая версия EXILED. Официальный Discord-сервер SCP:SL тоже держит список рекомендованных плагинов с обсуждением.

Плагин требует базу данных — это обязательно?

Только если это плагин экономики, статистики или похожего типа с сохранением данных между раундами. Если MySQL не поднята или креды неверны, часть таких плагинов падает при инициализации вместо мягкой ошибки — настройка базы под игровые плагины разобрана отдельно, общие шаги подходят и для SCP:SL.

Сколько плагинов реально можно поставить?

Формального лимита нет, ограничение практическое — память и вероятность конфликта хуков растёт нелинейно с количеством плагинов. Начинай с 3-5 проверенных, добавляй по одному, тестируя каждый отдельно, а не ставь сразу пачку на прод.