RE:NODE

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

Плагины SourceMod для Team Fortress 2 и настройка админов

Установка Metamod:Source и SourceMod на сервер TF2, админы и флаги, стоящие плагины, голосования за карту, sv_pure и быстрые загрузки.

1 прочтений

Всё, за что любят сообщественные серверы Team Fortress 2, - это плагины. Админские команды, голосования за карту, зарезервированные слоты, кастомные режимы, статистика, то, что затыкает человека, который час орёт в голосовой чат, - ничего из этого в самой игре нет. Есть Metamod:Source, который загружает SourceMod, SourceMod, который загружает папку скомпилированных плагинов, и около двадцати минут настройки, которые большинство руководств пропускает, считая, что вы и так всё знаете.

От двух файлов зависит, заработает ли это вообще: tf/addons/metamod.vdf, который говорит движку загрузить Metamod при старте, и tf/addons/sourcemod/configs/admins_simple.ini, который решает, кто вы такой. Если с ними всё в порядке, остаётся выбрать плагины. В этой статье - установка, подробно система админов, плагины из комплекта и те, что стоит добавить, cvar-ы TF2, которые действительно что-то меняют, кастомный контент и загрузки, а также то, что ломается, когда Valve обновляет игру. Коротко о том, зачем всё это нужно, - в статье сервер Team Fortress 2, на который стоит зайти.

Что такое SourceMod и что его запускает#

SourceMod - это платформа плагинов для игр на Source 1. Плагины пишутся на SourcePawn, компилируются в файлы .smx и кладутся в папку; SourceMod загружает их, даёт им API для работы с игрой и берёт на себя идентификацию админов, переводы, меню и доступ к базам данных, чтобы каждому плагину не приходилось делать это самому. Metamod:Source стоит под ним как загрузчик, который вообще впускает SourceMod в процесс игры.

TF2 - игра на Source 1, поэтому всё это работает как надо. Об этом стоит сказать прямо, потому что Counter-Strike 2 - это Source 2, и там не работает ничего из перечисленного. Плагин на SourcePawn, найденный сегодня, будет работать на TF2 и не будет работать на CS2.

Сам сервер - это приложение Steam 232250, устанавливаемое анонимно:

bash
$ steamcmd +force_install_dir /home/tf2/server +login anonymous \    +app_update 232250 validate +quit$ cd /home/tf2/server$ ./srcds_run -game tf -console -usercon -port 27015 \    +maxplayers 24 +map cp_process_final \    +sv_setsteamaccount YOUR_GSLT_TOKEN
КонфигурацияRAMCPUДиск
12 слотов, 6v6, несколько плагинов1-2 GB1 ядро30 GB
Публичный сервер на 24-32 слота, полный набор плагинов2-3 GB1.5-2 ядра30-40 GB
Versus Saxton Hale, Freak Fortress, кастомные режимы3-4 GB2+ ядра40 GB плюс контент
MvM с кастомными миссиями3-4 GB2+ ядра40 GB плюс контент

TF2 необычна тем, что на маленьком тарифе раньше всего заканчивается диск, а не память. Установка выделенного сервера занимает больше 15 GB ещё до первой кастомной карты и растёт с каждым обновлением. Память нужна скромная: игра старая и хорошо оптимизирована, и полный сервер на 24 слота спокойно живёт в пределах 2 GB, если только какой-нибудь плагин не хранит состояние на каждого игрока.

Флаг -usercon включает RCON, а sv_setsteamaccount принимает Game Server Login Token, который регистрирует сервер в аккаунте игровых серверов Steam для публичного списка. Создать его ничего не стоит, и принадлежит он вашему аккаунту Steam - как его получить и за что за него банят, рассказано в статье токены игровых серверов Steam (GSLT) простыми словами.

Установка Metamod:Source и SourceMod#

читает addons/грузит при старте картыСервер TF2srcds, Source 1addons/metamod.vdfгрузится при стартеMetamod:Sourceaddons/metamodSourceModплагин MetamodВаш плагинplugins/*.smx
Как .smx-плагин попадает в TF2
  1. Скачайте Metamod:Source и SourceMod одной и той же ветки. Версии у них согласованы, и связка свежего SourceMod со старым Metamod - первое, что нужно проверить, когда ничего не загружается.
  2. Распакуйте оба так, чтобы их папки addons оказались в tf/. У вас должны получиться tf/addons/metamod/ и tf/addons/sourcemod/.
  3. Убедитесь, что существует tf/addons/metamod.vdf. Это файл из нескольких строк, называющий бинарник Metamod относительно корня игры:
tf/addons/metamod.vdf
"Plugin"{	"file"	"../tf/addons/metamod/bin/server"}
  1. Перезапустите сервер и выполните meta list, затем sm version.

Путь в этом VDF - то место, где чаще всего ошибаются. Он считается от каталога выше tf, поэтому и начинается с ../tf/. После перехода TF2 на 64-битные бинарники серверная библиотека лежит в подпапке linuxsteamrt64, так что на свежей установке в пути есть дополнительный элемент, и вам нужны сборки Metamod и SourceMod с 64-битными бинарниками. Если meta list не выводит вообще ничего, почти всегда дело в этом: правильные файлы, но неверный путь, либо 32-битные сборки на 64-битном сервере.

code
tf/addons/sourcemod/  configs/    admins_simple.ini    admins, the simple way    admins.cfg           admins, the grouped way    admin_groups.cfg     groups and their flags    admin_levels.cfg     what each flag letter means    databases.cfg        database connections    maplists.cfg         which map list each plugin uses    core.cfg             SourceMod itself  plugins/               .smx files that load  plugins/disabled/      .smx files that do not  extensions/            native extensions  gamedata/              offsets and signatures per game  logs/                  errors_YYYYMMDD.log  scripting/             .sp sources and the compilertf/cfg/sourcemod/        generated per-plugin configs

Две из этих папок объясняют большинство вопросов в поддержку. В plugins/disabled/ плагин переносят вместо удаления, а в logs/errors_*.log причина, по которой плагин не загрузился, записана простым текстом, чего игровая консоль почти никогда не делает.

Админы: файл, флаги, иммунитет#

Простой файл админов - это одна строка на человека: идентификатор, затем иммунитет и флаги.

tf/addons/sourcemod/configs/admins_simple.ini
// "identity"          "immunity:flags""STEAM_0:1:123456"     "99:z""STEAM_0:0:987654"     "50:abcdefgj""STEAM_0:1:555555"     "20:bcj"

Число до двоеточия - это иммунитет: тот, у кого оно больше, не может быть кикнут, забанен или убит тем, у кого меньше. Буквы после двоеточия - флаги.

ФлагЧто даёт
aЗарезервированный слот
bОбычный админ. Большинство плагинов проверяют его первым
cКик
dБан
eРазбан
fSlay и slap
gСмена карты
hИзменение cvar-ов
iЗапуск конфигов
jАдминский чат и сообщения
kЗапуск голосований
lУстановка пароля сервера
mRCON через SourceMod
nВключение читов
o to tСвои, определяются отдельными плагинами
zRoot. Всё, включая флаги, которых ещё не существует

Себе выдайте z, тем, кто ведёт вечерние игры, - bcdefgj, а тому, кто пришёл в прошлом месяце, - bcj. Над двумя флагами стоит подумать дважды: m - это RCON, то есть весь сервер, а n включает читы, что на публичном сервере означает конец сервера.

Идентификатором может быть SteamID, IP-адрес или имя с паролем, и осмысленный из них только SteamID. Формат, который нужен SourceMod, - тот, что команда status печатает в консоли для подключённого игрока, так что копируйте, а не набирайте заново. Команда sm_reloadadmins перечитывает файл без перезапуска.

Если персонала больше нескольких человек, admin_groups.cfg вместе с admins.cfg позволяют один раз описать группу «Moderator» и добавлять в неё людей, что лучше, чем править двенадцать строк с флагами, когда вы передумали. Если нужно ещё больше или серверов несколько, понадобится система админов на базе данных, которая настраивается в configs/databases.cfg:

tf/addons/sourcemod/configs/databases.cfg
"Databases"{	"default"	{		"driver"	"default"		"host"		"your-db-host"		"database"	"sourcemod"		"user"		"generated-user"		"pass"		"generated-password"	}	"storage-local"	{		"driver"	"sqlite"		"database"	"sourcemod-local"	}}

Слот базы данных в панели выдаёт хост, имя базы, пользователя и пароль, и эти четыре значения - всё, что нужно этому файлу. Если вам нужно только, чтобы баны переживали перезапуск на одном сервере, запись storage-local с SQLite выше не требует никакой базы и уже присутствует.

КомандаДействие
sm_adminОткрывает админское меню в игре
sm_kick <target> [reason]Кик
sm_ban <target> <minutes> [reason]Бан. 0 - навсегда
sm_addban <minutes> <steamid>Бан того, кого нет на сервере
sm_unban <steamid>Снять бан
sm_gag / sm_mute / sm_silenceТекст, голос или и то и другое
sm_slay / sm_slap <target> [damage]Убить либо ударить и оттолкнуть
sm_map <map> / sm_votemap <map...>Сменить карту или проголосовать за неё
sm_cvar <cvar> [value]Прочитать или задать cvar
sm_whoКто подключён и какой у него доступ
sm_reloadadminsПеречитать файлы админов
sm plugins listЧто загружено
sm plugins reload <name>Перезагрузить один плагин

Целями могут быть #userid, часть ника, @all, @blue, @red, @me и @!me, и знать это полезно до того, как вы убьёте не того человека на глазах у двадцати четырёх.

Плагины, которые идут в комплекте с SourceMod#

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

  • Админские команды, админское меню, баны и управление общением - basecommands, adminmenu, basebans, basecomm, basechat.
  • Голосования за карту и ротация - mapchooser проводит голосование в конце карты, rockthevote позволяет игрокам его вызвать, nominations - номинировать карты, nextmap отвечает на say nextmap, randomcycle выбирает случайно вместо порядка.
  • Удобства - reservedslots, antiflood, basetriggers для say timeleft, funcommands и funvotes для шуток, clientprefs, чтобы плагины могли запоминать настройки игрока.

Каждый из них при первой загрузке создаёт файл конфигурации в tf/cfg/sourcemod/ со всеми своими cvar-ами, значениями по умолчанию и комментарием к каждому. Эта папка и есть настоящая документация, и прочитать plugin.mapchooser.cfg лучше, чем искать пост на форуме 2013 года. Порог голосов для rock the vote, за сколько минут до конца начинается голосование за карту, можно ли продлевать карту - всё это там есть, со значениями по умолчанию.

Какие карты эти плагины предлагают, определяет configs/maplists.cfg, который по умолчанию указывает на mapcyclefile сервера. Задайте mapcyclefile "mapcycle.txt" в server.cfg, впишите по одному названию карты на строку в tf/cfg/mapcycle.txt, и голосования, номинации и ротация будут согласованы между собой. Короткий список карт, которые людям нравятся, лучше длинного, в котором две трети пропускают.

Плагины, которые стоит добавить#

ПлагинЧто делает
TFTrueСоревновательные вайтлисты, турнирные функции, загрузка на logs.tf. Загружается через plugin_load, а не через SourceMod
Плагины статистики F2supstats2, medicstats и загрузчик на logs.tf: стандартный набор за каждым матчевым логом, который вы читали
SOAP TF2DMСпавны для дезматча и мгновенное возрождение для серверов скримов и пагов
TF2Items и TF2AttributesМеняют атрибуты оружия. Основа, на которой строится большинство плагинов с кастомным оружием
Versus Saxton Hale / Freak Fortress 2Режимы с боссами, из-за которых серверы на 24 слота остаются полными
UpdaterАвтоматически обновляет плагины, которые это поддерживают

Не поддавайтесь желанию поставить тридцать. Каждый плагин - это код, работающий внутри вашего игрового сервера и требующий повторной проверки после каждого обновления TF2, и сервер с шестью работающими плагинами лучше сервера с тридцатью, где два тихо пишут ошибки в лог, который никто не читает. Ставьте плагин потому, что что-то конкретное не так, а не потому, что он показался интересным.

Плагины - обычные файлы, так что вам хватит файлового менеджера или SFTP - данные для подключения есть в статье SFTP и файловый менеджер. Положите .smx в addons/sourcemod/plugins/, смените карту или выполните sm plugins load <name> и проверьте sm plugins list. Плагины, распространяемые в виде исходников .sp, нужно компилировать: либо через spcomp в addons/sourcemod/scripting/, либо через веб-компилятор на сайте SourceMod. Общие соображения о гигиене изложены в статье как держать сервер с модами в чистоте, и здесь они применимы полностью: плагин работает с полными правами сервера и без песочницы.

Cvar-ы сервера, которые в TF2 действительно важны#

tf/cfg/server.cfg
hostname "Longship TF2 // No crits // EU"rcon_password "a-long-random-string"sv_password ""sv_lan 0sv_region 3sv_tags "nocrits,vanilla,eu"sv_visiblemaxplayers -1// Roundsmp_timelimit 30mp_winlimit 0mp_maxrounds 0mp_bonusroundtime 8mp_autoteambalance 1mp_teams_unbalance_limit 1mp_disable_respawn_times 0mp_idlemaxtime 5mp_idledealmethod 2// Gameplaytf_weapon_criticals 1tf_damage_disablespread 0tf_use_fixed_weaponspreads 0tf_bot_quota 0// Contentsv_pure 1sv_pure_kick_clients 1sv_allowupload 0sv_allowdownload 1sv_downloadurl ""net_maxfilesize 64// Housekeepingmapcyclefile "mapcycle.txt"sv_hibernate_when_empty 1sv_hibernate_postgame_delay 30// SourceTVtv_enable 1tv_port 27020tv_delay 90tv_name "Longship STV"

Три из них определяют, какой у вас сервер. tf_weapon_criticals 0 отключает случайные критические попадания - самую спорную настройку игры, которой в любом случае место в названии сервера. tf_damage_disablespread 1 и tf_use_fixed_weaponspreads 1 - соревновательные настройки урона, и включать их втихую на публичном сервере значит сбивать с толку завсегдатаев, которые не могут объяснить, почему ракетомёт ощущается иначе. mp_disable_respawn_times 1 даёт тот быстрый хаотичный сервер, который многим сообществам на самом деле и нужен.

mp_idlemaxtime 5 вместе с mp_idledealmethod 2 кикает игроков, простаивающих пять минут, а на сервере на 24 слота это разница между полным сервером и сервером, полным никого. Поставьте метод 1, чтобы переводить их в наблюдатели, если хотите быть помягче.

sv_hibernate_when_empty 1 снижает нагрузку пустого сервера на CPU почти до нуля, что важно, когда тариф даёт долю ядра, а не целое. SourceTV - это второй порт и второй процесс: он позволяет людям смотреть игру вживую и записывает демо, и именно поэтому у тарифов TF2 здесь три выделенных порта, а не один: игра, SourceTV и один запасной под то, что вы добавите потом. RCON работает по TCP на игровом порту и требует -usercon; консоль в панели - более безопасный способ входа, причины изложены в статье как безопасно пользоваться RCON.

Боты включаются через tf_bot_quota с tf_bot_quota_mode fill, tf_bot_difficulty от 0 до 3 и tf_bot_add. Им нужна навигационная сетка карты: официальные карты идут с ней, а кастомные в основном нет. Сервер может сгенерировать её командой nav_generate, что занимает время и даёт ботов, которые упираются в стены на сложной геометрии.

Кастомный контент, sv_pure и быстрые загрузки#

sv_pure 1 заставляет клиентов использовать серверную версию игрового контента вместо своей, с исключениями, перечисленными в tf/pure_server_whitelist.txt. Так вы не даёте людям запускать пак плоских белых текстур, из-за которого все светятся. sv_pure 2 строже и ломает много безобидных кастомизаций, включая HUD-ы, на которые люди полагаются, поэтому большинство серверов останавливаются на 1 с разумным белым списком. sv_pure_kick_clients 1 отключает клиентов, которые отказываются подчиниться, вместо попыток их согласовать.

Кастомные карты должны дойти до игрока. Встроенная загрузка движка работает при sv_allowdownload 1 и настолько медленная, что люди отключаются, не дождавшись. Решение - sv_downloadurl, указывающий на веб-сервер, который зеркалирует структуру папок сервера - maps/, sound/, materials/, models/ - желательно со сжатыми через bzip2 копиями каждого файла. Отдавать это может любой статический хост, включая небольшой тариф веб-хостинга: это папка файлов по HTTP. Механизм тот же, что использует Garry's Mod, а раскладка папок подробно разобрана в статье контент Workshop и FastDL.

sv_allowupload 0 в этом конфиге выставлен намеренно. Загрузки с клиентов - это то, как приходили кастомные спреи, и одновременно давний источник проблем. Отключение загрузок стоит вам спреев и убирает целую категорию неприятностей.

Обновления, 64 бита и как держать всё это на ходу#

Обновления TF2 ломают SourceMod. Не всегда, но достаточно часто, чтобы это было плановым событием, а не сюрпризом. Обычно ломается gamedata: SourceMod находит функции в игре по сигнатуре, обновление их сдвигает, и плагин, зависящий от такой функции, выдаёт ошибку в момент, когда её используют. Исправления по порядку:

  1. Обновите gamedata SourceMod. AlliedModders выпускает обновления gamedata отдельно от полных релизов, и плагин updater может забрать их за вас.
  2. Обновите Metamod:Source и SourceMod до актуальных сборок той ветки, которая соответствует архитектуре вашего сервера.
  3. Обновите отдельный плагин либо перенесите его в plugins/disabled/ и обходитесь без него, пока не вернётся автор. Некоторые не возвращаются.

Переход на 64 бита - это версия всего этого, с которой все столкнулись одновременно: у TF2 появились 64-битные серверные бинарники, и любая установка Metamod и SourceMod на 32 бита перестала работать, пока не подтянулись сборки. Если вы устанавливаете сейчас, берите актуальные сборки обоих и проверьте, что они с 64-битными бинарниками.

Привычка, которая делает всё это дешёвым, - хранить копию рабочей папки addons где-нибудь не на сервере, чтобы восстановление было копированием файлов, а не переустановкой. Общая процедура описана в статье что делать, когда обновление мода всё ломает. На RE:NODE обновление запускается при старте сервера, так что принять обновление - решение, которое вы принимаете перезапуском; слоты для бэкапов входят в каждый тариф TF2, а вкладка Schedules запустит ежедневный backup и ночной перезапуск по выражению cron. Если контейнер упирается в лимит памяти, он останавливается и запускается заново с чистого состояния, а не уходит в своп, и это лучший исход, чем час работы сервера, который формально отвечает.

Решение проблем#

`meta list` ничего не выводит. Нет tf/addons/metamod.vdf, либо неверен путь в нём, либо стоят 32-битные сборки на 64-битном сервере. Проверьте, что файл существует, затем что путь внутри него совпадает с тем, где бинарник лежит на самом деле.

Metamod загружается, но `sm version` ничего не делает. SourceMod распакован не туда. Он должен лежать в tf/addons/sourcemod, а не в addons/sourcemod в корне.

Плагин загружается, но его команды отвечают «unknown command». Дело в админских флагах. Выполните sm_who на себе, проверьте, что в admins_simple.ini ваш SteamID записан ровно так, как его показывает status, и выполните sm_reloadadmins.

Всё работало, пока не вышло обновление. Gamedata. Обновите SourceMod, затем плагины, а после этого начинайте отключать.

Голосования предлагают не те карты. configs/maplists.cfg указывает на другой список, чем вы думаете. По умолчанию он следует за mapcyclefile.

Сервер пуст, а график CPU ровно упирается в лимит. Какой-то плагин выполняет работу по таймеру, когда никого нет, либо гибернация выключена. Задайте sv_hibernate_when_empty 1 и выгружайте плагины по одному.

Игроки не могут скачать кастомную карту. Либо неверен sv_downloadurl, либо файла нет по зеркалируемому пути, либо net_maxfilesize меньше файла. Откройте URL в браузере: файл должен скачаться сразу.

FAQ#

Нужен ли Metamod, если есть SourceMod?

Да. Metamod:Source - загрузчик, который впускает SourceMod в процесс игры; SourceMod - платформа плагинов. Ни один не делает работу другого, и сборки должны соответствовать друг другу и совпадать по архитектуре.

Где добавить себя админом на сервере TF2?

В tf/addons/sourcemod/configs/admins_simple.ini, одной строкой со своим SteamID и "99:z" для полного доступа. Выполните sm_reloadadmins в консоли, затем наберите в игре sm_admin, чтобы открыть меню.

Работает ли SourceMod на Counter-Strike 2?

Нет. SourceMod поддерживает игры на Source 1, такие как TF2, Counter-Strike: Source и CS:GO. CS2 работает на Source 2 и использует вместо него CounterStrikeSharp - другую платформу с другими плагинами.

Сколько RAM нужно серверу TF2?

Два гигабайта хватает на полный сервер на 24 слота с обычным набором плагинов. Кастомным режимам, хранящим состояние на каждого игрока, нужно три-четыре. Жёстче ограничение по диску: одна только установка занимает больше 15 GB.

Как отключить случайные криты?

tf_weapon_criticals 0 в server.cfg. Плагин не нужен. Укажите это и в названии сервера, и в sv_tags, потому что по этому признаку люди фильтруют в первую очередь.

Почему плагины перестают работать после обновления TF2?

Потому что SourceMod находит игровые функции по сигнатуре, а обновление их сдвигает. Сначала обновите gamedata SourceMod, затем сами Metamod и SourceMod, затем отдельные плагины.


Комментарии

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

0/2000