RE:NODE

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

Сервер Team Fortress 2: установка, конфигурация и SourceMod

Установка выделенного сервера TF2: SteamCMD и GSLT, server.cfg, ротация и пользовательские карты, SourceTV, администраторы SourceMod и как не остаться пустым.

Обновлено

1 прочтений

TF2 старая, хорошо оптимизированная и дешёвая в хостинге игра, а значит, хорош ли ваш сервер, определяет не железо. Это ротация карт, список плагинов и то, следит ли за сервером кто-нибудь. Сервер на 24 слота спокойно умещается в 2 GB и одно ядро; большая здесь только установка - примерно 25 GB на диске. В руководстве разобраны установка, конфигурация, которая действительно меняет игру, SourceTV, SourceMod и администраторы, а также то, что пропускает большинство руководств, - как сделать так, чтобы сервер сообщества перестал быть пустым.

Что вы получаете от сервера TF2#

Выделенный сервер - это сервер Source, запускающий каталог игры tf, app id 232250, устанавливаемый анонимно через SteamCMD. Лицензия на игру ему не нужна, он работает на Linux или Windows и по современным меркам нетребователен.

Кое-что в нём зафиксировано, и об этом стоит знать до начала настройки:

  • Tick rate равен 66, и изменить его нельзя. TF2 игнорирует -tickrate. Существуют сторонние расширения, принудительно задающие другие значения; они не поддерживаются, отстают с каждым обновлением игры, а все плагины и конфигурации, которые вы будете скачивать, рассчитаны на 66. Оставьте как есть.
  • Game Server Login Token фактически обязателен. Valve требует его для публичных списков серверов с 2016 года. Без токена сервер всё равно работает и доступен по IP, но в браузере его нет, а для сервера сообщества это то же самое, что не существовать.
  • Серверы сообщества находят, а не подбирают. Казуальный матчмейкинг не направляет к вам игроков. Ваш трафик приходит из браузера Community Servers, от друзей и с того Discord или сайта-списка, где вы себя разместите.
  • Всё социальное - это плагин SourceMod. Голосования, зарезервированные слоты, собственные команды, постоянные баны, рекламные MOTD - ничего этого в базовой игре нет.

Требования и потребление ресурсов#

СерверRAMCPUПримечания
12-16 слотов, ванильный1-2 GB1 ядроДрузья и ротация карт
24 слота, SourceMod, несколько плагинов2-3 GB1-1.5 ядраОбычный сервер сообщества
32 слота, длинный список плагинов3-4 GB2 ядраХаотичный по замыслу; закладывайте запас
24 слота плюс SourceTV и демо3 GB1.5 ядраДобавьте диск под записи

Неожиданность хостинга TF2 - диск, а не память. Установка выделенного сервера занимает около 25 GB, а пользовательские карты - по 50-150 MB каждая, так что ротация из двадцати карт сообщества - это ещё пара гигабайт. Поэтому тарифы TF2 здесь начинаются с 30 GB, а не с 10 GB, которых игре, столь нетребовательной к памяти, хватило бы в других обстоятельствах.

CPU - история про один поток, как и во всех играх Source. Полный сервер на 32 слота с десятком плагинов заметно сильнее загрузит одно ядро, чем ванильный на 12 слотов, но ни тот ни другой не тяжёл. Если сервер подтормаживает, подозревайте плагин в покадровом хуке, а не тариф; в статье CPU или RAM для игровых серверов разобрано, как понять, какой ресурс на самом деле на пределе.

Установка сервера: SteamCMD и GSLT#

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_f12 +sv_setsteamaccount <token>

Создайте токен на странице игровых серверных аккаунтов Steam, указав app id 440 - id базовой игры, а не сервера. Один токен на один сервер; если использовать один токен на двух работающих серверах, оба будут разлогинены. Токен - это учётные данные: его могут забанить, если ваш сервер ведёт себя плохо, а тот, кто им обладает, может выдавать себя за ваш сервер. Не держите его в server.cfg, если ваши файлы могут читать другие, и предпочитайте переменную запуска или отдельный конфигурационный файл, видимый только вам. О банах, app id для разных игр и о том, что происходит при отзыве токена, - в статье токены игровых серверов Steam (GSLT).

Остальная часть строки запуска коротка:

ПараметрЧто делает
-game tfКаталог игры
-consoleЗапуск без интерфейса
-userconВключает RCON; без него rcon_password ничего не делает
-port 27015Игровой порт и порт запросов
+maxplayers 24Слоты. Движок допускает до 32
+map <name>Первая карта; дальше управляет ротация
+servercfgfile server.cfgНужен только если вы переименовали файл

О validate, скриптах обновления и о том, что делать, когда обновление застряло на полпути, рассказано в статье SteamCMD простыми словами.

server.cfg: настройки, которые важны#

tf/cfg/server.cfg выполняется при каждой смене карты. Большая часть того, что в него вписывают, не даёт измеримого эффекта; вот та часть, которая даёт.

tf/cfg/server.cfg
hostname "Badlands and friends | EU | no random crits"rcon_password "long-random-string"sv_password ""sv_lan 0sv_region 3sv_contact "you@example.com"sv_tags "nocrits,vanilla,eu"mp_timelimit 30mp_winlimit 0mp_maxrounds 0mp_autoteambalance 1mp_teams_unbalance_limit 1mp_idlemaxtime 5mp_idledealmethod 1mp_friendlyfire 0mp_respawnwavetime 10tf_weapon_criticals 0tf_damage_disablespread 1tf_use_fixed_weaponspreads 1sv_pure 1sv_cheats 0sv_allowupload 0sv_allowdownload 1sv_downloadurl "https://files.example.com/tf/"net_maxfilesize 64mapcyclefile "mapcycle.txt"

Четыре из них меняют игру, а не сервер:

  • tf_weapon_criticals 0 убирает случайные критические удары. Это самая востребованная настройка серверов сообщества, и половина ваших посетителей решает за минуту, нравится ли им ваш сервер, именно по ней. Оба выбора оправданы; выберите один и укажите его в hostname.
  • tf_damage_disablespread 1 убирает случайный разброс урона, а tf_use_fixed_weaponspreads 1 делает дробь дробовика детерминированной. Вместе с предыдущим это стандартная триада «ощущения соревновательной игры».
  • mp_idlemaxtime с mp_idledealmethod 1 переводит бездействующих игроков в наблюдатели через указанное число минут; 2 - кикает. На сервере, который заполняется, именно это не даёт половине слотов быть занятой людьми, ушедшими пить чай в 2019 году.
  • sv_pure 1 включает проверку по белому списку, поставляемому в tf/cfg/pure_server_whitelist.txt, что не даёт клиентам использовать изменённые модели и ярко-розовые скины на всё подряд. sv_pure 2 строже и отклоняет законные HUD и пользовательский контент, поэтому большинство серверов сообщества остаются на 1.

Cvar частоты стоит упомянуть отдельно, потому что их меняют без всякой причины. sv_minrate и sv_maxrate ограничивают пропускную способность на клиента; sv_mincmdrate/sv_maxcmdrate ограничивают, как часто клиенты присылают ввод; sv_minupdaterate/sv_maxupdaterate ограничивают, как часто сервер шлёт снимки состояния. Соревновательные конфигурации зажимают частоты команд и обновлений на 66 с обеих сторон, чтобы с каждым игроком обращались одинаково. Если вы не проводите матчи, не трогайте всё это семейство: неудачные значения вызывают choke и потерю пакетов, выглядящие точь-в-точь как сетевая неисправность.

Переопределения для отдельной карты помещаются в tf/cfg/<mapname>.cfg, который выполняется после server.cfg при загрузке этой карты. Так можно задать арена-карте другой лимит времени без плагина.

Порты, SourceTV и подключение#

ПортПротоколНазначение
27015UDPИгровой трафик и запросы Steam
27015TCPRCON, с -usercon
27020UDPSourceTV
27005UDPИсходящий на клиенте, открывать нечего

Тарифы TF2 здесь идут с тремя выделенными портами, что в точности соответствует этой таблице: игровой порт, SourceTV и один запасной для второго сервера или демона статистики. Почему запросы в играх Source живут на игровом порту, а в других играх на отдельном, объяснено в статье порты игрового сервера.

SourceTV стоит включить, даже если никто не наблюдает, потому что он записывает демо, которые можно пересмотреть после спора:

tf/cfg/server.cfg
tv_enable 1tv_port 27020tv_name "Badlands TV"tv_title "Badlands and friends"tv_delay 90tv_maxclients 8tv_autorecord 1tv_delaymapchange 1

tv_delay 90 - задержка трансляции в секундах, которая не даёт зрителям передавать игрокам позиции противника. tv_autorecord 1 записывает .dem для каждой карты в папку tf, и она незаметно растёт, пока вы её не почистите, так что поставьте очистку по расписанию, а не обнаруживайте это по полному диску.

Игроки заходят через браузер Community Servers, через избранное в Steam или напрямую командой connect 203.0.113.10:27015 в консоли разработчика. Прямое подключение - это диагностика: если оно работает, а в браузере вас нет, проблема в токене или регионе, а не в сервере. Относитесь к rcon_password как к учётным данным, каковым он и является, - протокол передаёт его открытым текстом, - и прочтите безопасное использование RCON, прежде чем открывать его куда-либо.

читает записьconnectкарта, URL загрузкикарта и контентпроверяет файлы клиентаFastDLbz2 по HTTPБраузер серверовзапрос на 27015Сервер TF266 tickИгрокклиент TF2sv_pureпроверка whitelist
Что происходит между нажатием connect и появлением

Карты, ротация и пользовательский контент#

Ротация лежит в tf/cfg/mapcycle.txt, по одной карте в строке, и сервер читает её из файла, названного в mapcyclefile. TF2 поставляет mapcycle_default.txt; копируйте его, а не правьте, потому что обновления перезаписывают оригинал.

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

Пользовательским картам нужны две вещи. .bsp кладётся в tf/maps/ на сервере, а копия, сжатая bzip2, - на веб-хост, указанный в sv_downloadurl, чтобы клиенты могли скачать её со скоростью веба, а не ручейком через игровой порт. Без FastDL sv_allowdownload 1 всё равно работает, но так медленно, что люди решают, будто сервер сломан.

Голосование за следующую карту - работа SourceMod. Встроенные плагины mapchooser, rockthevote и nominations вместе дают голосование в конце карты, команду RTV и список номинаций, настраиваемые через addons/sourcemod/configs/maplists.cfg. Список для голосования держите короче полной ротации: голосование с тридцатью вариантами - это голосование за то, что оказалось наверху.

SourceMod, Metamod и администрирование#

Сначала SourceMod и Metamod:Source, на них строится всё социальное. Metamod загружается в движок, SourceMod - в Metamod, а плагины - это файлы .smx в addons/sourcemod/plugins/.

Администраторы записываются в addons/sourcemod/configs/admins_simple.ini, по одному в строке:

addons/sourcemod/configs/admins_simple.ini
"STEAM_0:1:12345678"   "99:z""STEAM_0:0:87654321"   "20:bcdef"

Число перед двоеточием - иммунитет, а буквы после него - флаги прав: z - root, а остальные соответствуют kick, ban, slay, changemap и так далее. Группы и переопределения лежат рядом, в admins.cfg и admin_overrides.cfg. После правки sm_reloadadmins в консоли применяет изменения без перезапуска.

КомандаДействие
sm plugins listЧто загружено и что не удалось
sm plugins reload <n>Перезагрузить один плагин по номеру в списке
sm_adminИгровое меню администратора
sm_kick <player> <reason>Кик
sm_ban <player> <minutes> <reason>Бан, 0 - навсегда
sm_map <map>Сменить карту
sm_rcon <command>Выполнить серверную команду из игры
sm_reloadadminsПеречитать файлы администраторов

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

Баны, которые переживают перезапуск и видны другим администраторам, требуют базы данных и веб-панели; обычный ответ - SourceBans++. В каждый игровой тариф здесь входит один слот базы данных, создаваемый из панели со сгенерированными учётными данными, так что сверьте требования плагина с этим, прежде чем выбирать такой путь.

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

Онлайн - это расписание, а не надежда#

Пустой сервер остаётся пустым. В этом весь хостинг серверов сообщества, и никакой конфигурационный файл этого не меняет.

  • Выберите два вечера и будьте там. Люди заходят на серверы, где уже есть люди. Два надёжных часа в неделю лучше постоянно работающей пустой машины.
  • Если нужно, честно заполняйте его ботами первый месяц: tf_bot_quota 8 с tf_bot_quota_mode fill держит восемь ботов, пока их не заменят люди. Ботам нужна навигационная сетка, поэтому они работают только на картах, поставляемых с файлом .nav, или с тем, который вы создали через nav_generate, а это медленно и несовершенно на картах сообщества.
  • Покажите сервер людям. Discord с ботом статуса, запись на сайте-списке и точные sv_tags, чтобы фильтры браузера вас находили. Про сторону бота - в статье вебхуки Discord для статуса сервера.
  • Напишите правила и дайте админку двоим. Сервер без модерации - в одном плохом вечере от отсутствия постоянных игроков. Права и апелляции разобраны в статье правила сервера, модерация и команда, остальное - в статье как растить сообщество игрового сервера.

Еженедельный перезапуск в тихие часы держит в порядке память и файлы демо. Вкладка Schedules на панели делает это по выражению cron вместе с backup, и это вся эксплуатационная нагрузка сервера TF2 после настройки.

Устранение неполадок#

Сервера нет в браузере Community Servers. По порядку: нет GSLT, GSLT забанен, порт запросов недоступен, sv_lan 1 или неверный sv_region. Убедитесь, что сам сервер работает, прямым connect.

Игроков кикает с «server is enforcing consistency for this file». sv_pure отклоняет файл клиента. Обычно это пользовательский HUD или модель, которых нет в белом списке; sv_pure 1 вместо 2 исправляет большую часть.

Пользовательская карта скачивается минутами. Нет FastDL или на веб-хосте нет файла bz2 именно для этой карты. Проверьте точное имя файла и регистр.

SourceMod перестал загружаться после обновления. Обновите Metamod и SourceMod. Консоль выводит ошибку при запуске; читайте первые строки, а не последние.

У всех одновременно choke и потеря пакетов. Cvar частоты или плагин, отправляющий много данных. Сбросьте семейство частот на значения по умолчанию, прежде чем винить сеть.

Сервер упирается в лимит памяти и перезапускается. Для TF2 необычно, и почти всегда виноват утекающий плагин. На RE:NODE контейнер на пределе лимита останавливается и чисто перезапускается, а не уходит в своп, а повторяющиеся перезапуски вызывают предупреждение и автоматический тикет, а не тихую петлю.

FAQ#

Нужен ли Game Server Login Token для сервера TF2?

Для любого публичного - да. Valve требует его для записи в браузере серверов с 2016 года. Сервер без токена работает нормально и принимает прямые подключения, что хватает для закрытой группы, но не для сервера сообщества.

Можно ли изменить tick rate сервера TF2?

Нет, во всяком случае поддерживаемым способом. TF2 зафиксирована на 66 тиках в секунду и игнорирует -tickrate. Расширения, принудительно задающие другие значения, существуют, но создают больше проблем, чем решают.

Сколько слотов запускать?

24 - оптимум для большинства серверов сообщества, а 32 - практический максимум. Выше 24 игра становится другой: много спама, и серьёзно играть трудно, - и это решение по дизайну, а не по производительности.

Сколько диска нужно серверу TF2?

Около 25 GB на установку, плюс 50-150 MB на пользовательскую карту и всё, что накопят демо SourceTV. Память - простая часть; диск люди недооценивают.

Переживут ли мои плагины обновление TF2?

Плагины обычно переживут; сам SourceMod часто нет, пока вы его не обновите. Планируйте обновления на время, когда никто не играет, и никогда не давайте им пройти перед объявленным событием.

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

Это самое частое изменение серверов сообщества, и стоит принять решение, а не оставить значение по умолчанию случайно. Укажите выбранное в hostname, чтобы люди знали, куда заходят.


Комментарии

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

0/2000