# ILLUSION SQL GAG SYSTEM v1.2
**Автор:** illusion @ CodeStrike.STORE
**Плагин:** AMX Mod X для Counter-Strike 1.6
---
## 🎯 ОБЗОР
Усовершенствованная система ограничений доступа на базе MySQL с надежной защитой от обхода, высокой производительностью на перегруженных серверах и полным контролем над настройками.
---
## ✨ ОСОБЕННОСТИ
- **Типы блокировок**: чат, голосовая связь или и то, и другое
- **Гибкая продолжительность**: кляпы на определённое время (в минутах) или постоянные кляпы
- **Пользовательские причины**: полная настройка через файл INI, а также возможность ввода пользовательских причин непосредственно в игре
- **Фильтр нецензурной лексики**: автоматическое блокирование запрещённых слов (распознавание целых слов) с флагом обхода для администратора
- **Система ведения журналов**: подробные записи обо всех событиях, связанных с блокировкой
- **Защита от обхода**: блокировки привязаны к SteamID **и** IP-адресу — повторное подключение или смена имени не помогут
- **Несовместимо со Steam**: общие идентификаторы, такие как `STEAM_ID_LAN`/ , `VALVE_ID_LAN`сопоставляются исключительно по IP-адресу, поэтому игроки, не использующие Steam, никогда не могут использовать один и тот же гаг
- **Синхронизация по раундам**: автоматическое обнаружение изменений в гагах (добавление/редактирование/удаление) из базы данных (например, с веб-сайта)
- **Интерфейс прямых команд**: Быстрое затыкание рта с помощью `amx_gag`– требуется только имя игрока
- **Консоль сервера / Поддержка RCON**: Все команды администратора работают как из консоли сервера, так и через RCON
- **Уведомления HUD**: отображение статуса «заглушки» в режиме реального времени с таймером обратного отсчёта
- **Звуковые эффекты**: настраиваемые звуки для событий, связанных с заткнутием рта
- **Профессиональные меню**: цветной интерфейс администратора
- **Иммунитет администратора**: система защиты на основе флагов
- **Прогрессивные наказания**: рецидивисты автоматически получают более длительные кляпы
- **Поддержка кириллицы / UTF-8**: имена и причины на любом языке сохраняются корректно
---
## 📋 ТРЕБОВАНИЯ
- AMX Mod X версии **1.9 или более поздней**
- **ReAPI**
- **CromChat**
- Модуль **MySQL** включен (`mysql`in`modules.ini`)
- База данных MySQL / MariaDB
---
## 🚀 УСТАНОВКА
1. Загрузить `ILLUSION_GagSystem.amxx`в `addons/amxmodx/plugins/`
2. Добавить в`ILLUSION_GagSystem.amxx` `plugins.ini`
3. Загрузите звуковые файлы в (`sound/gagsystem/``mute.wav`, `unmute.wav`) — или оставьте поля с путями к звуковым файлам в конфигурации пустыми
4. Создать базу данных MySQL
5. Запустите сервер один раз — он`configs/gagsystem.ini` создастся автоматически
6. Редактировать `configs/gagsystem.ini`с учетом настроек вашей базы данных
7. Перезапустите сервер
Таблицы базы данных создаются автоматически.
### ⬆️ Обновление с версии 1.1
1. **Сначала создайте резервную копию базы данных** — существующие таблицы будут автоматически преобразованы в формат UTF-8
2. Заменить `.amxx`файл
3. Необязательно: добавьте новый параметр`BYPASS_ACCESS` в (`[Bad Words]`см. ниже). Если он отсутствует, по умолчанию используется `ADMIN_SLAY`
4. Необязательно: удалите `VOICE_BLOCKING_DELAY`из `[Tasks]`– оно больше не используется
Ваша текущая конфигурация продолжает работать — никаких других изменений не требуется.
---
## ⚙️ НАСТРОЙКИ
Автоматически генерируется `gagsystem.ini`с разделами:
- **База данных**: параметры подключения к MySQL
- **Меню**: Настройка интерфейса
- **Чат**: Префикс сообщения в чате
- **Причины**: Список причин для шуток
- **Times**: Варианты продолжительности
- **Типы чата**: текстовый/голосовой/оба варианта
- **HUD**: Расположение и время отображения сообщений HUD
- **Задачи**: Сроки проведения проверки анкетных данных
- **Доступ**: Уровни прав администратора
- **Нецензурная лексика**: фильтр автоматического блокирования
- **Ограничения**: максимальное количество причин/раз/нецензурных слов для загрузки
- **Журналы**: настройка ведения журнала событий (`LOGS_ENABLED = 1`, `LOGS_FILE = gagsystem.log`)
- **Звуки**: звуковые эффекты
- **Проверки**: синхронизация базы данных по раундам
- **«Прогрессивный**»: коэффициент для рецидивистов
- **Обратный отсчёт**: таймер HUD для игроков с завязанным ртом
### Фильтр нецензурных слов
```ini
[Bad Words]
ENABLED = 1
; Gag duration in minutes (0 = permanent)
GAG_TIME = 5
; 0 = Chat, 1 = Voice, 2 = Both
GAG_TYPE = 0
; Admins with this flag are not checked by the filter (leave empty = nobody bypasses)
BYPASS_ACCESS = ADMIN_SLAY
WORD_1 = example
```
`BYPASS_ACCESS` принимает имена флагов (`ADMIN_SLAY`, `ADMIN_KICK`, ...) или буквы флагов (например, `e`).
### Прогрессивное наказание
```ini
[Progressive]
ENABLED = 1
MULTIPLIER = 1.5
MAX_MULTIPLIER = 5
```
Каждый предыдущий «гаг» увеличивает продолжительность в `MULTIPLIER`, причем максимальное увеличение составляет раз`MAX_MULTIPLIER` по сравнению с исходной величиной.
Пример: 10-минутный гаг при втором применении превращается в 15-минутный, при третьем — в 23-минутный… и так далее, вплоть до 50 минут. На постоянные гаги это не влияет.
---
## 🎮 КОМАНДЫ
### Команды администратора
- `amx_gagmenu` – Открывает интерактивное меню шуток (только в игре)
- `amx_gag <user> [minutes] [reason] [type]` – Команда прямого затыкания рта
- Обязательным для ввода является только имя игрока. Значения по умолчанию: **30 минут**, причина **«Не указано»**, тип **«Чат + голосовая связь****»**
- Причина может содержать пробелы без кавычек
- **Примеры**:
```
amx_gag John
amx_gag John 60
amx_gag John 60 spamming in chat
amx_gag John 60 spam 0
amx_gag John 0 advertising 2
```
- **Протокол**: `0`= постоянный
- **Типы** (последний аргумент):
- `0` = Только чат
- `1` = Только голос
- `2` = Чат + Голосовая связь
- `amx_ungag <player>` – Снимает с игрока кляп
- `amx_gaginfo <player>` – Отображает подробную информацию о блокировке игрока (SteamID, IP, тип, администратор, причина, оставшееся время)
- `amx_gaglist` – Отображает список всех активных шуток из базы данных
- `amx_cleangags` – Удаляет все ограничения
Все административные команды также доступны из **консоли** **сервера** и через **RCON**.
### Команды игрока
- `/gagstatus` или `/mygag`– Отображает статус вашего гага и оставшееся время
---
## 🛡️ БЕЗОПАСНОСТЬ
- **Двойная идентификация**: сопоставление SteamID и IP-адреса — повторное подключение не снимает ограничение на общение
- **Защита от игроков, не использующих Steam**: LAN-идентификаторы никогда не используются для сопоставления, поэтому игроки не могут быть ошибочно заблокированы
- **Асинхронные SQL-запросы**: обработка и проверки выполняются в фоновом режиме — сервер не зависает даже при работе с удалённой базой данных
- **Защита от SQL-инъекций**: все пользовательские данные проходят экранирование
- **Защита от злоупотреблений**: доступ к меню и вводу пользовательских причин предоставлен только администраторам; все вводимые данные проходят проверку
- **Синхронизация по раундам**: автоматическая синхронизация всех изменений в диалогах из базы данных
- **Автоматическое обнаружение**: обнаруживает новые, отредактированные или удаленные шутки
- **Обновления в режиме реального времени**: автоматическая синхронизация причины, времени и типа
- **Повторное подключение не требуется**: изменения вступают в силу автоматически в следующем раунде
---
## 📝 ФОРМАТ ЖУРНАЛА
```
L MM/DD/YYYY - HH:MM:SS: Admin X gagged player Y for Z minutes with reason 'ABC' (Type: Chat)
L MM/DD/YYYY - HH:MM:SS: Admin X permanently gagged player Y with reason 'ABC' (Type: Chat)
L MM/DD/YYYY - HH:MM:SS: Admin X ungagged player Y
L MM/DD/YYYY - HH:MM:SS: Gag expired for player Y (Type: Voice)
L MM/DD/YYYY - HH:MM:SS: SYSTEM automatically gagged player Y for Z minutes (0 = permanent) with reason 'Swearing (badword)' (Type: Both)
L MM/DD/YYYY - HH:MM:SS: Gag validation failed for player Y - gag was manually removed from database
L MM/DD/YYYY - HH:MM:SS: Gag details updated for player Y - Admin: X, Reason: ABC, Type: 0
```
---
## 🆕 ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ (версия 1.2)
### 🐞 Исправления ошибок
- Исправлена уязвимость, позволявшая обычным игрокам открывать меню «Gag».
- Игроки с заблокированным чатом теперь видят все сообщения в чате (сообщения плагинов, отправленные им, ранее блокировались)
- Теперь микрофон нормально восстанавливается по истечении действия эффекта «Чат + Голос»
- Игроки, не использующие Steam (`STEAM_ID_LAN`, `VALVE_ID_LAN`), больше не получают один и тот же прикольный элемент
- Прогрессивное наказание теперь действительно работает (раньше оно никогда не увеличивало продолжительность)
- Теперь постоянные ограничения всегда имеют приоритет над временными
- Если кто-то вновь подключится к тому же слоту, к нему больше не будет применяться кляп
- Недопустимые значения в `amx_gag`(например, `abc`в минутах) больше не приводят к постоянному блокированию
- Если два администратора одновременно накладывают ограничение на одного и того же игрока, их причины больше не перезаписывают друг друга
- `GAG_TIME = 0` в фильтре нецензурных слов теперь означает «постоянный» (ранее срок действия истекал мгновенно)
- Команды консоли сервера больше не транслируют свои результаты всем игрокам
- В интерфейсе HUD «Постоянный кляп» теперь отображается фактический тип кляпа
- Устранены сбои, вызванные неверными типами гагов в базе данных или конфигурации
### 🚀 Новые функции
- `amx_gag` теперь требуется только имя игрока — время, причина и тип являются необязательными
- Причины в могут`amx_gag` содержать пробелы без кавычек
- Все административные команды теперь выдают ответы в консоли (и работают из консоли сервера / rcon)
- Добавлена опция`BYPASS_ACCESS` — администраторы с этим флагом обходят фильтр нецензурных слов
- Полная поддержка кириллицы и кодировки UTF-8 для имен и причин
- Таблица истории «заткновений» для постепенного ужесточения наказания
### ⚙️ Оптимизации
- **1 запрос к базе данных за раунд вместо 64** (одновременная синхронизация раунда для всех игроков)
- Гэггинг больше не приводит к блокировке сервера во время ожидания ответа от базы данных
- `amx_gaglist` больше не приводит к зависанию сервера при использовании в игре
- Добавлены индексы базы данных для быстрого поиска (создаются автоматически)
- Файл настроек считывается один раз, а не по одному разу для каждого параметра
- Защита от спама для сообщения «Вы заблокированы»
- Автоматическое восстановление соединения с базой данных в случае его обрыва
- Удалены ненужные задачи и мёртвый код
---
## 🕘 ПРЕДЫДУЩЕЕ ОБНОВЛЕНИЕ (версия 1.1)
### 🐞 Исправления ошибок
- Исправлено обнаружение флага администратора (неуязвимость)
- Устранены зависания сервера, вызванные SQL-запросами (теперь они выполняются асинхронно)
- Исправлена проблема с двойным наложением наказаний при повторном подключении
- Исправлен фильтр нецензурных слов (теперь происходит поиск только по целым словам)
- Устранены уязвимости, связанные с SQL-инъекцией
- Устранены проблемы с меню администратора, возникавшие при большом количестве игроков
- Исправлена проблема с надежностью хранения данных о наказаниях в базе данных
- Удален ненужный/устаревший код
### 🚀 Новые функции
- Добавлена система иммунитета администратора (на основе флагов)
- Добавлен таймер прогрессивного наказания
- Добавлена команда для `/gagstatus`игрока
- Добавлена команда `amx_gaginfo`администратора
- Добавлен таймер на экране для игроков с завязанным ртом
- Улучшенная система настройки (больше опций, более простая настройка)
---
## 📞 КОНТАКТЫ
illusion @ CodeStrike.STORE