commit 41307dbf82b27ad5ff923cb4350e6ce30a39b41a Author: deidara Date: Fri May 1 06:57:32 2026 +0300 Initial commit: vip-custom-models plugin with documentation and config diff --git a/README.md b/README.md new file mode 100644 index 0000000..d6af55a --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# VIP Custom Models + +Плагин VIP-моделей игроков для CS:GO серверов на SourceMod. Позволяет VIP-игрокам выбирать кастомные скины (агентов) через меню — выбор сохраняется через ClientPrefs и SQLite. + +## Функции + +- До **128 кастомных моделей** из конфига +- Ограничение по **команде** (T / CT / любая) +- Ограничение по **VIP-группе** (через VIP Core API) +- Сохранение выбора через **ClientPrefs** (cookies) и **SQLite** (storage-local) +- Автоматическое применение модели при спавне и смене команды +- Корректное восстановление **стандартных рук** при сбросе модели +- Умная загрузка файлов модели: `.mdl`, `.vvd`, `.dx90.vtx` и сопутствующие +- Поддержка блочного и строкового форматов списка downloads +- Интеграция с VIP-меню через `VIP_RegisterFeature` + +## Зависимости + +- [SourceMod](https://www.sourcemod.net/) 1.10+ +- [ClientPrefs](https://wiki.alliedmods.net/Client_Preferences_%28SourceMod%29) (входит в SourceMod) +- [VIP Core](https://github.com/R1KO/VIP-Core) — плагин VIP-системы + +## Установка + +1. Скомпилировать `scripting/vip_custom_models.sp` +2. Положить `.smx` в `addons/sourcemod/plugins/` +3. Положить `configs/vip_custom_models.ini` в `addons/sourcemod/configs/` +4. Загрузить модели на сервер (в папку `models/`) +5. Перезапустить сервер или загрузить плагин: `sm plugins load vip_custom_models` + +## Конфиг + +Путь: `addons/sourcemod/configs/vip_custom_models.ini` + +``` +"VIP_CustomModels" +{ + "Models" + { + "agent_01" + { + "name" "FBI Agent" + "model" "models/player/custom/fbi_agent.mdl" + "arms" "models/weapons/ct_arms_fbi_custom.mdl" + "team" "CT" + "groups" "*" + "downloads" "models/player/custom/fbi_agent.mdl;models/player/custom/fbi_agent.vvd" + } + "agent_02" + { + "name" "Elite Crew" + "model" "models/player/custom/elite_crew.mdl" + "arms" "" + "team" "T" + "groups" "VIP;PREMIUM" + "downloads" + { + "1" "models/player/custom/elite_crew.mdl" + "2" "models/player/custom/elite_crew.vvd" + "3" "models/player/custom/elite_crew.dx90.vtx" + } + } + } +} +``` + +### Поля модели + +| Поле | Описание | +|---|---| +| `name` | Отображаемое имя в меню | +| `model` | Путь к `.mdl` файлу | +| `arms` | Путь к модели рук (оставить пустым для стандартных) | +| `team` | `T`, `CT` или `ANY` | +| `groups` | VIP-группы через `;` или `*` для всех | +| `downloads` | Файлы для скачивания клиентами (строка через `;` или блок) | + +## Команды + +| Команда | Доступ | Описание | +|---|---|---| +| `!vmodel` / `sm_vmodel` | VIP | Открыть меню выбора модели | +| `!models` / `sm_models` | VIP | Открыть меню выбора модели | +| `!agents` / `sm_agents` | VIP | Открыть меню выбора модели | + +## Версия + +`1.2.0` — Автор: OpenAI diff --git a/configs/vip_custom_models.ini b/configs/vip_custom_models.ini new file mode 100644 index 0000000..c53b788 --- /dev/null +++ b/configs/vip_custom_models.ini @@ -0,0 +1,49 @@ +"VIP_CustomModels" +{ + "Models" + { + // Пример: модель для CT, доступна всем VIP (groups = "*") + "agent_ct_01" + { + "name" "FBI Agent" + // Путь к .mdl (от корня игрового сервера) + "model" "models/player/custom/fbi_agent.mdl" + // Путь к .mdl рук. Оставить пустым — будут стандартные руки + "arms" "models/weapons/ct_arms_fbi_custom.mdl" + // Команда: T, CT или ANY + "team" "CT" + // VIP-группы через ";" или "*" для всех VIP + "groups" "*" + // Список файлов для скачивания клиентами (через ";") + "downloads" "models/player/custom/fbi_agent.mdl;models/player/custom/fbi_agent.vvd;models/player/custom/fbi_agent.dx90.vtx" + } + + // Пример: модель для T, только группы VIP и PREMIUM + "agent_t_01" + { + "name" "Elite Crew" + "model" "models/player/custom/elite_crew.mdl" + "arms" "" + "team" "T" + "groups" "VIP;PREMIUM" + // Блочный формат downloads (альтернатива строке через ";") + "downloads" + { + "1" "models/player/custom/elite_crew.mdl" + "2" "models/player/custom/elite_crew.vvd" + "3" "models/player/custom/elite_crew.dx90.vtx" + } + } + + // Пример: модель для обеих сторон + "agent_any_01" + { + "name" "Arcane Operative" + "model" "models/player/custom/arcane_op.mdl" + "arms" "models/weapons/arcane_arms.mdl" + "team" "ANY" + "groups" "PREMIUM" + "downloads" "models/player/custom/arcane_op.mdl;models/player/custom/arcane_op.vvd;models/player/custom/arcane_op.dx90.vtx;models/weapons/arcane_arms.mdl;models/weapons/arcane_arms.vvd" + } + } +} diff --git a/scripting/vip_custom_models.sp b/scripting/vip_custom_models.sp new file mode 100644 index 0000000..f4a124b Binary files /dev/null and b/scripting/vip_custom_models.sp differ