MAATRIX GAMES / Блог / Установка аддонов из Steam Workshop

Установка аддонов из Steam Workshop

MAATRIX GAMES

Если ты уже поднял GMod-сервер и теперь хочешь закинуть на него сотню аддонов — не пытайся тащить их вручную через FTP по одному, это путь боли и рассинхрона с клиентами. Правильный способ — собрать Workshop-коллекцию и подключить её одной строкой в конфиге, чтобы сервер и игроки получали одинаковый набор контента автоматически. Ниже — как это сделать без граблей, на которые обычно наступают в первый раз. Если сервер ещё не установлен, сначала загляни в статью про базовую установку GMod-сервера — здесь разберём только аддоны.

Почему коллекция, а не ручная установка аддонов

Технически аддон можно закинуть прямо в garrysmod/addons/ как папку с содержимым — движок его подхватит при старте. Так делают, когда аддон один и он не из Workshop (например, самописный или скачанный с GitHub). Но у ручного способа два больших минуса.

Во-первых, синхронизация с клиентами. Если аддон лежит у тебя на сервере локально, но не подключён через Workshop, у игрока его не будет — а без него он либо увидит ошибки Lua в консоли, либо вовсе не сможет зайти, если аддон критичен (например, кастомная карта или модель оружия). Игроку придётся вручную искать и подписываться на нужный контент, а часть аудитории просто не станет этим заниматься и уйдёт на другой сервер.

Во-вторых, обновления. Автор аддона в Workshop может выпустить патч — если аддон подключён через коллекцию, сервер и клиенты подхватят новую версию автоматически при следующем старте/заходе. Ручная копия так и останется висеть на старой версии, пока ты не обновишь её вручную.

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

Собираем коллекцию в Steam Workshop

Коллекция создаётся не в игре, а прямо на сайте Steam — это просто список ссылок на нужные тебе Workshop-предметы.

  1. Заходи на steamcommunity.com/app/4000/workshop (это раздел Workshop именно для Garry's Mod, app id 4000) и ищи нужные аддоны — карты, модели, скрипты, гейммоды.
  2. На странице любого предмета Workshop есть кнопка «Добавить в коллекцию» — так удобно собирать список по одному, открывая нужные страницы.
  3. Либо сразу иди в свой профиль → вкладка «Мастерская» → «Коллекции» → «Создать коллекцию», и добавляй предметы туда через поиск внутри коллекции.
  4. Обязательно проверь видимость коллекции — она должна быть публичной или хотя бы «доступной по ссылке» (unlisted). Приватная коллекция сервер скачать не сможет — авторизации -authkey для этого недостаточно, сама коллекция должна быть открыта.

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

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

Поднять сервер Garry's Mod за пару минут

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

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

Получаем ID коллекции и Steam API-ключ

После создания коллекции открой её страницу — в адресной строке будет что-то вроде:

https://steamcommunity.com/sharedfiles/filedetails/?id=3123456789

Число после id= — это и есть ID коллекции, он понадобится в конфиге.

С 2018 года Valve требует авторизацию для загрузки Workshop-контента на дедик — без ключа сервер откажется скачивать коллекцию с ошибкой доступа. Получить ключ можно бесплатно на steamcommunity.com/dev/apikey, привязав его к любому Steam-аккаунту (не обязательно тому, что владеет игрой). Домен при регистрации ключа можно указать любой, для игрового сервера это поле не критично.

Ключ секретный — не публикуй его в открытых конфигах на GitHub и не давай никому: с ним можно от твоего имени грузить контент через Steam API.

Подключаем коллекцию в server.cfg

Есть два варианта подключения Workshop-контента: host_workshop_addon для одного конкретного предмета и host_workshop_collection для целой коллекции. Для большого набора аддонов почти всегда нужен второй.

КомандаЧто делаетКогда использовать
host_workshop_addon <id>Подключает один Workshop-предметОдин-два обязательных аддона, без коллекции
host_workshop_collection <id>Подключает всю коллекцию целикомОсновной способ для набора из десятков аддонов

Команда идёт не в server.cfg, а в параметры запуска сервера — она читается на старте до загрузки основного конфига. Пропиши в start.sh (или в юните systemd, если уже настроил автозапуск):

./srcds_run -game garrysmod -console -port 27015 \
  +gamemode sandbox +map gm_construct +maxplayers 16 \
  +host_workshop_collection 3123456789 \
  -authkey ТВОЙ_API_КЛЮЧ \
  +exec server.cfg

Если у тебя уже настроен systemd-юнит для автозапуска, добавь +host_workshop_collection и -authkey в строку ExecStart — просто отредактируй файл юнита и сделай sudo systemctl daemon-reload перед перезапуском.

sv_downloadurl при этом можно не трогать — Workshop работает независимо от него, эта переменная актуальна для старого способа раздачи файлов через HTTP-сервер, который для Workshop-контента не используется.

Что происходит при старте сервера

Сервер обращается к Steam API, получает список предметов коллекции по её ID, сверяет контрольные суммы с тем, что уже лежит локально в garrysmod/cache/workshop/, и докачивает недостающее или обновлённое. Готовые аддоны монтируются в виртуальную файловую систему игры — физически они остаются в кэше как архивы, а не распаковываются в garrysmod/addons/, поэтому не пытайся искать их там как обычные папки.

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

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

Клиенты подгружают аддоны автоматически

Здесь у Source-движка (на нём же работают Counter-Strike 2 и другие игры со схожим механизмом Workshop) есть заметное преимущество перед некоторыми другими проектами: игроку не нужно вручную подписываться на каждый аддон или скачивать архив с файлообменника. Как только клиент подключается к серверу с настроенной Workshop-коллекцией, Steam автоматически подписывает его на все предметы из этой коллекции и докачивает недостающее — прямо во время экрана загрузки карты.

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

Обратная сторона: игрок реально подписывается на все эти предметы в своём профиле Steam, и они остаются в списке подписок даже после того, как он покинул сервер (пока не отпишется вручную). Для одного захода на сервер с большой коллекцией это не проблема, но если игрок часто бегает по разным GMod-серверам с разными наборами аддонов — со временем в подписках накапливается изрядный мусор. Это особенность механизма Workshop, а не что-то, что можно настроить на стороне сервера.

Проверка: аддон реально загрузился?

Самый надёжный способ — смотреть консоль сервера при старте, там видно каждый шаг:

Requesting workshop information...
Downloading workshop item 123456789
Downloading workshop item 234567890
...
Mounting XX workshop addons

Если по конкретному ID в логе видна ошибка вида Workshop item XXXXXX failed to download — чаще всего причина одна из трёх: коллекция или сам предмет стали приватными на стороне автора, истёк/неверный -authkey, либо у предмета отозвана публикация (автор удалил аддон из Workshop). Проверить руками просто — открой ссылку на предмет steamcommunity.com/sharedfiles/filedetails/?id=<ID> в браузере: если страница недоступна или помечена как приватная, дело в этом.

Полезно сверить и число: сколько предметов реально в коллекции на сайте Steam против строки Mounting XX workshop addons в логе — если цифры расходятся, значит часть контента не подгрузилась, и стоит прокрутить лог выше в поисках ошибок по конкретным ID.

Со стороны игрока проверка ещё проще — если после захода на карту он видит на месте моделей розово-чёрные текстуры ошибок или объекты некорректной формы (заглушки-кубы), почти наверняка недогрузился какой-то аддон с ресурсами (модели/текстуры), а не тот, что отвечает за геймплейную логику.

Поднять сервер Garry's Mod за пару минут

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

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

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

Можно ли подключить сразу несколько коллекций одной командой запуска?

Нет, host_workshop_collection принимает только один ID за раз. Если нужно объединить контент из разных источников — либо создай новую коллекцию на Steam, куда добавишь все нужные предметы из разных исходных коллекций, либо комбинируй с несколькими host_workshop_addon для отдельных предметов.

Обязательно ли делать коллекцию публичной, или подойдёт «доступна по ссылке»?

Подойдут оба варианта — публичная и unlisted (доступная по ссылке). Важно, чтобы это не была приватная коллекция, доступная только тебе — такую сервер скачать не сможет вне зависимости от -authkey.

Что будет, если у сервера и клиента не совпадёт версия аддона?

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

Сервер жалуется на «Host validation failed» при старте — что не так?

Почти всегда истёкший или неправильно скопированный -authkey. Перепроверь ключ на странице steamcommunity.com/dev/apikey и убедись, что скопировал его целиком без пробелов в строку запуска.

Нужен ли -authkey, если у меня в коллекции всего один-два аддона?

Да, ключ обязателен для любой автоматической загрузки через Workshop независимо от размера коллекции — без него сервер вообще не сможет обратиться к Steam API за контентом.