MAATRIX GAMES / Блог / Проблема с загрузкой кастомных карт

Проблема с загрузкой кастомных карт

MAATRIX GAMES

Пишешь в консоли changelevel на кастомку — и вместо загрузки получаешь откат на de_dust2, зависший экран или банальный краш сервера. Знакомая история почти у каждого, кто хоть раз выходил за пределы официального пула карт CS2. Проблема почти всегда лежит в одной из пяти плоскостей: неверный ID, недокачанный файл, несовместимость с движком, забитый диск или опечатка в конфиге — и в этом гайде разберём каждую по шагам, с командами и логами, чтобы ты не гадал, а находил причину за пару минут.

Сначала — смотрим лог в момент краша

Прежде чем что-то чинить, нужно понять, что именно сломалось. Общие фразы вроде "карта не грузится" ничего не говорят — а вот серверный лог в момент смены карты говорит всё.

Подключись по SSH и следи за логом в реальном времени, пока пробуешь сменить карту:

tail -f /home/steam/cs2/game/csgo/logs/L*.log

Если файла с сегодняшней датой ещё нет — CS2 создаёт лог не всегда автоматически, и надёжнее смотреть вывод самого процесса. Если сервер запущен как systemd-сервис (стандартная схема на большинстве панелей), тяни поток напрямую:

journalctl -u cs2server -f

В момент changelevel workshop_map_name или ручного добавления карты в ротацию следи за характерными строками:

  • Host_Changelevel_f: exec sponsorspage.cfg — сервер начал смену уровня, но дальше тишина = карта не найдена;
  • Missing map <название>, disconnecting — карта физически отсутствует в maps/;
  • Error: Material "..." : proxy "..." not found — карта грузится, но не хватает ресурсов (частая история со старыми картами CS:GO);
  • CUtlMemory overflow или похожий краш с дампом — несовместимость по версии движка Source 2.

Дальше по каждому из этих сценариев — конкретное решение.

Причина 1: неверный или устаревший Workshop ID

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

Проверь, как ID указан в твоём gamemode_workshop.txt или в команде запуска:

host_workshop_map <ID_карты>

ID должен быть чисто цифровым (обычно 9-10 цифр), без букв, пробелов и без части URL. Частая ошибка — скопировать в конфиг весь адрес вида https://steamcommunity.com/sharedfiles/filedetails/?id=3021456789 вместо чистого 3021456789.

Проверить, что карта вообще существует и доступна, проще всего вручную — открой ссылку https://steamcommunity.com/sharedfiles/filedetails/?id=<ID> в браузере. Если Steam выдаёт "Item Not Found" — карта удалена автором или снята с публикации, и никакой правкой конфига это не починить. Придётся искать альтернативный ID той же карты (часто есть переопубликованные копии) или другую карту.

Если у тебя настроена коллекция мастерской (host_workshop_collection), а не отдельная карта — та же логика: заходи в саму коллекцию через веб и проверяй, что все пункты внутри неё живы, потому что один битый ID в коллекции может стопорить загрузку остальных.

Про саму механику подключения Workshop и структуру конфигов подробнее — в статье про установку кастомных карт из Steam Workshop для CS2 — если у тебя ещё не настроена базовая загрузка, начни оттуда.

Поднять сервер Counter-Strike 2 за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Причина 2: карта не докачалась перед добавлением в ротацию

Вторая по частоте причина — карту добавили в ротацию раньше, чем она реально докачалась на диск. workshop_download_item — асинхронная команда, она отдаёт управление консоли сразу, а сама закачка идёт в фоне. Если следом сразу выполнить changelevel или прописать карту в mapcycle.txt, сервер попытается сменить уровень на файл, которого физически ещё нет.

Правильная последовательность в консоли сервера:

workshop_download_item 730 <ID_карты>

Дождись в логе строки о завершении закачки (обычно что-то вида Downloading item <ID>... Download complete) и только потом:

host_workshop_map <ID_карты>

или добавляй карту в ротацию. На панели управления это часто автоматизировано, но если ты правишь конфиги руками через SSH или SFTP — не забывай про паузу между командами, особенно для тяжёлых карт (100+ МБ), где закачка может занять пару минут даже на быстром канале.

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

find /home/steam/cs2/game/csgo -iname "*<часть_названия_карты>*"

Если файла .vpk нет в maps/workshop/<ID_приложения>/<ID_карты>/ — закачка не завершилась или не стартовала вовсе, и надо повторить workshop_download_item и проверить логи на ошибки сети или доступа.

Причина 3: карта несовместима с движком Source 2

CS2 работает на Source 2, и это не то же самое, что CS:GO на Source 1. Часть карт из старого пула мастерской CS:GO были портированы авторами и работают штатно, но далеко не все — многие старые карты community просто не имеют версии под Source 2, и попытка их загрузить либо крашит сервер, либо выдаёт ошибки материалов и текстур в логе.

Отличить портированную карту от непортированной несложно: смотри страницу карты в Steam Workshop — если она размещена именно в разделе Workshop для Counter-Strike 2 (а не для старого CS:GO), то технически она собрана под актуальный движок. Если ты находишь ID через старые списки или форумы 2020-2022 года — велик шанс, что это карта под CS:GO, которая либо не запустится, либо запустится с визуальными багами (пропавшие текстуры, битое освещение, коллизии не совпадают с визуалом).

Признаки несовместимости в логе:

Error: Material "de_custom/wall_01" : proxy "AnimatedTexture" not found

или полный краш процесса без внятного сообщения сразу после Host_Changelevel_f.

Что делать: искать в Workshop конкретно раздел для CS2 (фильтр приложения в Steam Workshop уже разделяет игры), либо проверять комментарии на странице карты — сообщество обычно быстро пишет в духе "не работает на CS2" или "требует doors fix". Если карта тебе принципиально нужна, а официального порта нет — иногда помогает открытый Hammer 2 и ручная перекомпиляция, но это уже не пять минут работы, а отдельный проект.

Причина 4: не хватает места на диске

Банально, но раз в несколько недель это оказывается корнем проблемы — особенно если на сервере уже накопился десяток крупных карт, демки матчей и логи. workshop_download_item в таком случае либо тихо падает без внятной ошибки, либо докачивает карту наполовину и оставляет битый .vpk.

Проверка места:

df -h /home/steam

Если свободно меньше 1-2 ГБ — это уже зона риска, особенно для карт с крупными текстурными пакетами (некоторые кастомки весят 300-500 МБ). Почисти место — старые демки, неиспользуемые карты, логи:

du -sh /home/steam/cs2/game/csgo/maps/workshop/*

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

rm -rf /home/steam/cs2/game/csgo/maps/workshop/730/<ID_ненужной_карты>

После удаления карту всегда можно докачать заново тем же workshop_download_item, так что это безопасная операция, если карта больше не нужна в ротации.

Причина 5: ошибка в конфиге ротации или запуска

Отдельный класс проблем — не сама карта, а то, как она прописана в конфигурационных файлах сервера. Частые косяки:

  • лишний пробел или неверная кодировка в mapcycle.txt — CS2 может не распознать строку;
  • название карты в ротации не совпадает с реальным именем .vpk (регистр важен на Linux-серверах — de_Custom и de_custom это разные файлы);
  • в server.cfg не прописан host_workshop_collection или host_workshop_map, если ротация вообще опирается на мастерскую, а не на локальные файлы.

Пример корректной записи в mapcycle.txt для карты из мастерской:

workshop/3021456789/de_customtown

Формат — workshop/<ID_карты>/<имя_карты_без_расширения>. Если хоть один элемент не совпадает буква в букву с тем, что реально лежит в папке workshop, ротация будет пропускать карту молча или падать при попытке до неё дойти.

Общая логика работы с конфигами сервера, где они лежат и как их безопасно редактировать через SFTP или консоль панели — в статье про работу с конфигурационными файлами игрового сервера. А если проблема шире — не одна карта не грузится, а вообще не понятно, как выстроить очередность карт в ротации — смотри настройку ротации карт (map rotation).

Быстрый чек-лист диагностики

Если под рукой нет времени читать всё по порядку — вот таблица с симптомом, вероятной причиной и что проверить первым:

Симптом в логе/консолиВероятная причинаЧто проверить
Тишина после Host_Changelevel_fКарта не найденаID мастерской, наличие .vpk на диске
Missing map, disconnect игроковЗакачка не завершиласьПовторить workshop_download_item, подождать
Ошибки материалов/текстурНесовместимость с Source 2Раздел Workshop именно для CS2
Краш процесса без деталейСтарая карта CS:GO без портаКомментарии на странице карты
Закачка обрывается, .vpk весит 0 байтНет места на дискеdf -h, чистка старых карт
Карта пропускается в ротации молчаОпечатка в mapcycle.txtРегистр и точность имени файла

Если сервер запущен не первый месяц и проблемы с картами повторяются регулярно — возможно, дело не в конкретной карте, а в том, что сервер стоит на слабом хостинге с недостатком диска или медленным каналом до Steam CDN. Проверь тарифы и характеристики железа — иногда апгрейд диска решает проблему быстрее, чем разбор десятка карт по одной.

Поднять сервер Counter-Strike 2 за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

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

Почему карта грузится локально в игре, но не на сервере?

Локально игра сама подгружает файлы через клиентский Workshop-кэш, а серверу нужна отдельная закачка через workshop_download_item — это два независимых процесса, и наличие карты у тебя в клиенте никак не гарантирует её наличие на сервере.

Можно ли просто закинуть .vpk файл карты вручную по FTP вместо мастерской?

Да, технически можно положить файл в maps/, но тогда карта не будет автоматически раздаваться игрокам через Workshop — им придётся качать её отдельно или тоже вручную, что неудобно для публичного сервера. Мастерская остаётся штатным способом для готовых карт.

Что делать, если карта грузится, но игроки массово получают ошибку рассинхронизации (map mismatch)?

Обычно это версия карты на сервере отличается от версии, которую видит клиент — автор карты обновил файл, а на сервере лежит закэшированная старая версия. Удали папку карты в workshop/ на сервере и перекачай заново через workshop_download_item.

Сколько карт из мастерской CS2 реально стоит держать в ротации одновременно?

Жёсткого лимита нет, но каждая добавленная карта — это место на диске и время на прогрев кэша при первом запуске после рестарта сервера. На практике комфортно держать 10-20 карт в активной ротации, а остальное — в резерве, подключая по мере необходимости.

Помогает ли перезапуск сервера, если карта не грузится?

Иногда да — если проблема была в незавершённой закачке или временном сбое подключения к Steam CDN, рестарт форсирует повторную попытку. Но если причина в неверном ID или несовместимости карты, рестарт ничего не изменит, и стоит сразу смотреть лог, а не гонять сервис по кругу.