Pterohost docs

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 при неправильной настройке. Основные источники нагрузки:

  1. Синхронизация аутфитов - при подключении нового игрока все аутфиты передаются всем клиентам.
  2. Частицы - каждая партикл-система создаёт клиентскую нагрузку у всех, кто видит игрока.
  3. Кастомные модели - если модели не в Workshop-коллекции сервера, они скачиваются медленно.
  4. 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 сервер