MAATRIX GAMES / Блог / Team Fortress 2: установка плагинов на сервер

Team Fortress 2: установка плагинов на сервер

MAATRIX GAMES

Ванильный TF2-сервер быстро упирается в потолок: нет ни нормальной админки с логами банов, ни рандомайзера критов под настроение, ни магазина, ни защиты от читеров толковее штатного VAC. Всё это — не «моды» в смысле переделки игры, а плагины, которые живут поверх фреймворка SourceMod, а тот, в свою очередь, стоит на MetaMod:Source. Здесь пошагово: что и куда класть, как добавлять сами плагины и на какие грабли чаще всего наступают именно на TF2, а не абстрактно на Source-играх.

Что такое MetaMod:Source и SourceMod и почему для TF2 нужны оба

MetaMod:Source (MM:S) — это низкоуровневая прослойка, которая встраивается в сам движок Source и даёт другим модулям доступ к его хукам (событиям игры, вызовам функций). Сам по себе MetaMod ничего не делает — это просто «розетка», в которую втыкаются надстройки.

SourceMod (SM) — это одна из таких надстроек, самая популярная: полноценный фреймворк для плагинов на языке SourcePawn, с системой прав администраторов, консольными командами, готовыми API для работы с игроками, картами, событиями. Именно в SourceMod устанавливаются плагины, которые вы качаете с alliedmods.net и других площадок.

Порядок принципиален: сначала ставится MetaMod:Source, и только поверх него — SourceMod, потому что SourceMod технически тоже является MetaMod-плагином. Без MetaMod SourceMod просто не подключится к серверу.

Важная оговорка для тех, кто параллельно администрирует и Counter-Strike 2: TF2 всё ещё работает на классическом Source (не Source 2), поэтому здесь используется «полный» SourceMod с многолетней экосистемой плагинов. На CS2 ситуация другая — там отдельный форк MetaMod для Source 2 с урезанным набором возможностей, и плагины между играми не переносятся.

Подготовка: что скачать и куда

Оба фреймворка распространяются как snapshot-сборки под конкретную ОС сервера (Linux или Windows) и берутся с официальных страниц:

  • MetaMod:Source — metamodsource.net, раздел Downloads
  • SourceMod — sourcemod.net, раздел Downloads

Важно: обе сборки нужно брать под одну и ту же ОС, на которой реально крутится ваш процесс srcds — сборка под Linux на Windows-сервере просто не запустится, и наоборот.

Перед распаковкой сервер стоит остановить — накатывать файлы поверх работающего процесса не стоит, часть библиотек может быть залочена:

sudo systemctl stop tf2server

(имя юнита — то, что вы задали при настройке автозапуска; если сервер поднят через screen/tmux без systemd, просто остановите процесс командой quit в консоли).

Поднять сервер Team Fortress 2 за пару минут

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

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

Установка MetaMod:Source и SourceMod в папку tf/

Оба архива распаковываются в один и тот же каталог — корневую папку конкретной игры внутри установки сервера, то есть tf/, а не в корень сервера целиком (там, где srcds_run или srcds_linux).

sudo su - tf2server
cd /home/tf2server/tf2/tf
wget -O mmsource.tar.gz "ССЫЛКА_СО_СТРАНИЦЫ_METAMODSOURCE_NET_ПОД_ВАШУ_ОС"
tar -xzvf mmsource.tar.gz
rm mmsource.tar.gz

После распаковки появится папка addons/metamod/ и файл addons/metamod.vdf — именно этот vdf-файл сообщает движку, что нужно подгрузить MetaMod при старте. Если файла нет (в некоторых сборках он не создаётся автоматически), создайте tf/addons/metamod.vdf вручную с содержимым:

"Plugin"
{
    "file"    "addons/metamod/bin/server"
}

Дальше туда же, в tf/, распаковываем SourceMod — архив сам аккуратно доложит файлы в существующую структуру addons/, ничего не перезаписывая критично:

wget -O sourcemod.tar.gz "ССЫЛКА_СО_СТРАНИЦЫ_SOURCEMOD_NET_ПОД_ВАШУ_ОС"
tar -xzvf sourcemod.tar.gz
rm sourcemod.tar.gz

Появится папка addons/sourcemod/ с подпапками plugins/, configs/, scripting/, data/, logs/, translations/.

Запускаем сервер обратно и проверяем прямо в консоли (или через RCON — команды из подключения по RCON работают точно так же):

meta version
sm version

Обе команды должны вывести номер версии без ошибок «unknown command». Если meta version не распознаётся — MetaMod не подгрузился (проверьте vdf-файл и путь распаковки), если sm version не работает при рабочем meta version — проблема уже в самом SourceMod поверх исправного MetaMod.

Добавляем плагины в папку plugins

Готовые скомпилированные плагины (файлы с расширением .smx) кладутся в:

tf/addons/sourcemod/plugins/
scp moj_plugin.smx tf2server@ВАШ_IP:/home/tf2server/tf2/tf/addons/sourcemod/plugins/

Если сервер уже запущен, SourceMod подхватывает новый .smx автоматически в течение нескольких секунд (можно ускорить командой sm plugins refresh в консоли). Если файл лёг до старта — плагин загрузится вместе с остальными при запуске.

Многие плагины распространяются не одним .smx, а целым архивом, где вместе с плагином лежат:

  • сам .smx — в plugins/
  • исходник .sp (опционально, для тех, кто будет пересобирать под себя) — в scripting/
  • готовый конфиг или .cfg-файл — в cfg/sourcemod/
  • переводы — в translations/

Распаковывайте такой архив целиком в tf/, соблюдая структуру папок из архива — так все части плагина лягут туда, где их ожидает найти SourceMod.

Если у вас есть только исходник .sp без готового .smx, компилировать нужно тем же компилятором, что идёт в комплекте SourceMod — spcomp, лежит в tf/addons/sourcemod/scripting/:

cd tf/addons/sourcemod/scripting
./spcomp moj_plugin.sp -o ../plugins/moj_plugin.smx

Компилировать чужим/устаревшим spcomp от другой версии SourceMod не стоит — синтаксис SourcePawn между мажорными версиями расходится, и то, что собралось на старом компиляторе, не факт что заработает на новом рантайме, и наоборот.

Проверка результата — команда в консоли:

sm plugins list

Плагин со статусом Running загружен и работает. Управление без перезапуска сервера:

sm plugins load moj_plugin
sm plugins unload moj_plugin
sm plugins reload moj_plugin

sm plugins reload — самая частая команда в работе: после правки конфига плагина или прав нужно применить изменения именно через reload, полный рестарт сервера ради этого не нужен и лишний раз дёргает игроков с сервера.

Синхронизация версий клиента и сервера

Плагины SourceMod исполняются полностью на сервере — клиенту TF2 сам SourceMod ставить не нужно, и в 99% случаев игрок вообще не замечает, что на сервере что-то стоит. Но есть три места, где версии и настройки клиента и сервера всё же должны сходиться.

sv_pure. Это встроенный в движок механизм, который проверяет, что у клиента загружены «чистые» игровые файлы (модели, текстуры, звуки), совпадающие с тем, что ожидает сервер. Большинство плагинов на игровую логику (админка, статистика, режимы) на это никак не влияют. Но если плагин добавляет кастомные модели, звуки или HUD-элементы, которые должны докачиваться клиенту — нужно либо ослаблять sv_pure через whitelist (sv_pure 1 с файлом-исключением, а не sv_pure 2), либо настраивать быструю раздачу файлов через sv_downloadurl, иначе часть игроков будет получать классическую ошибку рассинхрона контента при заходе.

Апдейты самой TF2. Valve иногда меняет внутренние структуры движка вместе с обновлением игры, и SourceMod ориентируется на них через так называемые gamedata-файлы (tf/addons/sourcemod/gamedata/). После крупного патча TF2 часть extensions (например, привязанные к конкретным офсетам функций) может перестать работать до выхода обновлённого gamedata от комьюнити AlliedModders — обычно это вопрос часов-дней, но держать это в голове стоит, особенно если апдейт TF2 вышел внезапно посреди недели, а у вас турнир на выходных.

Версия самого SourceMod/MetaMod. Снапшоты обновляются часто, и старая версия SourceMod иногда не грузит плагины, написанные под новый API (или наоборот — свежий SourceMod ругается на совсем древний плагин). Если после обновления фреймворка часть плагинов вдруг перестала загружаться — первое, что стоит проверить, это дату сборки плагина против даты вашего SourceMod.

Типичные ошибки и их решения

СимптомВероятная причинаЧто делать
meta version — unknown commandMetaMod не подгрузилсяПроверить tf/addons/metamod.vdf, распаковку строго в tf/, а не в корень srcds
sm version работает, но плагины не в спискеПлагины лежат не в той папкеУбедиться, что .smx именно в tf/addons/sourcemod/plugins/, а не в scripting/
Ошибка компиляции при запуске плагинаПлагин под другую версию SourceModПересобрать актуальным spcomp из вашей же установки или взять свежую сборку .smx
Игроков выкидывает с ошибкой чистоты контентаКонфликт с sv_pureНастроить whitelist-исключение или sv_downloadurl для кастомных файлов плагина
Плагин загружен, но у админов нет доступаНе выданы флаги/SteamID в неверном форматеПроверить tf/addons/sourcemod/configs/admins_simple.ini, формат SteamID64
После апдейта TF2 часть функций плагинов сломаласьУстаревший gamedataОбновить файлы в tf/addons/sourcemod/gamedata/ до актуальной версии с alliedmods.net
Два плагина конфликтуют, сервер лагает или крашитсяОба плагина хукают одно и то же событие некорректноОтключать по одному через sm plugins unload и искать виновника; подробный разбор — в статье про краши от плагинов и карт

Если сервер пока не поднят вообще — начните с базовой установки TF2-сервера, а систему прав администраторов для загруженных плагинов удобно сразу разложить по группам, как описано в статье про настройку permissions-плагинов.

Поднять сервер Team Fortress 2 за пару минут

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

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

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

Обязательно ли ставить MetaMod отдельно, если качаю готовую сборку SourceMod?

Да, оба архива нужны и распаковываются оба — MetaMod:Source не входит в архив SourceMod, это два отдельных скачивания с двух разных сайтов, просто ставятся в одну и ту же папку tf/.

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

Да, добавление новых .smx в plugins/ на уже запущенном сервере штатно поддерживается и не требует рестарта — SourceMod подхватывает файл сам либо по команде sm plugins refresh.

Нужно ли игрокам что-то устанавливать для работы плагинов?

Обычно нет — вся логика плагина исполняется на сервере. Исключение — плагины с кастомным контентом (модели, звуки, HUD), тогда клиенту докачивается контент через sv_downloadurl, а сам SourceMod клиенту ставить не нужно никогда.

Где смотреть, что плагин ещё поддерживается и не заброшен?

На странице плагина на форуме AlliedModders обычно указана дата последнего обновления и совместимость с текущими сборками SourceMod — если плагин не трогали пару лет, а движок TF2 за это время обновлялся, стоит на всякий случай проверить логи после установки.

Плагины платные?

Подавляющее большинство плагинов для TF2 на AlliedModders распространяются бесплатно и с открытым исходником — платные встречаются редко, в основном как готовые крупные админ-панели или сложные игровые режимы под заказ.