Files
deidara 996901a67d v1.3.4: фикс моделей после 1vAll (ChangeClientTeam вместо CS_SwitchTeam)
CS_SwitchTeam меняет только флаг команды, не обновляя модель игрока.
В результате после 1vAll игрок с CT-моделью оставался в ней на T-команде.
ChangeClientTeam триггерит death+respawn — игра выдаёт правильную модель.
2026-05-01 19:22:04 +03:00

155 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ArcaneGame Custom Rounds Core
Плагин кастомных раундов для CS:GO серверов на SourceMod. Администраторы выбирают режим на следующий раунд через меню — и весь сервер играет в изменённых условиях.
## Функции
- 11 режимов кастомных раундов:
- **AWP Only** — только AWP + нож
- **AWP NoScope** — AWP без прицела (zoom заблокирован)
- **Scout Only** — только SSG-08 + нож
- **Scout NoScope** — Scout без прицела
- **Deagle Only** — только Deagle + нож
- **Deagle HS Only** — только Deagle, **в тело — 0 урона, только хедшоты**
- **HE Only** — только гранаты HE с бесконечным боезапасом
- **Ножевой раунд** — только ножи
- **Низкая гравитация** — гравитация уменьшена (настраивается)
- **1 HP** — у всех игроков минимальное здоровье
- **1 vs All** (от 15 игроков) — 1 ТТшник против всех CT. У ТТшника 5000 HP, 500 брони, +25% скорости, $16000 на покупку любого оружия. CT — XM1014 + 4 гранаты (HE, флеш, смок, инсентари). Админ выбирает игрока вручную или рандомно.
- Полное сохранение и восстановление инвентаря после кастомного раунда (основное оружие + патроны, запасное + патроны, нож, **все гранаты**, **броня**, **шлем**, **дефузер**)
- Блокировка покупок во время режима
- Блокировка зума для NoScope-режимов (через CommandListener + OnPlayerRunCmd)
- Показ **MOTD-картинки** во freezetime в начале кастомного раунда (HTTP-страница, авто-закрытие через 12с)
- Кулдаун **5 раундов** для обычных админов между запусками. Группы DEIDARA / TESTER и флаг `z` (Root) обходят кулдаун
- Логирование действий админов (выбор/отмена режима) в `addons/sourcemod/logs/custom_rounds.log`
- Защита от спама: один и тот же режим нельзя поставить в очередь дважды подряд
- Интеграция AG Coins (награда за победу / убийства / хедшоты / выживание)
- Объявления в чат о текущем и следующем режиме
## Зависимости
- [SourceMod](https://www.sourcemod.net/) 1.10+
- `agcoins_bridge` — библиотека AG Coin (входит в систему ArcaneGame)
## Установка
1. Скомпилировать `scripting/ArcaneGame_CustomRounds_Core.sp`
2. Положить `.smx` в `addons/sourcemod/plugins/`
3. Убедиться, что `agcoins_bridge` загружен на сервере
4. Перезапустить сервер — конфиг создастся автоматически в `cfg/sourcemod/ArcaneGame_CustomRounds_Core.cfg`
## Команды
| Команда | Доступ | Описание |
|---|---|---|
| `!cr` / `sm_cr` | Группы DEIDARA / TESTER или по флагу | Открыть меню кастомных раундов |
| `!cr_status` / `sm_cr_status` | Любой админ с доступом к меню | Показать текущий/следующий режим и кулдаун |
## ConVars
| ConVar | По умолчанию | Описание |
|---|---|---|
| `sm_cr_access_flag` | `b` | Флаг доступа для sm_cr (fallback) |
| `sm_cr_access_use_overrides` | `1` | Разрешить доступ через admin_overrides.cfg |
| `sm_cr_coins_enable` | `1` | Включить AG Coin награды |
| `sm_cr_coins_win` | `0` | Монеты за победу в кастомном раунде |
| `sm_cr_coins_kill` | `0` | Монеты за убийство |
| `sm_cr_coins_headshot` | `0` | Монеты за хедшот |
| `sm_cr_coins_survive` | `0` | Монеты за выживание победителю |
| `sm_cr_lowgravity_value` | `0.40` | Значение гравитации (Low Gravity) |
| `sm_cr_onehp_value` | `1` | Здоровье игроков в режиме 1 HP |
| `sm_cr_announce` | `1` | Показывать объявления в чат |
| `sm_cr_show_motd` | `1` | Показывать картинку режима во freezetime |
| `sm_cr_cooldown_rounds` | `5` | Кулдаун в раундах для обычных админов (DEIDARA/TESTER/z обходят) |
## Уровни доступа
| Уровень | Кулдаун | Возможности |
|---|---|---|
| Группа **DEIDARA** | Нет | Все режимы, все запуски |
| Группа **TESTER** | Нет | Все режимы, все запуски |
| Флаг `z` (Root) | Нет | Все режимы, все запуски |
| Любой другой админ с флагом `sm_cr_access_flag` | **5 раундов** | Все режимы, но запуск раз в 5 раундов |
| Без флага | Нет доступа | — |
## Уведомление о начале режима
Когда стартует кастомный раунд, всем игрокам показывается **PrintHintText** — большое уведомление в правом нижнем углу экрана со звуком. Содержит название режима и краткое описание.
Управляется ConVar `sm_cr_show_motd 1/0`.
## Логирование
Все запуски и отмены кастомных раундов пишутся в:
```
addons/sourcemod/logs/custom_rounds.log
```
Формат:
```
[YYYY-MM-DD HH:MM:SS] [FULL|REG] АдминИмя (STEAM_X:Y:Z) -> ВЫБРАЛ/ОТМЕНИЛ режим: <название> [раунд N]
```
Где:
- `FULL` — DEIDARA / TESTER / Root (без кулдауна)
- `REG` — обычный админ (с кулдауном)
## Версия
`1.3.4` — Автор: deidara.dev
### Changelog
- **1.3.4**
- Фикс: после 1vAll-раунда модели игроков теперь корректно меняются под их восстановленную команду. Раньше игрок с CT-моделью оставался в этой модели даже после возврата в команду T (и наоборот), потому что `CS_SwitchTeam` не обновляет модель. Теперь используется `ChangeClientTeam` — он триггерит правильный death+respawn → игра выдаёт модель для новой команды.
- **1.3.3**
- Префикс изменён с `[ArcaneGame CR]` (зелёный) на `[CUSTOM ROUNDS]` (жёлтый, цветовой код `\x09`)
- **1.3.2**
- Фикс: ТТшник в режиме 1 vs All теперь гарантированно телепортируется на T-спавн (раньше `CS_RespawnPlayer` в CSGO мог оставить уже-живого игрока на CT-спавне, что ломало возможность покупки)
- Фикс: после окончания 1vAll команды восстанавливаются физически — добавлен `Timer_FinalTeamRestore`, который телепортирует игроков на спавны их исходных команд
- Добавлен хелпер `TeleportToTeamSpawn` (использует `info_player_terrorist` / `info_player_counterterrorist` энтити)
- **1.3.1**
- Фикс компиляции: `CSRoundEnd_RoundDraw``CSRoundEnd_Draw` (правильное имя константы в `cstrike.inc`)
- **1.3.0**
- Добавлен режим **1 vs All** (требуется 15+ активных игроков):
- 1 ТТшник против всех CT
- Админ выбирает игрока вручную через подменю или рандомно
- У ТТшника: 5000 HP, 500 брони, +25% скорости, $16000 (свободная покупка)
- У CT: XM1014 + HE + флеш + смок + incgrenade, покупка отключена
- Если ТТшник умрёт — CT побеждают (стандартная логика CSGO)
- Если ТТшник вышел — раунд завершается ничьёй (`CS_TerminateRound`), оружие восстанавливается
- После раунда команды восстанавливаются в исходные (CT возвращаются к T если были T до 1vAll)
- Если игроков стало <15 в момент старта — режим автоматически отменяется с уведомлением в чат
- **1.2.4**
- Убраны `ShowMOTDPanel` и `PrintCenterText` (на CSGO/MyArena не показывались стабильно)
- Оставлен только `PrintHintText` — он работает у всех игроков
- Удалён мёртвый код: `GetRoundUrlSlug`, `CR_MOTD_BASE_URL`, `Timer_RepeatOverlay`
- **1.2.3**
- Замена `ShowHudText` (для HL2, не работал в CSGO) на надёжные `PrintHintText` + `PrintCenterText`
- Уведомление о кастомном раунде показывается всем игрокам тремя способами одновременно: MOTD-картинка, hint-text в углу со звуком, большой центральный текст
- Центральный текст повторяется таймерами на 2/4/6 секундах чтобы держать сообщение видимым на протяжении всего freezetime
- **1.2.2**
- Фикс лога: переход с `LogToFileEx(absolute_path)` на `OpenFile("addons/sourcemod/logs/custom_rounds.log", "a")`. На MyArena `LogToFileEx` с absolute путём от `BuildPath` молча не создавал файл.
- Фикс MOTD: используется стандартный `ShowMOTDPanel` (правильно сериализует KeyValues с типом как строкой)
- Добавлен **гарантированный HUD-overlay** с названием и описанием режима в центре экрана (~6 секунд), показывается всегда независимо от клиентского `cl_disablehtmlmotd`
- **1.2.1**
- Фикс: жёсткая проверка прав в `HasCustomRoundsAccess` — теперь обязательно требуется хотя бы один админ-флаг (раньше при пустом флаге в `admin_overrides.cfg sm_cr` мог пропускать обычных игроков)
- Защитные re-check вызовы в `MenuHandler_Main`, `QueueCustomRound`, `CancelPendingRound` — даже если меню каким-то образом окажется у игрока без прав, действия не выполнятся
- Добавлен `IsFakeClient` в проверку (боты заблокированы)
- Дополнительный `LogMessage` в стандартный SM-лог при логировании действий — для надёжности на shared-хостингах
- **1.2.0**
- Добавлены режимы: **Scout NoScope**, **Deagle Only**, **Deagle HS Only** (только хедшоты)
- Полное сохранение/восстановление инвентаря: гранаты, броня, шлем, дефузер, патроны
- Фикс: при заходе нового игрока на освободившийся слот не выдаётся чужой инвентарь
- Фикс: убрано двойное применение режима в начале раунда
- Фикс: `m_iFOV` восстанавливается в 90 (а не 0)
- Фикс: удалён мёртвый код `GiveDefaultCombatLoadout`
- **MOTD-картинка** во freezetime при старте кастомного раунда
- **Логирование** действий в `custom_rounds.log` (с тегом FULL/REG)
- **Кулдаун 5 раундов** для обычных админов (DEIDARA/TESTER/Root обходят)
- Защита от спама очереди: один и тот же режим нельзя поставить дважды
- Команда `sm_cr_status`
- Унифицирован стиль API (методмапы вместо `GetConVarBool`)
- **1.1.0** — Базовая версия с 7 режимами