v2.0.0: refactor - models assigned by SteamID64 via config

Major changes:
- Added configs/vip_custom_models_locked.cfg (SteamID64 to model_id)
- Command sm_vmodel_reload for hot reload
- Removed model selection menu (!vmodel/!models/!agents)
- Removed VIP-Core integration (item removed from VIP menu)
- Removed ClientPrefs cookies and SQLite (config is single source of truth)

Bug fixes:
- Fixed null-check bug (error[0] != space instead of null terminator)
- Removed DB vs Cookie race condition
- Cleaned up buffer null-termination workarounds
- author = deidara.dev
This commit is contained in:
deidara
2026-05-01 20:53:51 +03:00
parent 41307dbf82
commit 53d3702c69
3 changed files with 87 additions and 41 deletions
+54 -29
View File
@@ -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`
@@ -43,16 +41,14 @@
"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"
"elite_crew"
{
"name" "Elite Crew"
"model" "models/player/custom/elite_crew.mdl"
"arms" ""
"team" "T"
"groups" "VIP;PREMIUM"
"downloads"
{
"1" "models/player/custom/elite_crew.mdl"
@@ -64,25 +60,54 @@
}
```
### Поля модели
| Поле | Описание |
|---|---|
| `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)
@@ -0,0 +1,21 @@
// Назначение моделей игрокам по SteamID64
// Формат: "<SteamID64>" "<id_модели_из_vip_custom_models.ini>"
//
// Чтобы узнать 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"
}
Binary file not shown.