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:
@@ -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)
|
||||
|
||||
@@ -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.
Reference in New Issue
Block a user