MAATRIX GAMES / Блог / Insurgency: установка модов на сервер

Insurgency: установка модов на сервер

MAATRIX GAMES

Ванильный набор карт и оружия в 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 больше нет в списке подписки.