Left 4 Dead 2: установка модов и кампаний на сервер
Сервер L4D2 уже стоит и работает, но хочется больше — админ-команды через SourceMod, кастомная орда через плагин, свежая кампания с Workshop вместо надоевших четырёх ванильных. И тут начинаются грабли: плагин не грузится, карта не качается у половины игроков, а сервер вдруг начинает ругаться на несовпадение файлов. Разберём по шагам, куда что класть, как не разойтись версиями с клиентами и как раздать тяжёлый контент без танцев с Workshop.
Содержание
Кампания, карта и плагин — это не одно и то же
Прежде чем лезть в addons/, стоит развести три разных типа контента, потому что ставятся и синхронизируются они по-разному:
- Кампания — набор карт с общим сюжетом, финалом и настройками Director'а (искусственного режиссёра, который управляет спавном орды). Кампания обязана быть у всех подключающихся игроков — это тяжёлый VPK с картами, текстурами и звуком.
- Отдельная карта — то же самое, но без обвязки кампании, часто survival- или versus-режим на одной локации. Тоже обязательна у клиента.
- SourceMod-плагин — работает только на сервере, меняет логику (лимиты, RCON-команды, кастомную экономику, античит), клиенту сам файл плагина не нужен — игрок видит только результат его работы.
Отсюда и разное отношение к синхронизации: плагин можно обновить в любой момент без последствий для клиентов, а вот кампанию или карту при обновлении на сервере обязаны получить все, кто планирует зайти — иначе рассинхрон и разрыв соединения. Это правило будет всплывать в каждом следующем разделе.
MetaMod:Source и SourceMod — фундамент под любые плагины
Голые SourceMod-плагины без прослойки MetaMod:Source не заработают — MetaMod цепляет SourceMod к движку. Ставится это в основную папку мода left4dead2/:
- Скачай актуальные архивы MetaMod:Source и SourceMod с их официальных страниц (AlliedModders) — версии под Linux, если сервер на Linux.
- Распакуй содержимое обоих архивов прямо в
left4dead2/addons/— папкиmetamod,sourcemodи файлmetamod.vdfокажутся рядом. - Открой
left4dead2/gameinfo.txtи убедись, что в секцииSearchPathsесть строка:
Game left4dead2/addons/metamod
Без неё движок вообще не увидит MetaMod, и все плагины на нём будут молча не грузиться — сервер при этом продолжит работать как обычный ванильный, без единой ошибки в консоли, что и сбивает с толку новичков.
- Перезапусти сервер и проверь через RCON или прямо в серверной консоли:
meta version
sm version
Обе команды должны вернуть номера версий, а не «unknown command» — если команда не отвечает, разбор надо начинать заново с пункта про gameinfo.txt.
Важное правило совместимости: ставь MetaMod:Source и SourceMod одной актуальной парой релизов и не смешивай старую версию одного с новой версией другого. Рассинхрон версий MM:S/SM — самая частая причина падения сервера именно в момент смены карты, а не при старте (подробнее в статье про краш плагина или карты на L4D2).
Поднять сервер Left 4 Dead 2 за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверУстановка SourceMod-плагинов
Когда MetaMod и SourceMod на месте, сами плагины кладутся точечно:
- Файл плагина (
.smx) — вleft4dead2/addons/sourcemod/plugins/. - Конфиг плагина, если есть (
.cfg) — вleft4dead2/addons/sourcemod/configs/. - Переводы фраз, если плагин их использует — в
left4dead2/addons/sourcemod/translations/.
Часть плагинов раздаётся исходником (.sp), а не скомпилированным .smx — тогда потребуется компилятор spcomp, который идёт в комплекте SourceMod, либо готовая сборка от автора. Компилировать вручную стоит только если нет готового .smx под нужную версию SourceMod — большинство популярных плагинов уже собраны и лежат на AlliedModders прямо в архиве.
После перезапуска сервера проверяй загрузку через RCON:
sm plugins list
meta list
Первая команда покажет статус каждого плагина — running, paused или ошибку загрузки. Плагин с ошибкой — первый кандидат на проблему, даже если сервер формально не упал: часть плагинов при ошибке просто отключается сама, а не роняет процесс.
Типичная ошибка новичков — положить плагин прямо в sourcemod/plugins/, а не в sourcemod/plugins/disabled/, если он ставился ради теста и должен быть выключен. SourceMod по умолчанию грузит всё, что лежит в корне plugins/, и не трогает содержимое disabled/ — этим удобно пользоваться, чтобы временно отключить плагин, не удаляя файл.
Кастомные кампании: вручную и через Steam Workshop
Кампании и отдельные карты ставятся как VPK-архивы в ту же папку:
left4dead2/addons/<название_кампании>.vpk
Если качаешь кампанию вручную с сайтов вроде L4DMaps — просто копируешь готовый VPK в addons/ и рестартуешь сервер, changelevel на карту кампании подхватит её сразу.
Для Workshop-контента у дедикейтед-сервера L4D2 нет встроенной автозагрузки коллекции при старте (в отличие, например, от Garry's Mod, где Workshop-коллекция подключается одной строкой) — скачивать нужно явно через SteamCMD, используя appid самой игры (550), а не сервера:
./steamcmd.sh +login anonymous +workshop_download_item 550 <published_file_id> +quit
Скачанный контент окажется в steamapps/workshop/content/550/<id>/, откуда VPK нужно перенести (или симлинком подключить) в left4dead2/addons/. Для целой коллекции проще прописать в server.cfg или в строке запуска:
host_workshop_collection <id_коллекции>
и дать серверу подтянуть всё содержимое коллекции при старте — это удобнее ручной загрузки по одному айтему, если кампаний много.
Частая ошибка — обновление кампании автором в Workshop. Сервер с host_workshop_collection подтягивает новую версию сам при следующем рестарте, а вот у игроков в Steam-кэше может остаться старая, пока Steam не досмотрит подписку — тогда часть игроков виснет именно на загрузке карты, хотя остальные заходят нормально. Это не краш сервера, а версионный рассинхрон конкретных клиентов — лечится переподпиской на Workshop-предмет со стороны игрока.
Синхронизация версий клиент-сервер: sv_pure и sv_consistency
Source-движок следит, чтобы у клиента и сервера были одинаковые (или хотя бы допустимые) версии игровых файлов — карт, моделей, звуков. За это отвечают два параметра в server.cfg:
sv_consistency 1
sv_pure 1
sv_consistency 1требует точного совпадения определённого набора файлов (в основном моделей и материалов) между клиентом и сервером — без этого при коннекте клиент может получить отказ или краш при загрузке карты, если версия контента отличается.sv_pureрегулирует, какие клиентские файлы разрешено подменять.sv_pure 0— без ограничений (годится только для приватных тестов, открывает дорогу читерским текстурам).sv_pure 1— файлы должны совпадать с серверными, если сервер явно не разрешил исключение через whitelist.sv_pure 2— самый строгий режим, разрешены только файлы, идущие в оригинальной поставке игры и явно подписанные сервером; лишний кастомный контент кампании приsv_pure 2без корректного whitelist может резаться как «нечестный», что выглядит как обычная ошибка загрузки карты.
Для сервера с кастомными кампаниями и модами стоит держать sv_pure 1 — это разумный баланс между защитой от читеров и совместимостью с community-контентом. Если после установки новой кампании игроки жалуются на странные ошибки при коннекте именно к этой карте — временно понижай до sv_pure 0 как диагностический шаг, чтобы отсечь версию «дело в консистентности», а не гадать вслепую.
Отдельно стоит проверять журнал версий самого движка: крупные технические патчи Valve иногда меняют формат файлов, и старые кампании, написанные под прежнюю версию SDK, могут начать давать сбои именно на этапе проверки консистентности — обычно чинится свежей версией карты от автора.
FastDL: раздача карт и контента без Steam Workshop
Если кампании ставишь вручную (не через Workshop), игрокам всё равно нужно как-то докачать тяжёлые файлы карты при коннекте — для этого в Source есть FastDL, отдельный HTTP-сервер с картами и контентом, с которого клиент качает файлы напрямую, а не через игровой UDP-канал (который для этого не предназначен и работает медленно).
В server.cfg прописывается адрес:
sv_allowdownload 1
sv_allowupload 0
sv_downloadurl "https://fastdl.твой-домен.ru/l4d2/"
sv_allowupload 0 отключает загрузку файлов от клиента на сервер (спреи и подобное) — для игрового сервера это не нужно и только тратит ресурсы.
На веб-сервере структура папок должна зеркалить структуру мода:
fastdl/l4d2/
├── maps/
│ └── c6m1_riverbank_custom.bsp.bz2
├── materials/
│ └── models/props_custom/…
├── models/
│ └── props_custom/…
└── sound/
└── custom/…
Карту и тяжёлые ассеты стоит паковать в .bz2 — движок Source умеет докачивать сжатые файлы напрямую и сам их распаковывать на клиенте, экономя трафик:
bzip2 -k left4dead2/maps/c6m1_riverbank_custom.bsp
На стороне nginx или Apache важно не забыть корректный Content-Type для .bz2 (application/octet-stream подходит) и разрешить листинг или хотя бы прямой доступ по прямому пути — если веб-сервер отдаёт 403 или редиректит на HTML-страницу вместо файла, клиент получит битую докачку, которая выглядит как «карта не грузится», хотя причина чисто в раздаче.
Типичные ошибки с FastDL:
- Забыли синхронизировать содержимое. Файл в
addons/на сервере обновили, а на FastDL — нет. Игроки качают старую версию, получают рассинхрон с sv_consistency. - HTTPS без валидного сертификата. Часть клиентов Source откажется докачивать с самоподписанного сертификата — используй нормальный TLS (Let's Encrypt подходит) или обычный HTTP, если приемлемо для твоей аудитории.
- Не тот путь в архиве. Структура на FastDL должна повторять структуру
left4dead2/, включая подпапки — просто свалить все файлы в одну директорию не сработает, клиент ищет по относительному пути.
Поднять сервер Left 4 Dead 2 за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Нужен ли FastDL, если все кампании ставятся только через Steam Workshop?
Нет, Workshop-контент клиент скачивает через Steam напрямую, отдельный веб-сервер для этого не нужен. FastDL актуален именно для VPK, установленных вручную в addons/.
Можно ли ставить SourceMod-плагины без перезапуска сервера?
Частично — команда sm plugins reload_all подхватит изменения в уже загруженных плагинах и новые файлы в plugins/, но при проблемах с MetaMod или самой прослойкой SourceMod полный рестарт надёжнее и экономит время на диагностике.
Сервер не ругается на плагин, но и не работает — в чём дело?
Проверь sm plugins list и лог addons/sourcemod/logs/errors_YYYYMMDD.log — часть плагинов при конфликте зависимостей просто не активируется, не выводя ошибку в основную консоль.
Обязательно ли ставить одинаковую версию SourceMod у всех плагинов сразу?
Нет, SourceMod сам по себе обратно совместим в пределах актуальной ветки — важно синхронизировать именно пару MetaMod/SourceMod между собой, а не гнаться за версией под каждый отдельный плагин.
Что делать, если кастомная кампания весит несколько гигабайт и FastDL упирается в канал сервера?
Вынеси FastDL на отдельный хостинг или CDN, не привязанный к каналу игрового сервера — раздача статики не требует тех же ресурсов, что сама игра, и разделение снимает нагрузку с основного канала при пиковом коннекте игроков.