GMod: коллекция Workshop и автозагрузка аддонов
Создание Steam Workshop Collection, привязка к серверу, resource.AddWorkshop, FastDL vs Workshop, обновление и оптимизация размера коллекции.
Кратко: Создайте публичную Steam Workshop Collection, добавьте её ID в параметр
+host_workshop_collectionв строке запуска srcds и установите модульgmsv_workshopdl- аддоны начнут автоматически скачиваться на сервер и раздаваться игрокам. Для отдельных аддонов без коллекции используйтеresource.AddWorkshop()в Lua.
GMod: коллекция Workshop и автозагрузка аддонов
Steam Workshop Collection - это главный инструмент управления аддонами на сервере Garry’s Mod. Вместо того чтобы вручную копировать GMA-файлы и синхронизировать их между сервером и клиентами, вы один раз собираете список нужных аддонов в Steam, привязываете коллекцию к серверу одной строчкой - и дальше всё работает автоматически: аддоны скачиваются при старте, обновляются при рестарте и доставляются игрокам через Steam CDN. В этом гайде - полная цепочка от создания коллекции до тонкой настройки с resource.AddWorkshop, управления размером контента и сравнения Workshop с FastDL.
Pterohost - игровой хостинг с NVMe SSD, DDoS-защитой и круглосуточной поддержкой для серверов Garry’s Mod. Промокод 4START даёт -20% на первый заказ. Заказать Garry’s Mod сервер
Как устроена система Workshop в GMod
Garry’s Mod использует Steam Workshop не только как библиотеку аддонов, но и как CDN для раздачи контента клиентам. Когда игрок подключается к серверу, происходит следующее:
- Сервер отправляет клиенту список необходимых Workshop-аддонов (через встроенный механизм или
resource.AddWorkshop). - Клиент проверяет, подписан ли он уже на эти аддоны в Steam Workshop.
- Для отсутствующих аддонов Steam автоматически начинает загрузку GMA-файла с ближайшей CDN-ноды.
- После скачивания аддон монтируется в игру и игрок получает все файлы: модели, текстуры, Lua-скрипты, звуки.
Эта схема работает полностью через Steam - ваш сервер не тратит свой канал на раздачу аддонов клиентам. Единственное условие: аддоны должны быть опубликованы в Steam Workshop с открытым доступом.
Формат GMA и где хранятся файлы
GMA (Garry’s Mod Addon) - это архивный формат, в котором Steam Workshop хранит аддоны. На сервере все загруженные Workshop-аддоны сохраняются в:
garrysmod/cache/workshop/
Каждый аддон - отдельный файл вида <addon_id>.gma. Здесь же лежат .bin-файлы с метаданными версий. Не удаляйте эту папку вручную без необходимости - сервер придётся переждать полную повторную загрузку всей коллекции.
Создание Steam Workshop Collection
Коллекция создаётся один раз через браузер и потом легко редактируется. Порядок действий:
- Войдите в Steam-аккаунт, под которым зарегистрирован сервер (или любой другой - коллекция может быть от любого аккаунта).
- Перейдите на страницу Workshop Garry’s Mod:
https://steamcommunity.com/app/4000/workshop/ - Нажмите кнопку Browse -> Collections -> Create a Collection.
- Введите название коллекции (например: “MyServer - Main Addons 2026”).
- Выставьте видимость Public - это обязательно, иначе клиенты не смогут скачать аддоны.
- Нажмите Save and continue to add items.
Теперь добавляйте аддоны: ищите их через поиск, нажимайте Add to Collection на странице каждого аддона. Коллекцию можно редактировать в любой момент - добавлять и удалять аддоны, изменения вступают в силу после рестарта сервера.
Как получить ID коллекции
ID коллекции - это числовой идентификатор в URL страницы. Например:
https://steamcommunity.com/sharedfiles/filedetails/?id=3210567890
^^^^^^^^^^
это и есть ID
Скопируйте это число - оно понадобится в строке запуска сервера.
Подключение коллекции к серверу
Steam API Key
Для работы Workshop на сервере нужен Steam Web API Key. Получить его бесплатно:
- Перейдите на
https://steamcommunity.com/dev/apikey - Укажите домен сервера (можно любой, например
localhost). - Скопируйте ключ - строка вида
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Строка запуска srcds
Откройте скрипт запуска сервера (обычно start.sh или поле в панели управления) и добавьте два параметра:
./srcds_run \
-game garrysmod \
-console \
-port 27015 \
+map gm_construct \
+maxplayers 16 \
+host_workshop_collection 3210567890 \
-authkey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Параметры:
+host_workshop_collection <ID>- ID вашей коллекции.-authkey <KEY>- Steam Web API Key для авторизации запросов к Steam CDN.
После первого запуска с этими параметрами сервер начнёт скачивать все GMA-файлы коллекции. Для большой коллекции (1-3 ГБ) это займёт 5-20 минут в зависимости от скорости канала.
Установка модуля gmsv_workshopdl
Чтобы сервер раздавал список аддонов подключающимся игрокам, нужен бинарный модуль gmsv_workshopdl. Без него аддоны загружаются на сервер, но клиенты их не получают автоматически.
Скачайте модуль с GitHub (репозиторий nicklvsa/gmsv_workshopdl или аналоги, актуальные в 2026):
# Папка для модулей
mkdir -p garrysmod/lua/bin
# Копируем нужный файл (Linux x86-64)
cp gmsv_workshopdl_linux64.dll garrysmod/lua/bin/
Убедитесь, что имя файла точно совпадает: gmsv_workshopdl_linux64.dll для Linux 64-bit, gmsv_workshopdl_win64.dll для Windows. После перезапуска сервера модуль загружается автоматически.
resource.AddWorkshop - точечная загрузка аддонов
Функция resource.AddWorkshop в Lua позволяет принудительно подписать клиента на конкретный аддон Workshop при подключении - без коллекции и без ручного добавления в список. Это удобно для:
- аддонов, которые не включены в основную коллекцию (временные ивенты, тестовые моды);
- Lua-скриптов, которые явно требуют клиентских файлов Workshop.
Синтаксис
-- garrysmod/lua/autorun/server/workshop_resources.lua
resource.AddWorkshop("123456789") -- ULX Admin
resource.AddWorkshop("987654321") -- DarkRP
resource.AddWorkshop("557962280") -- DarkRP Modification
Аргумент - строка с числовым ID аддона из URL Steam Workshop. Файл должен лежать в autorun/server/ и выполняться только на сервере.
resource.AddWorkshop vs host_workshop_collection
| Параметр | host_workshop_collection | resource.AddWorkshop |
|---|---|---|
| Как задаётся | Параметр запуска srcds | Lua-файл на сервере |
| Гибкость | Список из коллекции Steam | Любой аддон по ID |
| Обновление | При рестарте | При рестарте |
| Нужен gmsv_workshopdl | Да | Да |
| Несколько источников | Только одна коллекция | Неограниченно |
На практике лучший подход - использовать оба метода вместе: основная коллекция через +host_workshop_collection и дополнительные аддоны через resource.AddWorkshop в Lua. Это даёт максимальную гибкость.
Workshop vs FastDL: когда что использовать
Это два разных инструмента для доставки контента, и они не взаимоисключают друг друга.
| Критерий | Workshop | FastDL |
|---|---|---|
| Тип контента | GMA-аддоны (любые файлы внутри) | Карты, текстуры, звуки, модели отдельно |
| Публикация | Только публичные аддоны | Любые файлы, включая кастомные |
| CDN | Steam CDN (бесплатно) | Ваш сервер или Cloudflare |
| Настройка | Минимальная (ID коллекции) | Требует nginx/apache и bzip2 |
| Авторские права | Нарушения видны публично | Менее заметно, но нарушать всё равно нельзя |
| Лимит файла | Нет (практически) | 64 МБ (net_maxfilesize) |
| Скорость для клиента | Зависит от Steam CDN (обычно высокая) | Зависит от вашего сервера |
Когда использовать только Workshop: сервер с типовыми публичными аддонами (DarkRP, ULX, PAC3, WAC Aircraft). Минимальная настройка, автоматическое обновление, CDN Steam берёт нагрузку на себя.
Когда нужен FastDL дополнительно: кастомные карты (не опубликованные в Workshop), текстуры-паки для RP (скины игроков, текстуры зданий), файлы, которые нельзя публиковать в Workshop. FastDL раздаёт их параллельно с Workshop.
Типичная связка для DarkRP/TTT: коллекция Workshop - для всех аддонов, FastDL - только для кастомных карт. Это оптимально по затратам и скорости.
Структура нескольких коллекций
Один сервер может использовать только одну +host_workshop_collection, но через resource.AddWorkshop - неограниченное число аддонов. Если у вас несколько режимов или сезонный контент, логика такая:
-- garrysmod/lua/autorun/server/workshop_resources.lua
-- Основной контент
resource.AddWorkshop("123456789") -- основная карта
resource.AddWorkshop("234567890") -- Sound Pack
-- Сезонный ивент (включить/выключить меняя эту строку)
-- resource.AddWorkshop("345678901") -- Halloween Pack
-- Опциональный контент только для конкретного режима
if GetConVar("gmod_gamemode"):GetString() == "darkrp" then
resource.AddWorkshop("456789012") -- DarkRP jobs pack
end
Такой файл проще поддерживать, чем держать несколько коллекций вручную.
Управление обновлениями аддонов
При каждом старте сервера srcds проверяет версию каждого GMA-файла в кэше и сравнивает с данными Steam. Если автор аддона выпустил обновление - сервер скачает новую версию автоматически.
Это поведение иногда мешает: обновление может сломать совместимость или добавить нежелательный контент. Чтобы заморозить версию аддона на конкретной, нужно:
- Скачать актуальный GMA вручную.
- Переименовать его и положить в
garrysmod/addons/(не вcache/workshop/). - Убрать этот аддон из коллекции.
- Добавить его на FastDL для раздачи клиентам.
Это ручная работа, оправданная только для критичных аддонов (например, кастомная сборка DarkRP, которую вы модифицировали).
Принудительное обновление коллекции
Если нужно обновить аддоны немедленно, не дожидаясь рестарта:
# В консоли сервера
workshop_update_collection
Или из Lua (через rcon):
-- Только для администраторов
RunConsoleCommand("workshop_update_collection")
Оптимизация размера коллекции
Большая коллекция замедляет первое подключение новых игроков. Несколько практических правил:
Отделяйте обязательный контент от опционального. Карты и скины - не обязательны при первом входе, аддоны геймплея - обязательны. Сделайте две коллекции: одну через +host_workshop_collection (обязательная), вторую через resource.AddWorkshop (постепенная загрузка).
Удаляйте неиспользуемые аддоны. Аддон в коллекции скачивается всеми игроками, даже если он нужен только одному администратору. SWEPs для персонала не должны быть в публичной коллекции.
Проверяйте размер GMA до добавления. На странице аддона в Workshop указан размер. Аддон в 200-500 МБ - это много. Ищите более компактные альтернативы или переносите на FastDL.
Инструмент для анализа коллекции:
# Посмотреть суммарный размер кэша Workshop на сервере
du -sh garrysmod/cache/workshop/
du -s garrysmod/cache/workshop/*.gma | sort -n | tail -20
Последняя команда покажет 20 самых тяжёлых аддонов - кандидаты на проверку или замену.
Диагностика типичных проблем
Аддоны не скачиваются на сервер
Проверьте в консоли сервера наличие строк вида:
Downloading workshop item 123456789 ...
Workshop item 123456789 - installed
Если их нет - убедитесь, что -authkey задан и ключ актуален. Ключ протухает редко, но при пересоздании приложения на steamcommunity.com/dev/apikey старый ключ перестаёт работать.
Клиенты не получают аддоны при подключении
Проверьте, что gmsv_workshopdl_linux64.dll (или .dll для Windows) находится в garrysmod/lua/bin/. В консоли при загрузке должна быть строка:
[Workshop DL] Module loaded.
Если строки нет - файл не найден или не совпадает разрядность (32 vs 64 bit).
Коллекция загружается, но некоторые аддоны пропущены
Steam Workshop иногда временно недоступен для конкретных аддонов или аддон удалён автором. Проверьте страницу аддона вручную. Если аддон удалён из Workshop - придётся использовать GMA-файл из garrysmod/cache/workshop/ и перенести его в FastDL.
Ошибка “Invalid API Key”
Ключ в -authkey неверный или отозван. Сгенерируйте новый на https://steamcommunity.com/dev/apikey и обновите строку запуска.
Связанные материалы
Подробнее об установке отдельных аддонов и работе с GMA-файлами - в статье Как установить аддоны Garry’s Mod. Если аддоны нужно раздавать без Workshop (кастомный контент, приватные текстуры), изучите настройку FastDL. Для первоначальной сборки сервера с нуля - полное руководство по сборке GMod-сервера.
Заключение
Workshop Collection - самый эффективный способ управлять аддонами публичного GMod-сервера. Достаточно создать публичную коллекцию в Steam, прописать её ID в параметр +host_workshop_collection, установить gmsv_workshopdl - и аддоны будут обновляться и раздаваться автоматически через Steam CDN. Для тонкой настройки используйте resource.AddWorkshop в Lua: он позволяет подключать аддоны динамически, зависимо от режима игры или роли игрока. Контент, который нельзя опубликовать в Workshop (кастомные карты, приватные текстуры), раздавайте через FastDL - эти два инструмента прекрасно работают вместе. Держите размер коллекции до 2 ГБ, регулярно убирайте неиспользуемые аддоны - и первое подключение нового игрока будет комфортным.
Pterohost - хостинг GMod-серверов с быстрыми NVMe-дисками для Workshop-кэша, защитой от DDoS и поддержкой 24/7. Промокод 4START даёт -20% на первый заказ. Заказать Garry’s Mod сервер