Сервер Counter-Strike 2 загружает карты сообщества по их id в Steam Workshop, а не по имени файла. host_workshop_map <id> скачивает одну карту и запускает её; host_workshop_collection <id> превращает целую коллекцию Workshop в пул карт сервера, а ds_workshop_changelevel <name> переключает карты внутри неё. Игрокам ничего устанавливать не нужно - клиент CS2 сам скачивает карту из Workshop при подключении. Почти все проблемы происходят из четырёх мест: отсутствующий или недействительный токен игрового сервера, коллекция, которая не открыта публично, имя карты, набранное не так, как его знает сервер, и диск, который заполняется по мере роста коллекции. В этом руководстве разобрано каждое из них, а также то, как собрать ротацию, которая переживёт перезапуск.
Как карты из Workshop попадают на сервер CS2#
В CS:GO ещё можно было положить .bsp в папку maps и загрузить карту по имени. Карты CS2 - это упакованные файлы .vpk, скомпилированные под Source 2, и поддерживаемый способ поставить карту сообщества на выделенный сервер - это Workshop. Сервер запрашивает у Steam предмет, скачивает его в свой кэш Workshop, монтирует и затем загружает карту из него. Клиент при подключении делает то же самое со своей стороны.
У такой схемы три следствия, которые стоит запомнить:
- Id - это и есть карта. Id предмета Workshop - длинное целое число из URL предмета (
?id=3070596702). Внутреннее имя карты, напримерde_cache, становится известно только после того, как предмет скачан. - Steam должен доверять серверу. Загрузки из Workshop идут через вход сервера в Steam, а на публичном сервере это Game Server Login Token. Сервер без токена, с просроченным или заблокированным токеном обычно сообщает о проблеме как «карта не скачалась», а не как об ошибке токена. Как выпустить и заменить токен, объясняет статья токены игровых серверов Steam.
- Обновления следуют за автором. Когда автор публикует новую версию, сервер подхватывает её при следующей загрузке карты. Это удобно для исправлений и иногда болезненно, когда обновление ломает спавны накануне турнира.
| Команда | Принимает | Что делает |
|---|---|---|
host_workshop_map | id предмета карты | Скачивает (или обновляет) одну карту и переключается на неё |
host_workshop_collection | id коллекции | Скачивает все карты коллекции и использует их как пул карт |
ds_workshop_listmaps | ничего | Выводит имена карт текущей коллекции |
ds_workshop_changelevel | имя карты | Переключается на карту из коллекции по её имени |
changelevel | имя карты | Переключается на стандартную карту; не для карт Workshop |
Запуск одной карты из Workshop#
Самый простой случай - одна карта, например тренировочный сервер, на котором всегда идёт только aim-карта, или скрим на карте, которую Valve убрала из официального пула. Поставьте команду в строку запуска вместо +map:
$ ./game/bin/linuxsteamrt64/cs2 -dedicated -port 27015 +game_alias competitive \ +sv_setsteamaccount <token> +host_workshop_map 3070596702При первом запуске консоль показывает ход загрузки, затем карта загружается. При следующих запусках сервер проверяет предмет, видит, что он актуален, и загружается сразу. Та же команда, введённая в консоль работающего сервера, скачивает карту и переключается на неё за один шаг - это самый быстрый способ проверить карту, прежде чем на неё полагаться.
На хостинге с панелью полную строку вы не пишете. Аргументы запуска собираются из полей на вкладке Startup, а токен вынесен в отдельное поле; команда Workshop либо идёт в поле запуска, если шаблон его предусматривает, либо вводится в консоль после старта сервера. На RE:NODE установка CS2 выполняется за вас и ждёт на вкладке Setup, пока вы не вставите свой токен, - он же используется для загрузок из Workshop, так что у сервера с правильным токеном нет отдельного шага настройки Workshop.
Коллекция как пул карт#
Коллекция - это страница Workshop, на которой перечислены другие предметы. Создайте её со страницы любой карты в Workshop («Добавить в коллекцию»), добавьте нужные карты, выставьте видимость public и скопируйте id из URL. Приватная коллекция или коллекция «только для друзей» - самая частая причина, по которой сервер стартует ни с чем.
$ ./game/bin/linuxsteamrt64/cs2 -dedicated +game_alias casual \ +sv_setsteamaccount <token> +host_workshop_collection 3123456789При запуске сервер скачивает все карты коллекции, прежде чем загрузить первую. Если в ней дюжина карт по несколько сотен мегабайт, первая загрузка может занять несколько минут, и в консоли будет идти одна загрузка за другой. Это нормально. Последующие перезапуски скачивают только изменившиеся предметы.
Когда сервер запущен, узнайте, как он называет карты:
ds_workshop_listmapsds_workshop_changelevel de_cacheds_workshop_listmaps выводит имена карт, а ds_workshop_changelevel принимает одно из этих имён. Имена не всегда такие, как подсказывает заголовок в Workshop - карта с названием «Cache» может оказаться de_cache, de_cache_cs2 или чем-то, что придумал автор, - поэтому копируйте их из вывода, а не угадывайте.
Исторически загрузка коллекции на выделенном сервере Source требовала ключа Steam Web API, передаваемого через -authkey, и с момента выхода CS2 поведение здесь менялось не раз. Если коллекция не загружается, а отдельные карты из неё загружаются нормально, сгенерируйте ключ на странице Web API своего аккаунта Steam, добавьте -authkey <key> в строку запуска и попробуйте снова. Прежде чем строить большую ротацию вокруг коллекций, проверьте актуальное положение дел в заметках Valve о выделенном сервере CS2 - загрузка одиночных карт всё это время оставалась стабильным путём.
Выбор карты, с которой стартует сервер
Когда загружается коллекция, первую карту сервер выбирает сам. Если нужна конкретная стартовая карта, надёжный способ - дать серверу запуститься, а затем переключиться на нужную карту через ds_workshop_changelevel консольной командой или запланированной задачей. Некоторые скрипты запуска сочетают +host_workshop_collection с +host_workshop_map, чтобы задать стартовую карту; на одних сборках это работало, на других нет, так что проверьте на своей версии, а не полагайтесь на это.
Ротация карт: движок, группа карт и плагины#
В CS2 есть три пересекающихся способа решить, что играется дальше, и серверу с картами Workshop нужно выбрать один осознанно.
- Коллекция как группа карт. Когда сервер работает с коллекцией, голосование за следующую карту в конце матча (
mp_endmatch_votenextmap 1) и логика выбора следующей карты берут карты из коллекции. Это путь без настройки, и именно им пользуется большинство небольших серверов сообщества. - `mapcycle.txt` и `gamemodes_server.txt`. Это файлы ротации движка и уровня Valve, о них рассказано в статье команды и cvars сервера CS2. Для стандартных карт они работают хорошо. Для карт Workshop их поведение менее предсказуемо - запись в группе карт требует, чтобы карту можно было найти по имени, а это зависит от того, скачана ли она уже. Считайте их инструментом для стандартных карт.
- Плагин карт. Плагины rock-the-vote и номинаций для CounterStrikeSharp ведут собственный список карт, обычно имя плюс id в Workshop для каждой записи, и сами меняют карты командами Workshop. Так ротируют карты большинство оживлённых серверов сообщества, потому что игроки получают голосование, а вы - список, который можно править, не трогая коллекцию.
Cvars, которые важны при любом выбранном пути:
mp_match_end_changelevel 1 // change map when the match endsmp_endmatch_votenextmap 1 // show the next-map vote at match endmp_match_end_restart 0 // do not replay the same mapmp_timelimit 30 // minutes per map on modes that use itmp_maxrounds 16 // rounds per map; the mode config may overrideПомните, что конфиг игрового режима выполняется после server.cfg при каждой загрузке карты и перезаписывает все cvars раундов, которые тоже задаёт. Если ваш mp_maxrounds на casual-сервере постоянно сбрасывается, поместите его в собственный файл переопределений режима - gamemode_casual_server.cfg для casual, он выполняется последним. Установка слоя плагинов, если вы выбрали третий путь, описана в статье Metamod и CounterStrikeSharp.
Коллекция, которая ведёт себя предсказуемо#
Коллекция - это конфигурация сервера, которая хранится в Steam, поэтому она заслуживает той же заботы, что и server.cfg.
- Держите её небольшой. Десяти-пятнадцати карт одному сообществу более чем достаточно. Каждая карта стоит места на диске сервера и загрузки для каждого нового игрока, а в коллекции из сорока карт за большинство карт никто никогда не голосует.
- Коллекция должна принадлежать вам. Создайте её на аккаунте, который контролирует сообщество, а не на личном аккаунте модератора. Если он уйдёт и удалит её, сервер начнёт стартовать ни с чем.
- Следите за обновлениями карт. Подпишитесь на предметы сами, чтобы Steam сообщал, когда автор публикует изменение. Обновлённая карта скачивается при следующей загрузке; сломанное обновление лечится удалением карты из коллекции, пока автор его не исправит.
- Выбирайте поддерживаемые карты. Многие карты были наскоро портированы при запуске CS2 и с тех пор не трогались. Порт с отсутствующими clip brushes или сломанным освещением хорошо выглядит на скриншотах и плохо играется.
- Разделяйте по режимам. Коллекция surf, коллекция aim и коллекция defuse на трёх серверах лучше одной смешанной коллекции, где голосование предлагает surf-карту публике, пришедшей на defuse. У серверов surf, bhop и KZ и серверов retakes и deathmatch свои привычки в выборе карт.
Диск, первая загрузка и кэш Workshop#
Контент Workshop лежит внутри установки сервера, в собственном дереве steamapps/workshop (точный путь менялся между сборками CS2, поэтому ищите папку content/730, а не доверяйте руководству). Каждая карта - это один или несколько файлов .vpk плюс метаданные. Размеры сильно различаются: маленькая aim-карта может весить десятки мегабайт, детализированная defuse-карта - несколько сотен.
| Коллекция | Обычно дополнительно на диске | Первая загрузка |
|---|---|---|
| 1-3 aim- или тренировочные карты | меньше 500 МБ | меньше минуты |
| 10-15 defuse-карт | 2-5 ГБ | несколько минут |
| 30+ смешанных карт | от 8 ГБ | так долго, что похоже на зависание |
Базовая установка CS2 и так большая, поэтому на маленьком тарифе большой коллекции не хватит диска задолго до того, как перестанет хватать памяти. Когда диск заполняется во время загрузки, сервер обычно падает бесполезным образом - карта «не существует» или обновление не может примениться, - поэтому при любом внезапном изменении поведения Workshop первым делом проверяйте свободное место. Удаление карты из коллекции не удаляет её из кэша; если места мало, вычистите старые папки предметов вручную при остановленном сервере. Устройство кэша и то, почему первые загрузки уходят в таймаут в разных играх, объясняет статья моды Steam Workshop на выделенных серверах.
Память - меньшая забота. Загруженная карта увеличивает рабочий набор сервера, пока она текущая, но CS2 не держит в памяти всю коллекцию, так что ротация из десяти карт стоит примерно столько же, сколько самая большая карта в ней.
Смена карт по расписанию#
Частая просьба - «aim-карта днём, defuse-карты вечером» или «после ночного перезапуска всегда стартовать с одной и той же карты». И то и другое - консольные команды по таймеру.
ds_workshop_changelevel de_cachehost_workshop_map 3070596702На RE:NODE вкладка Schedules выполняет cron-выражение над упорядоченным списком задач - консольная команда, backup или действие с питанием, с задержками между ними, - так что ночной перезапуск, а через две минуты ds_workshop_changelevel на вашу любимую карту - это одно расписание. На своей машине то же самое делает RCON-клиент в cron. Синтаксис описан в статье cron-выражения на понятном языке, а о том, когда перезапуск вообще нужен, - в статье расписания перезапусков, которые помогают.
Не планируйте смену карт на время, когда люди играют матч. Смена посреди раунда завершает его для всех, а запланированная задача не знает, что идёт скрим. Выберите час, когда сервер гарантированно пуст, или пусть расписание за несколько минут выводит предупреждение через say.
Решение проблем с картами Workshop#
Сервер стартует на стандартной карте и игнорирует коллекцию. Коллекция приватная или «только для друзей», либо id принадлежит одной карте, а не коллекции. Откройте id в браузере без входа в аккаунт; если вы её не видите, сервер тоже не видит.
«Failed to download» или загрузка вообще не начинается. Сначала токен: найдите в логе запуска вход в Steam и убедитесь, что токен действителен и не используется другим работающим сервером. Затем проверьте свободное место на диске. Затем попробуйте одну карту из коллекции через host_workshop_map, чтобы отделить проблему коллекции от проблемы загрузки.
`ds_workshop_changelevel` пишет, что карта не найдена. Имя неверное. Выполните ds_workshop_listmaps и скопируйте точное имя; имена чувствительны к регистру и часто имеют суффиксы.
`changelevel de_mymap` не работает для карты Workshop. changelevel ищет стандартные карты. Используйте ds_workshop_changelevel для карт коллекции или host_workshop_map с id.
Игроков кикает, или они застревают на загрузке. Клиент не может получить предмет Workshop - обычно потому, что автор скрыл, удалил его или сделал приватным. У сервера ещё может быть копия в кэше, поэтому у вас карта загружается, а у них нет. Замените карту.
Карта обновилась, и теперь сломаны спавны или точки закладки. Это обновление автора. Удалите предмет из коллекции, смените карту и ждите исправления. Если нужна именно та версия, поддерживаемого способа закрепить старую ревизию Workshop нет; ведите заметки о картах, которые уже подводили вас.
Плагины падают на карте Workshop, но не на стандартных картах. Некоторые плагины читают конфиги для конкретной карты по имени и не ожидают структуры папок, которую используют карты Workshop. Посмотрите в документации плагина, как он именует карты Workshop, и найдите в его логе имя карты, которое он на самом деле увидел.
FAQ#
Нужно ли игрокам подписываться на мои карты в Workshop?
Нет. Клиент CS2 скачивает карту из Workshop при подключении к серверу, на котором она идёт. Подписка заранее лишь избавляет от ожидания загрузки при первом входе - это стоит посоветовать для больших карт.
Можно ли загрузить файл карты на сервер вместо Workshop?
Для CS2 поддерживаемый путь - Workshop. Отдельные файлы карт для Source 2 не загружаются так, как загружались файлы .bsp в CS:GO, а всё, что работает через копирование файлов, обычно ломается при следующем обновлении. Опубликуйте карту в Workshop, хотя бы как unlisted для тестов, и загружайте её по id.
Сколько карт из Workshop может держать сервер?
Жёсткого маленького лимита нет, но практический задают диск и время загрузки. Десять-пятнадцать карт сохраняют первую загрузку короткой, а голосование за карту - осмысленным. Если карт больше тридцати, большинство никогда не выбирают, а каждый перезапуск после обновления автора идёт дольше.
Почему карта изменилась, хотя я ничего не трогал?
Её автор опубликовал обновление, и сервер скачал его при следующей загрузке карты. Карты Workshop всегда следуют за последней версией; если какая-то карта постоянно меняется у вас под ногами, замените её на лучше поддерживаемую.
Нужен ли карте из Workshop другой игровой режим?
Часто да. Карты surf, KZ, aim и arena рассчитаны на custom или casual правила и нередко на плагин. Загружайте карту с подходящим game_alias - обычно custom или casual - и с плагином, под который она сделана, иначе игроки увидят таймер раунда defuse на surf-карте.




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