Всё, за что любят сообщественные серверы 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, устанавливаемое анонимно:
$ 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| Конфигурация | RAM | CPU | Диск |
|---|---|---|---|
| 12 слотов, 6v6, несколько плагинов | 1-2 GB | 1 ядро | 30 GB |
| Публичный сервер на 24-32 слота, полный набор плагинов | 2-3 GB | 1.5-2 ядра | 30-40 GB |
| Versus Saxton Hale, Freak Fortress, кастомные режимы | 3-4 GB | 2+ ядра | 40 GB плюс контент |
| MvM с кастомными миссиями | 3-4 GB | 2+ ядра | 40 GB плюс контент |
TF2 необычна тем, что на маленьком тарифе раньше всего заканчивается диск, а не память. Установка выделенного сервера занимает больше 15 GB ещё до первой кастомной карты и растёт с каждым обновлением. Память нужна скромная: игра старая и хорошо оптимизирована, и полный сервер на 24 слота спокойно живёт в пределах 2 GB, если только какой-нибудь плагин не хранит состояние на каждого игрока.
Флаг -usercon включает RCON, а sv_setsteamaccount принимает Game Server Login Token, который регистрирует сервер в аккаунте игровых серверов Steam для публичного списка. Создать его ничего не стоит, и принадлежит он вашему аккаунту Steam - как его получить и за что за него банят, рассказано в статье токены игровых серверов Steam (GSLT) простыми словами.
Установка Metamod:Source и SourceMod#
- Скачайте Metamod:Source и SourceMod одной и той же ветки. Версии у них согласованы, и связка свежего SourceMod со старым Metamod - первое, что нужно проверить, когда ничего не загружается.
- Распакуйте оба так, чтобы их папки
addonsоказались вtf/. У вас должны получитьсяtf/addons/metamod/иtf/addons/sourcemod/. - Убедитесь, что существует
tf/addons/metamod.vdf. Это файл из нескольких строк, называющий бинарник Metamod относительно корня игры:
"Plugin"{ "file" "../tf/addons/metamod/bin/server"}- Перезапустите сервер и выполните
meta list, затемsm version.
Путь в этом VDF - то место, где чаще всего ошибаются. Он считается от каталога выше tf, поэтому и начинается с ../tf/. После перехода TF2 на 64-битные бинарники серверная библиотека лежит в подпапке linuxsteamrt64, так что на свежей установке в пути есть дополнительный элемент, и вам нужны сборки Metamod и SourceMod с 64-битными бинарниками. Если meta list не выводит вообще ничего, почти всегда дело в этом: правильные файлы, но неверный путь, либо 32-битные сборки на 64-битном сервере.
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 причина, по которой плагин не загрузился, записана простым текстом, чего игровая консоль почти никогда не делает.
Админы: файл, флаги, иммунитет#
Простой файл админов - это одна строка на человека: идентификатор, затем иммунитет и флаги.
// "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 | Разбан |
f | Slay и slap |
g | Смена карты |
h | Изменение cvar-ов |
i | Запуск конфигов |
j | Админский чат и сообщения |
k | Запуск голосований |
l | Установка пароля сервера |
m | RCON через SourceMod |
n | Включение читов |
o to t | Свои, определяются отдельными плагинами |
z | Root. Всё, включая флаги, которых ещё не существует |
Себе выдайте z, тем, кто ведёт вечерние игры, - bcdefgj, а тому, кто пришёл в прошлом месяце, - bcj. Над двумя флагами стоит подумать дважды: m - это RCON, то есть весь сервер, а n включает читы, что на публичном сервере означает конец сервера.
Идентификатором может быть SteamID, IP-адрес или имя с паролем, и осмысленный из них только SteamID. Формат, который нужен SourceMod, - тот, что команда status печатает в консоли для подключённого игрока, так что копируйте, а не набирайте заново. Команда sm_reloadadmins перечитывает файл без перезапуска.
Если персонала больше нескольких человек, admin_groups.cfg вместе с admins.cfg позволяют один раз описать группу «Moderator» и добавлять в неё людей, что лучше, чем править двенадцать строк с флагами, когда вы передумали. Если нужно ещё больше или серверов несколько, понадобится система админов на базе данных, которая настраивается в 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 |
| Плагины статистики F2 | supstats2, 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 действительно важны#
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 находит функции в игре по сигнатуре, обновление их сдвигает, и плагин, зависящий от такой функции, выдаёт ошибку в момент, когда её используют. Исправления по порядку:
- Обновите gamedata SourceMod. AlliedModders выпускает обновления gamedata отдельно от полных релизов, и плагин
updaterможет забрать их за вас. - Обновите Metamod:Source и SourceMod до актуальных сборок той ветки, которая соответствует архитектуре вашего сервера.
- Обновите отдельный плагин либо перенесите его в
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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.