TeaHost
Counter-Strike 2cs2картынастройка4 мин. чтения

Настройка mapcycle CS2 и mapgroup на сервере

Настройка mapcycle CS2 и mapgroup: файл ротации карт, gamemodes_server.txt, параметр запуска mapgroup, workshop-коллекции и голосование за следующую карту

Кратко

Ротацией карт в CS2 управляют два места: mapcycle.txt в game/csgo/cfg со списком карт по порядку и mapgroup в gamemodes_server.txt (скопируйте его из .example), который включается параметром +mapgroup после +game_type и +game_mode. Голосование за карту включает mp_endmatch_votenextmap 1, а для кастомных карт проще подключить целую коллекцию +host_workshop_collection.

Сервер живёт на одной карте бесконечно, а после конца матча возвращается на dust2 — классическая ситуация, когда настройка mapcycle CS2 сделана наполовину. В CS2 за ротацию отвечают сразу две сущности: файл mapcycle.txt со списком карт и mapgroup из gamemodes_server.txt, который передаётся в параметрах запуска. Работают они вместе, и если настроить только одну, карты будут меняться не так, как вы задумали.

Кто за что отвечает

Разделение простое, но неочевидное:

ЧтоГде лежитКак включаетсяЗа что отвечает
mapcyclegame/csgo/cfg/mapcycle.txtmapcyclefile в server.cfgПлоский список карт по порядку; следующая берётся из него после матча
mapgroupgame/csgo/gamemodes_server.txt+mapgroup в параметрах запускаКакие карты вообще доступны для голосования и режима

Если mapgroup не задан, сервер использует встроенный дефолтный набор, и ваш mapcycle.txt может частично игнорироваться. Отсюда и берётся вечный dust2.

Перед тем как трогать ротацию, убедитесь, что у вас корректно выставлены game_mode и game_type — набор карт привязан к режиму.

Как устроен mapcycle CS2: файл mapcycle.txt

Лежит здесь:

код
game/csgo/cfg/mapcycle.txt

Формат — по одной карте на строку, без расширений и кавычек:

код
de_mirage
de_inferno
de_nuke
de_ancient
de_anubis
de_dust2
de_train

Подключается переменной в server.cfg:

код
mapcyclefile "mapcycle.txt"

Если хотите держать несколько ротаций (например, отдельно для будней и для ивентов), заведите mapcycle_comp.txt и mapcycle_event.txt и переключайте mapcyclefile из соответствующего конфига. Как подключать конфиги через exec, разобрано в статье про server.cfg.

gamemodes_server.txt и mapgroup

В корне game/csgo/ лежит gamemodes_server.txt.example. Скопируйте его в gamemodes_server.txt — оригинал с суффиксом .example сервер не читает, и это ошибка номер один при первой настройке.

Внутри находится блок mapgroups. Свою группу описываете так:

код
"mapgroups"
{
    "mg_active"
    {
        "name"      "mg_active"
        "maps"
        {
            "de_mirage"     ""
            "de_inferno"    ""
            "de_nuke"       ""
            "de_ancient"    ""
            "de_anubis"     ""
            "de_dust2"      ""
            "de_train"      ""
        }
    }
}

Пустые кавычки справа — это не опечатка, туда пишутся дополнительные атрибуты карты, и обычно они не нужны.

Как включить mapgroup

Группа не активируется сама. Её имя передаётся в параметрах запуска сервера:

код
+game_type 0 +game_mode 1 +mapgroup mg_active +map de_mirage

Порядок важен: game_type и game_mode идут до mapgroup, иначе игра успевает подтянуть дефолтный набор. Где именно править строку запуска на хостинге, описано в статье про параметры запуска сервера CS2.

Проверить, что группа применилась, можно из консоли:

код
mapgroup

Команда покажет текущую активную группу и список карт в ней.

Голосование за следующую карту

После конца матча CS2 умеет показывать экран голосования. Включается парой переменных в server.cfg:

код
mp_endmatch_votenextmap 1
mp_endmatch_votenextleveltime 20
mp_match_end_restart 0

mp_endmatch_votenextleveltime — сколько секунд висит экран выбора. Двадцати обычно хватает; на большом паблике имеет смысл поднять до 25–30, потому что часть людей в этот момент уже листает Steam.

Если голосование выключено, сервер просто берёт следующую карту из mapcycle.txt. Это предсказуемее и на матчевом сервере даже удобнее.

Принудительно назначить карту после текущей можно так:

код
nextlevel de_nuke

Значение сбрасывается после смены карты — полезно, когда нужно один раз выдернуть сервер на конкретную карту, не ломая ротацию.

Ротация из workshop-коллекции

Для серверов с кастомными картами — surf, bhop, KZ, авторские de_ — держать список руками бессмысленно. CS2 умеет крутить целую коллекцию мастерской:

код
+host_workshop_collection 1234567890

Сервер сам скачает все карты коллекции и будет их ротировать. Одиночная карта подключается через +host_workshop_map <id>.

Нюансы, о которых узнают на практике: карты из коллекции скачиваются при старте, поэтому первый запуск после добавления новой карты идёт дольше обычного, а при обновлении карты автором сервер подтянет новую версию только после рестарта. Подробнее — в статье про карты из workshop.

Смешивать коллекцию и mapcycle.txt можно, но тогда в mapcycle пишутся имена файлов карт из коллекции, а не их ID.

Проверка: почему ротация не работает

Разберём по шагам то, что ломается чаще всего.

  1. Файл называется gamemodes_server.txt.example. Переименуйте, перезапустите.
  2. mapgroup не передан в строке запуска. Команда mapgroup в консоли покажет чужую группу — например, дефолтную соревновательную.
  3. Карта есть в mapcycle, но её нет в mapgroup. Сервер её пропустит.
  4. Опечатка в имени карты. de_anubis против de_Anubis — регистр имеет значение на Linux.
  5. Матч не заканчивается. Если mp_maxrounds не выставлен и стоит бесконечный режим, ротации просто неоткуда взяться. Смотрите настройку раундов.
  6. Карта из workshop не скачалась. Проверьте, что коллекция публичная и сервер имеет доступ в интернет к CDN Steam.

Частые вопросы

Можно ли менять карту без перезапуска сервера?

Да, из консоли или по RCON: changelevel de_nuke для обычных карт и host_workshop_map <id> для карт мастерской. Второй вариант фактически перезагружает сервер, игроков выкинет.

Как исключить карту из ротации на время?

Проще всего закомментировать её нельзя — mapcycle.txt комментарии не понимает. Просто удалите строку и уберите карту из mapgroup, затем перезапустите сервер.

Нужен ли mapcycle, если включено голосование?

Формально нет — игроки выберут карту сами. Но список нужен как запасной путь: если голосование не состоялось или его выключили, сервер возьмёт следующую карту именно из mapcycle.txt.

Коротко

Держите два файла в согласии: mapcycle.txt со списком по порядку и mapgroup в gamemodes_server.txt с тем же набором карт, плюс +mapgroup в параметрах запуска. Для кастомных карт вместо этого проще подключить workshop-коллекцию целиком.

Если сервер под CS2 ещё выбираете — тарифы тут, панель позволяет править параметры запуска без обращения в поддержку.