Insurgency: установка модов на сервер
Ванильный набор карт и оружия в Insurgency приедается быстро — рано или поздно хочется свежих карт под Checkpoint, других скинов оружия или хотя бы разбавить ротацию тем, что накидало комьюнити. У Insurgency (2014, Source engine) для этого есть встроенный Steam Workshop, и тащить архивы по FTP руками не нужно. Разберём по шагам: как включить воркшоп на сервере, подписаться на моды через subscribed_file_ids.txt, вписать карты в ротацию и не словить рассинхрон версий с игроками — со всеми граблями, на которые обычно наступают в первый раз.
Содержание
Что вообще лежит в Workshop у Insurgency
У Insurgency в Steam Workshop два основных типа контента, и это стоит разделять сразу, потому что подключаются они одинаково, а ведут себя по-разному:
- Кастомные карты — основная масса контента, от переработок официальных локаций до полностью самодельных под Checkpoint, Firefight или Skirmish.
- VPK-моды — реskины оружия, звуковые паки, кастомные модели персонажей и прочий контент, упакованный в
.vpk-архив. Полноценных геймплейных модов уровня скриптов (как в Garry's Mod с его Lua) у Insurgency нет — движок этого не поддерживает, так что не гонись за несуществующими "гейммодами" в Workshop, там их не будет.
Смотреть каталог удобно прямо в браузере: steamcommunity.com/workshop/browse?appid=222880. Обрати внимание — это app ID именно клиентской игры Insurgency, а не выделенного сервера (у него отдельный App ID 237410, про который подробно в статье про базовую установку сервера Insurgency). Путаница между этими двумя ID — частая причина, почему новички не могут найти нужный раздел мастерской.
Второй нюанс, специфичный именно для этой игры: после обновления системы воркшопа 26 июля 2015 года часть старых ("legacy") предметов осталась несовместима с новым способом монтирования контента. По опыту комьюнити такие legacy-моды либо вообще не подгружаются на Linux-сервере, либо в отдельных случаях подвешивают процесс на Windows. Если предмет в Workshop не обновлялся с 2014-2015 года и явно не помечен автором как совместимый с текущей системой — не рискуй, поищи альтернативу посвежее.
Включаем поддержку Workshop на сервере
По умолчанию сервер Insurgency воркшоп не трогает — поддержку нужно явно включить одним из двух параметров запуска (в конфигурациях комьюнити встречаются оба, работают одинаково):
./srcds_run -game insurgency -console -port 27015 \
+maxplayers 16 -workshop \
+sv_workshop_enabled 1 \
+sv_playlist custom \
+exec server.cfg
-workshop и +sv_workshop_enabled 1 можно указывать вместе или использовать любой один — оба варианта встречаются в рабочих конфигурациях, разночтений в поведении по факту не замечено. А вот sv_playlist custom пропускать не стоит: без неё сервер тянет официальные плейлисты Valve/New World Interactive и игнорирует твой собственный набор карт, вне зависимости от того, что прописано в mapcycle.
Если сервер уже поднят как systemd-юнит (см. настройку автозапуска в статье про установку сервера Insurgency) — просто добавь эти параметры в строку ExecStart и перезагрузи юнит:
sudo systemctl daemon-reload
sudo systemctl restart insurgency
Поднять сервер Insurgency за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверПодписка на моды: subscribed_file_ids.txt и коллекции
Основной способ подписки — текстовый файл subscribed_file_ids.txt в папке gamedir, то есть ~/insurgency-server/insurgency/subscribed_file_ids.txt. Если файла нет — создай сам, по одному ID предмета Workshop на строку, без лишних пробелов и пустых строк в конце.
ID предмета берётся из адресной строки на странице Workshop:
https://steamcommunity.com/sharedfiles/filedetails/?id=335736133
Число после id= — то, что идёт в файл. После сохранения файла перезапусти сервер: скачивание начнётся автоматически при старте, до появления сервера в списке онлайн.
Помимо одиночных ID файл принимает и ID целой коллекции — с мая 2016 года сервер умеет разворачивать коллекцию целиком по одной строке. На практике с коллекциями есть нюанс:
| Способ | Что нужно | Надёжность по опыту комьюнити |
|---|---|---|
| Одиночный ID предмета | Просто ID в subscribed_file_ids.txt | Стабильно, основной рабочий способ |
| ID коллекции | ID коллекции + -authkey в параметрах запуска | Часть админов сообщает о сбоях загрузки; работает не всегда предсказуемо |
Если планируешь много контента — надёжнее выписать ID каждого нужного предмета отдельными строками, чем полагаться на одну коллекцию. Для коллекции -authkey берётся бесплатно на steamcommunity.com/dev/apikey и добавляется в команду запуска: -authkey ТВОЙ_КЛЮЧ. Ключ секретный — не публикуй его в открытых конфигах.
Зависимости подтягиваются сами: если у мода есть обязательный вспомогательный предмет (например, общий ресурс-пак), достаточно подписаться на ID самого мода — комьюнити подтверждает, что связанные зависимости качаются автоматически вместе с ним.
Скачанный контент физически лежит не в insurgency/maps/, а отдельно — в ~/insurgency-server/steamapps/workshop/content/222880/<ID>/, по папке на каждый предмет. Искать файлы напрямую там смысла нет, движок монтирует их сам при старте.
Прописываем воркшоп-карты в mapcycle
Тут главная засада новичков: воркшоп-карта прописывается в mapcycle не так, как обычная. Вместо голого имени карты нужен полный путь с ID предмета:
workshop/335736133/badel_coop checkpoint
Формат — workshop/<ID_предмета>/<имя_карты> <режим>, а не просто badel_coop, как для карт из штатной поставки. Если написать только имя карты без префикса workshop/ID/ — сервер её не найдёт и молча пропустит при ротации.
Прежде чем закидывать карту в общий mapcycle, стоит проверить её отдельно, указав как стартовую карту сервера:
+map "workshop/335736133/badel_coop.bsp"
Если сервер поднялся и карта загрузилась — можно смело добавлять строку в основной файл ротации (например, mapcycle_workshop.txt, подключённый через mapcyclefile, как описано в базовой статье про настройку server.cfg и mapcycle).
Известная особенность именно воркшоп-mapcycle: движок иногда сам переупорядочивает или перезаписывает файл при следующем запуске, теряя ручную сортировку карт. Рабочий обход, который используют многие админы — сделать файл доступным только для чтения после того, как порядок карт выставлен так, как нужно:
chmod 444 insurgency/cfg/mapcycle_workshop.txt
Не забудь снять защиту (chmod 644) перед следующим редактированием вручную.
Синхронизация версий клиента и сервера
С воркшоп-контентом Source-движок берёт синхронизацию версий на себя, но не полностью автоматически, как, скажем, в Garry's Mod с коллекциями — здесь механизм завязан на те же ID из subscribed_file_ids.txt. При заходе на сервер с воркшоп-картой клиент Steam сам докачивает нужный предмет по ID прямо во время загрузки, если ещё не подписан на него.
Что стоит держать в голове:
- Обновление автора. Если автор карты или скина выложил новую версию, и сервер, и клиенты подтягивают актуальную ревизию при следующей загрузке — вручную обновлять
subscribed_file_ids.txtне нужно, ID остаётся тем же. - VPK-моды и
sv_pure. Реskины оружия и модели работают через ту же механикуsv_pure, что и обычные кастомные файлы: еслиsv_pure 1не даёт клиенту загрузить контент мода, добавь путь вinsurgency/cfg/pure_server_whitelist.txt— так же, как с самодельными картами, разобранными в статье про краш при плагине или карте. - Linux и
steamclient.so. Отдельная частая причина, почему воркшоп вообще не грузится именно на Linux-сервере — отсутствующая или неправильно слинкованная библиотекаsteamclient.so. Она должна лежать в доступном для процессаsrcdsместе (обычно рядом с установкой SteamCMD или в~/.steam/sdk32/), иначе сервер тихо не сможет обратиться к Steam API за контентом. Подробно про саму установку SteamCMD — в статье про SteamCMD и обновление серверов.
Типичные ошибки и грабли
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| Карты из Workshop не качаются вообще | Не включена поддержка воркшопа | Добавить -workshop или +sv_workshop_enabled 1 в параметры запуска |
| Коллекция не разворачивается | Известная нестабильность коллекций | Перейти на одиночные ID в subscribed_file_ids.txt |
| Карта в mapcycle "not found" при ротации | В строке указано только имя карты без префикса | Прописать полный путь workshop/<ID>/<имя_карты> <режим> |
| Порядок карт в mapcycle сбрасывается | Движок перезаписывает файл при старте | chmod 444 на файл после финальной сортировки |
| Сервер не видит Steam API, воркшоп не грузится (Linux) | Нет или не там лежит steamclient.so | Проверить путь к библиотеке, переустановить SteamCMD при необходимости |
| Игроков выкидывает или не пускает на карту с реskином | Конфликт sv_pure с незапакованным контентом мода | Добавить путь в pure_server_whitelist.txt |
| Сервер падает или зависает после подписки на старый мод | Legacy-предмет Workshop до июля 2015 года | Отписаться, найти актуальную версию мода или альтернативу |
Если сервер после подписки на новый мод начал падать, а не просто не грузить контент — это уже не тема установки, а диагностика краша: метод бисекции плагинов и карт подробно разобран в статье про краш при плагине или карте.
Поднять сервер Insurgency за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Можно ли ставить моды без перезапуска сервера?
Нет, subscribed_file_ids.txt читается на старте, новые ID подхватываются только при следующем запуске процесса. Для смены карты внутри уже загруженного набора рестарт не нужен — только для добавления новых воркшоп-предметов в подписку.
Нужен ли -authkey, если качаю моды по одному ID, а не коллекцией?
Нет, для одиночных предметов из subscribed_file_ids.txt ключ не требуется — он нужен только при использовании ID коллекции.
Почему у части игроков карта не подгружается, хотя у меня всё работает?
Скорее всего у игрока ещё не докачался контент по ID — Steam делает это в момент подключения, и на медленном канале или при большом весе карты процесс может занять заметное время прямо на экране загрузки.
Можно ли одновременно использовать воркшоп-карты и кастомные карты, залитые вручную по FTP?
Да, оба способа работают параллельно и не конфликтуют — просто у ручных карт в mapcycle пишется обычное имя файла, а у воркшоп-карт — полный путь с префиксом workshop/ID/.
Как отписаться от мода, который сломал сервер?
Удали его ID из subscribed_file_ids.txt и перезапусти сервер — сам файл контента в steamapps/workshop/content/222880/<ID>/ при этом можно оставить, движок просто не будет его монтировать, если ID больше нет в списке подписки.