RE:NODE

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

Сервер Counter-Strike 2: токен, конфиг и плагины

Выделенный сервер CS2: Game Server Login Token, установка через SteamCMD, server.cfg и конфиги режимов, порты, RCON, GOTV и плагины на Metamod.

Обновлено

0 прочтений

Сервер Counter-Strike 2 - это безголовый бинарник Source 2, один UDP-порт, очень большая установка и один учётный ключ, который нужно получить самому. Этот ключ - Game Server Login Token от Valve, выдаваемый аккаунту, у которого есть игра, и именно из-за него большинство первых серверов работает во всём, кроме одного: их невозможно найти. Всё остальное - server.cfg, пара файлов, которые тихо его перезаписывают, и, если вам нужно что-то сверх базовой игры, Metamod и CounterStrikeSharp.

Это руководство проходит весь путь: токен, установка через SteamCMD, строка запуска и таблица режимов, полезные cvar, порты и RCON, GOTV, карты из мастерской, плагины и ошибки, на которые люди действительно натыкаются.

Что такое сервер CS2 и что нужно перед началом#

Выделенный сервер поставляется под тем же app id Steam, что и игра, - 730. Отдельного приложения «сервер» искать не нужно. Он ведёт один матч, на одной карте, в одном режиме, и настраивается консольными переменными, а не единым файлом настроек: то, что выглядит как конфигурация, на деле представляет собой стопку файлов .cfg, выполняемых в строго определённом порядке при загрузке карты.

Перед началом вам нужны четыре вещи.

  • Машина или тариф. Одно быстрое ядро CPU даёт серверу CS2 больше, чем четыре медленных. Память редко становится ограничением.
  • Game Server Login Token. О нём в следующем разделе. Для публичного сервера он обязателен.
  • Диск, причём гораздо больше, чем вы ожидаете. Установка сервера CS2 занимает порядка 60 ГБ, и SteamCMD резервирует место до начала загрузки, а не забивает диск и падает на полпути. Сервер Source 1 занимал два гигабайта; здесь всё иначе. Оставьте запас на обновления, демо и плагины.
  • Один UDP-порт, а для GOTV - второй.

Уже сейчас стоит решить, какой из трёх серверов вы строите, потому что они быстро расходятся. Частному тренировочному серверу 5 на 5 почти ничего не нужно, кроме правил матча и пароля. Серверу сообщества - deathmatch, retakes, surf, мини-игры - нужны плагины, а плагины - это то, что ломается по графику обновлений Valve. Публичному соревновательному серверу, куда заходят незнакомцы, нужны токен, модерация и ротация карт. Всё написанное ниже относится ко всем трём; раздел о плагинах важен только для второго.

Получение Game Server Login Token#

Valve выдаёт по одному токену на сервер, аккаунту Steam, на странице Game Server Account Management по адресу steamcommunity.com/dev/managegameservers. Войдите в аккаунт, у которого есть CS2, введите app id 730 и заметку, которую вы узнаете и через полгода, и получите токен из 32 символов.

Три правила об этом токене, каждое усвоено на горьком опыте кого-то другого:

  1. Он принадлежит аккаунту, а не серверу. Если токен получит бан, бан ляжет на аккаунт Steam, который его создал. Поэтому ни один хостер не создаёт токен за вас и ни один здравомыслящий человек не делит его между серверами.
  2. Один токен на один сервер. Если два сервера работают на одном токене, оба снимаются с регистрации на мастер-серверах, обычно в самый неудобный момент.
  3. Неиспользуемый токен могут отозвать. Токены, которыми долго не пользуются, удаляются. Если сервер, простоявший месяцы, больше не появляется в списке, сначала посмотрите на страницу токена, а уже потом на всё остальное.

Токен вписывается в строку запуска как +sv_setsteamaccount <token> или на вкладку Startup либо Setup в панели. Не задавайте его ещё и в server.cfg. Два источника одного значения означают, что один из них неверен, и вы не поймёте какой.

Токен - это учётные данные. Если вы вставили его в канал Discord, чтобы попросить помощи, отзовите его и создайте новый, прежде чем читать ответы.

Без токена сервер всё равно работает, и люди по-прежнему могут зайти на него командой connect 203.0.113.10:27015 из консоли. Чего он не сделает - не зарегистрируется на мастер-серверах Valve, а значит, никогда не появится в браузере серверов сообщества, и контент из мастерской может не загружаться. Это самая частая жалоба «мой сервер сломан», хотя сервер не сломан. Про баны, app id и то, что происходит при отзыве токена посреди матча, рассказывает статья токены игровых серверов Steam.

Установка сервера через SteamCMD#

Установка - это одна команда SteamCMD. На вашей собственной машине с Linux:

bash
$ steamcmd +force_install_dir /home/cs2/server +login anonymous \    +app_update 730 validate +quit

Анонимный вход для app 730 сегодня работает. В начале жизни CS2 это было не так, поэтому старые руководства велят входить под аккаунтом, у которого есть игра, - теперь это можно игнорировать. Оставляйте validate в той строке, которую используете для обновлений: он перепроверяет все файлы, это медленно, но только так надёжно чинится наполовину применённое обновление.

Получившаяся структура важна, потому что почти каждый путь в этом руководстве отсчитывается от неё:

code
server/  game/    bin/linuxsteamrt64/cs2       the server binary    csgo/                        the mod folder, still named csgo      cfg/                       server.cfg and the gamemode configs      addons/                    Metamod and plugins, if you add them      maps/                      workshop maps land here      gameinfo.gi                the search paths Metamod has to be added to

Да, папка по-прежнему называется csgo. Valve сохранила имя при переходе на Source 2, как и все плагины, которые на него рассчитывают. Если это ваш первый сервер Steam, app id, беты и скрипты обновления разобраны в статье SteamCMD простыми словами.

Строка запуска, режимы игры и первая карта#

bash
$ ./game/bin/linuxsteamrt64/cs2 -dedicated -usercon \    -port 27015 \    +game_type 0 +game_mode 1 \    +sv_setsteamaccount YOUR_TOKEN_HERE \    +exec server.cfg \    +map de_dust2

-dedicated запускает сервер без интерфейса. -usercon включает RCON, и про него легко забыть, поскольку об отсутствии никто не жалуется, пока вы не попытаетесь подключить удалённую консоль. -port задаёт игровой порт. +map ставьте последним: переменные режима читаются при загрузке карты, поэтому если аргумент карты стоит раньше, карта загрузится до установки режима, и у вас будет соревновательный сервер с правилами обычного режима.

Сам режим - это два числа, унаследованные от CS:GO:

Режимgame_typegame_mode
Обычный (Casual)00
Соревновательный (Competitive)01
Напарники (Wingman, 2 на 2)02
Гонка вооружений (Arms Race)10
Бой насмерть (Deathmatch)12
Особый (Custom)30

Не все сочетания из CS:GO пережили перенос, а Valve с тех пор переставляла режимы. Сервер выводит режим, который он определил, во время загрузки карты, так что при первом запуске читайте консоль, а не верьте таблице, в том числе этой. Custom (3 0) нужен тогда, когда правилами владеет плагин и вы хотите, чтобы игра перестала применять свои.

На хостинге с панелью эту строку вы вообще не пишете. Те же аргументы оказываются полями на вкладке Startup, токен вводится на вкладке Setup, а путь к бинарнику уже правильный. В этом и состоит основная ценность панели для этой игры: установка - это 60 ГБ файлов Valve, и ничего интересного в них нет.

server.cfg и конфиги, которые его перезаписывают#

game/csgo/cfg/server.cfg выполняется при каждой загрузке карты. Так же выполняются конфиги режимов - gamemode_competitive.cfg, gamemode_casual.cfg и остальные, - причём после server.cfg. На этом рано или поздно попадаются все: вы задаёте mp_maxrounds в server.cfg, карта меняется, и конфиг режима сбрасывает значение.

Решение - парный файл. Для каждого gamemode_<mode>.cfg есть gamemode_<mode>_server.cfg, который Valve поставляет пустым именно для этой цели и выполняет последним. Правила конкретного режима кладите туда, всё остальное - в server.cfg.

game/csgo/cfg/server.cfg
hostname "Longship 5v5 - EU"rcon_password "a-long-random-string"sv_password ""sv_cheats 0sv_hibernate_when_empty 1sv_allow_votes 1bot_quota 0mp_autokick 0mp_autoteambalance 1mp_limitteams 2mp_friendlyfire 1sv_deadtalk 0
game/csgo/cfg/gamemode_competitive_server.cfg
mp_maxrounds 24mp_overtime_enable 1mp_overtime_maxrounds 6mp_overtime_startmoney 10000mp_match_can_clinch 1mp_roundtime 1.92mp_roundtime_defuse 1.92mp_freezetime 15mp_startmoney 800mp_maxmoney 16000mp_buytime 20mp_warmuptime 60

О нескольких из них стоит сказать по предложению.

CvarТипичное значениеЧто делает
mp_maxrounds24Раунды в основное время. 24 - это MR12, текущий соревновательный формат
mp_roundtime_defuse1.92Длина раунда в минутах на картах с бомбой. 1.92 - это 115 секунд
mp_overtime_maxrounds6Овертайм MR3, повторяется, пока кто-то не победит
mp_match_can_clinch1Завершать матч, когда счёт уже не догнать, а не доигрывать его
mp_autokick0Выключено. Иначе бездействующих игроков и наносящих урон своим убирают автоматически
bot_quota0Боты. Каждый стоит настоящего CPU, так что держите ноль, пока боты не нужны
sv_hibernate_when_empty1Спать почти без нагрузки на CPU, когда никто не подключён
sv_deadtalk0Слышат ли мёртвых игроков живые

У sv_hibernate_when_empty есть побочный эффект, о котором стоит знать. Спящий сервер почти ничего не потребляет, в чём и смысл на общем тарифе, но он также перестаёт что-либо делать: смена карты по расписанию не произойдёт, пока он спит, а первый зашедший игрок немного ждёт, пока сервер проснётся. Если у вас ротация по таймеру, отключите спящий режим и смиритесь с нагрузкой на CPU. Полный список cvar, включая те, что есть только в CS2, - в статье команды и cvar сервера CS2.

Порты, RCON и GOTV#

ПортПротоколНазначение
27015UDPИгровой трафик и запрос Steam, который использует браузер серверов
27015TCPRCON, если задан -usercon
27020UDPGOTV, задаётся через tv_port

Игровой порт несёт и саму игру, и запрос, который читает браузер серверов, поэтому дыры в файрволе только для UDP хватает, чтобы сервер можно было и найти, и зайти на него, а правило только для TCP не даст ни того ни другого. Если вы меняете -port, ничто другое вместе с ним не сдвигается; у GOTV свой номер. Что делает порт запросов и как проверить его снаружи, объясняется в статье порты игровых серверов.

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

GOTV - это одновременно ретранслятор для зрителей и запись демо:

config
tv_enable 1tv_port 27020tv_delay 105tv_autorecord 1tv_delaymapchange 1tv_maxclients 10

tv_delay в секундах не даёт зрителям подсказывать позиции; 105 - соревновательное соглашение. tv_autorecord 1 записывает .dem в game/csgo/ для каждого матча, а это самая дешёвая мера против читов, доступная серверу сообщества, и единственный способ разрешить спор о четырнадцатом раунде. Демо небольшие, но накапливаются, так что чистите папку по расписанию.

регистрация по GSLTпросмотр спискапрямое подключениеотложенный потокtv_autorecordКлиент CS2браузер или connectСервер CS2UDP 27015Ретранслятор GOTVUDP 27020Мастер Valveнужен токенФайлы демоgame/csgo/*.dem
Как игрок находит сервер CS2 и заходит

Подбор размера: что на самом деле тратит CPU и память#

Начните с того, за что можно перестать платить. В CS2 нет тикрейта, который можно купить. Спор о 64 и 128 относился к CS:GO. CS2 ставит временные метки на ввод игрока между тиками - это система sub-tick, - так что аргумент -tickrate не учитывается, а хостер, рекламирующий «сервер CS2 на 128 tick», продаёт вам число, которое движок игнорирует. Если хотите подробнее о том, почему тикрейт и так никогда не был всем, - в статье что на самом деле означает tick rate.

Что тратит CPU на самом деле, примерно по убыванию:

  • Боты. Поиск пути затратен, и полный состав ботов может обойтись дороже живых игроков, которых они заменяют.
  • Таймеры плагинов. Плагин CounterStrikeSharp, который выполняет работу на каждом кадре сервера, а не раз в секунду, - обычная причина сервера, который прекрасно живёт при четырёх игроках и плохо при шестнадцати.
  • Число игроков в режимах с постоянным возрождением. Deathmatch и retakes тяжелее на игрока, чем соревновательный режим.
  • GOTV - немного, плюс канал на каждого зрителя.
СерверRAMCPUПримечания
Соревновательный или тренировочный на 10 слотов1 GB1 быстрое ядроТипичный случай, и он действительно так мал
12-16 обычный2 GB1,5 ядраБольше сущностей, больше возрождений
20-24 deathmatch или retakes2-3 GB2 ядраСтоимость - в потоке возрождений
Сервер сообщества с плагинами3-4 GB2-3 ядраЦеликом зависит от плагинов

Память для CS2 почти никогда не является ограничением; ограничивает частота одного ядра. Прежде чем покупать больше того или другого, проверьте, что именно упирается в потолок: как прочитать это по графику нагрузки, а не по ощущениям, объясняет статья CPU или RAM для игровых серверов.

В RE:NODE тарифы CS2 начинаются с 1 GB и доходят до 6 GB, от $7 в месяц, с двумя выделениями портов, чтобы у GOTV был собственный номер, и с паролем RCON, который генерируется для каждого сервера, а не остаётся пустым. Установку и обновления мы берём на себя; от вас нужен токен на вкладке Setup, и установка ждёт именно там, пока вы его не введёте.

Карты из мастерской и плагины#

Карты из мастерской загружаются по id, а не по файлу:

config
host_workshop_map 3070394480

Команда скачивает карту, если её нет, поддерживает её обновлённой и загружает. host_workshop_collection <id> делает то же для коллекции, а ds_workshop_changelevel <mapname> переключает между картами, которые в ней уже есть. Загрузки из мастерской идут через аккаунт Steam, стоящий за вашим токеном, поэтому у сервера без действительного токена это часто проявляется как «карта из мастерской не скачивается», а не как проблема токена.

Плагины - это двухслойный стек, и ни один слой не является SourceMod. SourceMod не поддерживает CS2, и признаков того, что будет, нет.

  1. Metamod:Source - загрузчик. Он распаковывается в game/csgo/addons/metamod, а затем - и это тот самый шаг - в game/csgo/gameinfo.gi нужно добавить csgo/addons/metamod в пути поиска. Пока этого не сделано, ничего не загрузится.
  2. CounterStrikeSharp - среда выполнения плагинов, под которую написано почти всё. Плагины - это сборки .NET в addons/counterstrikesharp/plugins, каждая в своей папке.

Сверху лежит то, что вам на самом деле было нужно: MatchZy для матчей 5 на 5 с ножевыми раундами, паузами, backup по раундам и автоматической выгрузкой демо; плагины для retakes и deathmatch; меню администратора. Установку разбирает статья Metamod и CounterStrikeSharp для CS2, а тренировочные и скрим-настройки от начала до конца - конфиг сервера для соревновательных матчей.

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

Сервер не появляется в браузере серверов сообщества. По порядку: задан ли токен и действителен ли он, открыт ли UDP 27015 снаружи и загрузил ли сервер карту до конца. Проверьте командой connect <ip>:27015 в консоли клиента: если она работает, сервер в порядке, а проблема в листинге.

"Your server needs to be restarted in order to receive the latest update." Valve выпустила обновление клиента. Сервер нужно обновить до совпадающей версии, прежде чем кто-то сможет зайти. Выполните строку SteamCMD ещё раз с validate.

Сервер запускается и завершается через несколько секунд. Почти всегда дело в диске. SteamCMD резервирует место под обновление и сдаётся, оставляя установку, которая не может запуститься. Сначала проверьте свободное место, затем выполните validate.

"Invalid Game Server Login Token". Токен был пересоздан, отозван за неактивность или используется вторым сервером одновременно. Создайте новый и замените его только в одном месте.

Вокруг одни боты или команды всё время перемешиваются. Дело в bot_quota 0 и mp_autoteambalance соответственно, а ещё проверьте, какой файл их задаёт: обычный виновник - конфиг режима, выполняющийся после server.cfg.

Разминка не заканчивается. mp_warmuptime тикает, но выставлен mp_warmup_pausetimer, либо плагин удерживает разминку в ожидании начала матча, которого не получил. mp_warmup_end в RCON завершает её принудительно.

Плагины перестали работать после обновления. gameinfo.gi. См. предупреждение выше.

FAQ#

Нужен ли Game Server Login Token для частного сервера?

Нет, если все подключаются по IP командой connect <address>. Токен регистрирует сервер у Valve, чтобы он появлялся в браузере и мог получать контент из мастерской. Частный тренировочный сервер с паролем работает и без него.

Можно ли запустить сервер CS2 на 128 tick?

Нет, и никто другой тоже не может. CS2 заменила тикрейт временными метками ввода sub-tick, а аргумент -tickrate движок игнорирует. Любой хостер, продающий 128 tick для CS2, продаёт этикетку.

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

Соревновательному серверу на 10 слотов комфортно в 1 GB. Серверам deathmatch и retakes на 20 слотов и больше нужно 2-3 GB, а серверу сообщества с множеством плагинов - 3-4 GB. Тактовая частота CPU ограничивает сервер CS2 задолго до памяти.

Работает ли SourceMod на CS2?

Нет. Стек плагинов CS2 - это Metamod:Source плюс CounterStrikeSharp, и плагины должны быть написаны или портированы под него. Плагины SourceMod из CS:GO не запускаются.

Почему установка сервера такая большая?

Потому что выделенный сервер поставляется с тем же набором ресурсов, что и игра, а не с урезанной версией. Ждите порядка 60 ГБ и помните, что SteamCMD резервирует место заранее, поэтому диск со свободным местом поменьше откажет в установке сразу, а не на полпути.

Можно ли использовать один токен на двух серверах?

Нет. Valve выдаёт один токен на сервер, и два сервера на одном токене снимают с регистрации оба. Создайте второй токен со своей заметкой на той же странице.


Комментарии

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

0/2000