diff --git a/README.md b/README.md index d6af55a..c3d4fef 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,32 @@ # VIP Custom Models -Плагин VIP-моделей игроков для CS:GO серверов на SourceMod. Позволяет VIP-игрокам выбирать кастомные скины (агентов) через меню — выбор сохраняется через ClientPrefs и SQLite. +Плагин кастомных моделей игроков для CS:GO — модели **назначаются по SteamID64 через конфиг-файл**, без выбора через меню. Идеально для серверов, где админ хочет полностью контролировать кому какую модель давать. ## Функции -- До **128 кастомных моделей** из конфига -- Ограничение по **команде** (T / CT / любая) -- Ограничение по **VIP-группе** (через VIP Core API) -- Сохранение выбора через **ClientPrefs** (cookies) и **SQLite** (storage-local) +- До **128 кастомных моделей** из конфига `vip_custom_models.ini` +- Назначение **«SteamID64 → model_id»** через `vip_custom_models_locked.cfg` - Автоматическое применение модели при спавне и смене команды -- Корректное восстановление **стандартных рук** при сбросе модели +- Корректное восстановление **стандартных рук** для команды если кастомная модель не назначена или не подходит по команде +- Команда `sm_vmodel_reload` для перезагрузки конфига без рестарта плагина - Умная загрузка файлов модели: `.mdl`, `.vvd`, `.dx90.vtx` и сопутствующие -- Поддержка блочного и строкового форматов списка downloads -- Интеграция с VIP-меню через `VIP_RegisterFeature` +- Поддержка блочного и строкового форматов списка `downloads` +- Ограничение по **команде** (T / CT / ANY) — если игрок не на нужной команде, кастомная модель не применяется (используются дефолтные руки) ## Зависимости - [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` +3. Положить `configs/vip_custom_models.ini` (список доступных моделей) в `addons/sourcemod/configs/` +4. Положить `configs/vip_custom_models_locked.cfg` (назначения SteamID → модель) в `addons/sourcemod/configs/` +5. Загрузить файлы моделей в `models/` на сервере +6. Перезапустить сервер или загрузить плагин: `sm plugins load vip_custom_models` -## Конфиг +## Конфиг моделей Путь: `addons/sourcemod/configs/vip_custom_models.ini` @@ -39,50 +37,77 @@ { "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" + "name" "FBI Agent" + "model" "models/player/custom/fbi_agent.mdl" + "arms" "models/weapons/ct_arms_fbi_custom.mdl" + "team" "CT" + "downloads" "models/player/custom/fbi_agent.mdl;models/player/custom/fbi_agent.vvd" } - "agent_02" + "elite_crew" { - "name" "Elite Crew" - "model" "models/player/custom/elite_crew.mdl" - "arms" "" - "team" "T" - "groups" "VIP;PREMIUM" + "name" "Elite Crew" + "model" "models/player/custom/elite_crew.mdl" + "arms" "" + "team" "T" "downloads" { - "1" "models/player/custom/elite_crew.mdl" - "2" "models/player/custom/elite_crew.vvd" - "3" "models/player/custom/elite_crew.dx90.vtx" + "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` | Файлы для скачивания клиентами (строка через `;` или блок) | +| `name` | Отображаемое имя (для логов и админ-вывода) | +| `model` | Путь к `.mdl` файлу игрока | +| `arms` | Путь к модели рук (пустая строка = стандартные руки команды) | +| `team` | `T`, `CT` или `ANY` — на какой команде модель применяется | +| `downloads` | Файлы для FastDL (через `;` или блок) | + +## Конфиг назначений (новое в v2.0.0) + +Путь: `addons/sourcemod/configs/vip_custom_models_locked.cfg` + +``` +"VIP_LockedModels" +{ + "76561198012345678" "agent_01" + "76561198098765432" "elite_crew" +} +``` + +Ключ — SteamID64 игрока, значение — id модели (название секции из `vip_custom_models.ini`). + +После редактирования файла: +- Перезагрузи плагин: `sm plugins reload vip_custom_models` +- **ИЛИ** используй админ-команду `sm_vmodel_reload` (флаг `z` / ROOT) — без рестарта, моментально применяется ко всем игрокам в игре ## Команды | Команда | Доступ | Описание | |---|---|---| -| `!vmodel` / `sm_vmodel` | VIP | Открыть меню выбора модели | -| `!models` / `sm_models` | VIP | Открыть меню выбора модели | -| `!agents` / `sm_agents` | VIP | Открыть меню выбора модели | +| `sm_vmodel_reload` | Admin (флаг `z`) | Перезагрузить оба конфига без рестарта плагина | + +> Меню выбора моделей **удалено** — модели назначаются только через конфиг. ## Версия -`1.2.0` — Автор: OpenAI +`2.0.0` — Автор: deidara.dev + +### Changelog + +- **2.0.0** — Полный refactor: модели назначаются по SteamID64 через конфиг + - Добавлен `vip_custom_models_locked.cfg` с маппингом SteamID64 → model_id + - Удалено меню выбора моделей и команды `!vmodel`/`!models`/`!agents` + - Удалена интеграция с VIP-Core (пункт «Кастомные модели» больше не показывается в VIP-меню) + - Удалена ClientPrefs-cookies и SQLite-персистенция (конфиг — единственный источник истины) + - Команда `sm_vmodel_reload` для горячей перезагрузки + - **Багфиксы из 1.2.0:** + - Удалён баг с `error[0] != ' '` (был неправильный null-check, спамил в errors_*.log) + - Удалена race condition между загрузкой DB и cookies (DB+cookie больше не используются) + - Author = `"deidara.dev"` +- **1.2.0** — VIP-меню версия (legacy) diff --git a/configs/vip_custom_models_locked.cfg.example b/configs/vip_custom_models_locked.cfg.example new file mode 100644 index 0000000..e8141f5 --- /dev/null +++ b/configs/vip_custom_models_locked.cfg.example @@ -0,0 +1,21 @@ +// Назначение моделей игрокам по SteamID64 +// Формат: "" "" +// +// Чтобы узнать SteamID64 игрока: +// - в консоли сервера: status, потом https://steamid.io +// - либо команда `sm_who` если есть SourceMod-плагин для админов +// +// id_модели — это название секции из vip_custom_models.ini +// (например "agent_01", "elite_crew" — то что в кавычках перед { ) +// +// После правки файла перезагрузи плагин: +// sm plugins reload vip_custom_models +// ИЛИ +// sm_vmodel_reload (admin command, флаг z) + +"VIP_LockedModels" +{ + "76561198012345678" "agent_01" + "76561198098765432" "elite_crew" + "76561197960287930" "agent_01" +} diff --git a/scripting/vip_custom_models.sp b/scripting/vip_custom_models.sp index f4a124b..96069f9 100644 Binary files a/scripting/vip_custom_models.sp and b/scripting/vip_custom_models.sp differ