GMod: PAC3 кастомизация на сервере
Установка PAC3 на GMod-сервер, настройка прав игроков, создание костюмов, модерация контента и оптимизация нагрузки в 2026 году.
Кратко: PAC3 устанавливается как обычный Workshop-аддон, права выдаются через ULX или собственный хук, нагрузка регулируется конвар-переменными. Большинство проблем с производительностью решает pac_max_complexity и отключение частиц для обычных игроков.
GMod: PAC3 кастомизация на сервере
PAC3 (Player Appearance Customizer 3) - один из самых мощных аддонов для кастомизации персонажа в Garry’s Mod. С его помощью игроки могут создавать сложные образы: прикреплять модели, текстуры, частицы, менять анимации и даже добавлять интерактивные элементы. На RP-серверах PAC3 фактически стал стандартом: DarkRP, NutScript, Helix и другие фреймворки давно интегрировали его в свою экосистему. В 2026 году аддон активно поддерживается, последние версии добавили стриминг ассетов и улучшенный API прав доступа. Эта статья разберёт установку, настройку прав, модерацию контента и оптимизацию нагрузки на сервере.
Pterohost - хостинг Garry’s Mod серверов с NVMe-дисками, DDoS-защитой и поддержкой 24/7, где PAC3 и тяжёлые Workshop-аддоны работают без лагов. Промокод 4START даёт -20% на первый заказ. Заказать Garry’s Mod сервер
Установка PAC3 на сервер
PAC3 распространяется через Steam Workshop. ID коллекции основного аддона: 104691306. Устанавливается двумя способами.
Способ 1 - через Workshop (рекомендуется)
В файле garrysmod/cfg/server.cfg или отдельном workshop.cfg добавьте:
host_workshop_collection <ID_вашей_коллекции>
Либо напрямую подключите аддон в garrysmod/lua/autorun/server/workshop.lua:
resource.AddWorkshop("104691306")
После этого при старте сервер скачает PAC3 и клиенты получат его автоматически при подключении.
Способ 2 - ручная установка через steamcmd
./steamcmd.sh +login anonymous \
+workshop_download_item 4000 104691306 \
+quit
Скопируйте скачанную папку в garrysmod/addons/pac3/.
Проверка установки
После перезапуска сервера в консоли должна появиться строка:
[PAC3] Loaded X outfits from database
[PAC3] Server initialized (version X.X.X)
Команда для проверки в консоли сервера:
pac_version
Система прав и групп
PAC3 поддерживает гибкую систему прав. По умолчанию все игроки могут открыть меню PAC3, но редактировать аутфиты - нет. Это поведение управляется через хук pac.PlayerHasAccess.
Стандартные права PAC3
| Право | Описание |
|---|---|
pac3_can_edit | Открыть редактор и применять аутфиты |
pac3_can_see_others | Видеть аутфиты других игроков |
pac3_advanced | Доступ к расширенным функциям (частицы, скрипты) |
pac3_admin | Управление аутфитами других игроков |
pac3_block_immune | Нельзя заблокировать через pac_block_player |
Настройка через ULX
Если на сервере стоит ULX, добавьте права в garrysmod/cfg/ULibPCfg/groups.txt или через команды:
ulx adduser <ник> pac3_can_edit
ulx groupallow moderator pac3_admin
Для автоматической выдачи прав группе через lua/autorun/server/pac3_perms.lua:
hook.Add("PAC3_CanEdit", "MyServerPerms", function(ply)
-- Разрешить редактирование только VIP и выше
if ply:IsUserGroup("vip") or ply:IsUserGroup("admin") or ply:IsSuperAdmin() then
return true
end
return false
end)
hook.Add("PAC3_CanSeeOthers", "MyServerPerms", function(ply)
-- Видеть аутфиты могут все
return true
end)
Настройка через SAM (Simple Admin Mod)
В SAM права задаются через веб-панель или файл конфигурации:
-- sam/plugins/pac3.lua
SAM.PAC3 = {
["user"] = false, -- обычные игроки не могут
["vip"] = true, -- VIP могут
["moderator"] = true,
["admin"] = true,
}
Создание и управление аутфитами
После выдачи прав игрок открывает редактор через C (по умолчанию) или команду pac_editor. Редактор PAC3 работает на стороне клиента, но аутфиты синхронизируются с сервером.
Структура аутфита
Аутфит PAC3 - это дерево сущностей (entities). Базовые типы:
| Тип | Назначение |
|---|---|
model | Прикрепить 3D-модель к кости персонажа |
hat | Упрощённый вариант model для головных уборов |
material | Заменить материал/текстуру тела |
particle | Добавить эффект частиц |
bone | Модифицировать кость скелета |
bodygroup | Изменить bodygroup базовой модели |
event | Привязать действие к событию (выстрел, прыжок) |
sound | Воспроизводить звук при событии |
Экспорт и импорт аутфитов
Аутфиты сохраняются в garrysmod/data/pac3/ в формате JSON. Игрок может экспортировать аутфит как строку и передать другому:
pac_export <slot> -- экспорт в буфер обмена
pac_import -- импорт из буфера
На сервере администратор может принудительно назначить аутфит игроку:
-- Применить аутфит к игроку из файла
local outfit_data = file.Read("pac3/presets/vip_outfit.txt", "DATA")
if outfit_data then
pac.SetOutfit(ply, outfit_data)
end
Whitelist моделей и контент-фильтр
На публичных серверах важно ограничить, какие модели игроки могут использовать в PAC3. Без ограничений игроки могут загружать любые модели из Workshop, включая неуместный контент.
Включение whitelist
В файле garrysmod/lua/pac3/settings.lua (или создайте lua/autorun/server/pac3_config.lua):
-- Включить whitelist моделей
pac.EnableModelWhitelist = true
-- Разрешённые пути к моделям (паттерны)
pac.ModelWhitelist = {
"models/player/", -- все player-модели
"models/props_c17/", -- стандартные пропы
"models/alyx.mdl", -- конкретная модель
}
-- Разрешённые материалы
pac.MaterialWhitelist = {
"models/",
"effects/",
}
Блокировка конкретных игроков
Если игрок злоупотребляет PAC3, его можно заблокировать без кика:
pac_block_player <SteamID64> -- заблокировать
pac_unblock_player <SteamID64> -- разблокировать
pac_blocked_players -- список заблокированных
Через Lua:
pac.BlockPlayer(ply) -- заблокировать
pac.UnblockPlayer(ply) -- снять блокировку
pac.IsBlocked(ply) -- проверить статус
Максимальный размер аутфита
Ограничьте количество сущностей в одном аутфите:
-- В pac3_config.lua
pac.MaxEntitiesPerOutfit = 20 -- не более 20 элементов
pac.MaxOutfitSize = 50000 -- лимит в байтах на аутфит
Ограничения и лимиты для игроков
PAC3 предоставляет набор конвар-переменных для ограничения функциональности. Задавайте их в server.cfg:
// Максимальная сложность одного аутфита (по умолчанию 100)
pac_max_complexity 50
// Максимальное количество частиц от одного игрока
pac_particles_max 5
// Максимальное количество аутфитов у одного игрока
pac_max_outfits 3
// Разрешить/запретить скрипты в аутфитах (0 = только admin)
pac_allow_scripts 0
// Разрешить звуки в аутфитах
pac_allow_sounds 1
// Разрешить кастомные URL для текстур (небезопасно на публичных серверах)
pac_allow_urls 0
Разные лимиты для разных групп
Через Lua можно задать индивидуальные лимиты:
hook.Add("PAC3_GetMaxComplexity", "CustomLimits", function(ply)
if ply:IsUserGroup("vip") then
return 150 -- VIP получают больше слотов
end
if ply:IsSuperAdmin() then
return 500 -- Админы без ограничений
end
return 30 -- Обычные игроки
end)
hook.Add("PAC3_GetMaxOutfits", "CustomLimits", function(ply)
if ply:IsUserGroup("premium") then
return 10
end
return 2
end)
Нагрузка и оптимизация сервера
PAC3 - один из самых нагруженных аддонов в GMod при неправильной настройке. Основные источники нагрузки:
- Синхронизация аутфитов - при подключении нового игрока все аутфиты передаются всем клиентам.
- Частицы - каждая партикл-система создаёт клиентскую нагрузку у всех, кто видит игрока.
- Кастомные модели - если модели не в Workshop-коллекции сервера, они скачиваются медленно.
- Event-скрипты - Lua-код в аутфитах выполняется на клиенте каждый тик.
Оптимизация через конвары
// Включить стриминг ассетов (загружать по требованию, не всё сразу)
pac_streaming_enabled 1
// Задержка синхронизации аутфитов при коннекте (секунды)
pac_sync_delay 2
// Максимальное количество аутфитов, передаваемых одновременно
pac_sync_batch_size 5
// Отключить передачу аутфитов игрокам вне зоны видимости
pac_cull_distance 2000
// Частота обновления позиции аутфита (тики)
pac_update_rate 3
Настройка кеша
PAC3 кеширует аутфиты в garrysmod/cache/pac3/. При большом количестве игроков кеш может разрастись:
-- Автоочистка кеша старше 7 дней (в autorun/server)
timer.Create("PAC3_CacheClean", 86400, 0, function()
pac.CleanCache(7) -- удалить кеш старше 7 дней
end)
Мониторинг нагрузки
Для отслеживания в реальном времени:
pac_debug_performance 1 -- показать FPS-impact каждого аутфита
pac_stats -- статистика по всем аутфитам на сервере
В логах сервера с включённым debug PAC3 будет выводить строки вида:
[PAC3] Player SteamID complexity: 87/100, entities: 14/20
[PAC3] Sync: 3 outfits sent to 12 clients (45.2 KB)
Интеграция с DarkRP и другими фреймворками
На DarkRP-серверах PAC3 часто привязывается к системе работ и привилегий. Пример: только полицейские могут использовать аутфиты с наручниками, а VIP получают расширенные слоты.
Привязка PAC3 к работе в DarkRP
-- lua/autorun/server/darkrp_pac3.lua
hook.Add("PAC3_CanEdit", "DarkRPJobs", function(ply)
local job = ply:getJobTable()
-- Запретить PAC3 для гостей
if job.command == "/guest" then
return false
end
-- Разрешить только VIP работам
if job.pac3 then
return true
end
-- По умолчанию - только если есть право pac3_can_edit
return ply:HasPermission("pac3_can_edit")
end)
В таблице работы добавьте поле:
TEAM_CITIZEN = DarkRP.createJob("Citizen", {
-- ...
pac3 = true, -- PAC3 разрешён этой работе
})
Сохранение аутфитов между сессиями
PAC3 по умолчанию сохраняет аутфиты в SQLite-базу garrysmod/sv.db. Для больших серверов лучше использовать MySQL через MySQLoo:
-- Пример интеграции с MySQLoo (требует отдельную установку)
hook.Add("PAC3_SaveOutfit", "MySQLSave", function(ply, slot, data)
local steamid = ply:SteamID64()
db:query(
"REPLACE INTO pac3_outfits (steamid, slot, data) VALUES (?, ?, ?)",
{steamid, slot, data}
)
end)
Модерация контента
Команды администратора
| Команда | Действие |
|---|---|
pac_remove_outfit <SteamID64> | Принудительно снять аутфит с игрока |
pac_block_player <SteamID64> | Запретить PAC3 для игрока |
pac_view_outfit <SteamID64> | Открыть аутфит игрока в редакторе (только просмотр) |
pac_list_outfits | Список всех активных аутфитов на сервере |
pac_clear_all | Сбросить все аутфиты (для экстренной ситуации) |
Лог нарушений
Добавьте логирование в lua/autorun/server/pac3_log.lua:
hook.Add("PAC3_PlayerApplyOutfit", "LogOutfits", function(ply, data)
local steamid = ply:SteamID64()
local name = ply:Nick()
local size = #data
-- Логировать крупные аутфиты
if size > 30000 then
MsgN("[PAC3] WARNING: Large outfit from " .. name .. " (" .. steamid .. "): " .. size .. " bytes")
end
-- Логировать в файл
file.Append("pac3_log.txt", os.date() .. " | " .. name .. " | " .. steamid .. " | " .. size .. " bytes\n")
end)
Автоматическое ограничение по жалобам
На крупных серверах можно настроить систему жалоб:
local reports = {}
-- Игрок жалуется на аутфит
concommand.Add("pac_report", function(ply, cmd, args)
local target_id = args[1]
if not reports[target_id] then reports[target_id] = 0 end
reports[target_id] = reports[target_id] + 1
-- Автоматически снять аутфит при 5+ жалобах
if reports[target_id] >= 5 then
local target = player.GetBySteamID64(target_id)
if IsValid(target) then
pac.RemoveOutfit(target)
target:ChatPrint("Ваш аутфит был снят из-за жалоб игроков.")
end
end
end)
Связанные материалы
Если вы только начинаете настраивать сервер, сначала разберитесь с установкой аддонов в GMod - PAC3 устанавливается по тому же принципу. Для RP-серверов на DarkRP читайте полный гайд по настройке DarkRP, где PAC3 часто идёт в комплекте с системой работ. Общая структура сервера и файловая система подробно описаны в статье сборка GMod-сервера с нуля.
Заключение
PAC3 - мощный инструмент для кастомизации, который при правильной настройке делает сервер уникальным и привлекательным для RP-сообщества. Ключевые шаги: установить аддон через Workshop, выдать права нужным группам через ULX или собственный хук, ограничить сложность аутфитов через pac_max_complexity, включить whitelist моделей на публичных серверах и настроить логирование для модераторов. Не забывайте периодически чистить кеш и мониторить нагрузку через pac_debug_performance - тяжёлые аутфиты с частицами и скриптами могут серьёзно просадить FPS у клиентов.
Pterohost - игровой хостинг с быстрыми NVMe-дисками и защитой от DDoS: Workshop-аддоны вроде PAC3 грузятся мгновенно, а поддержка 24/7 поможет разобраться с любой настройкой. Промокод 4START даёт -20% на первый заказ. Заказать Garry’s Mod сервер