# Система блокировок CodeStrike
**Полная система банов для Counter-Strike 1.6 с реальной базой данных, современным меню, интеграцией с Discord и более чем 100 настройками.**
Она полностью заменяет систему банов, встроенную в AMX Mod X. Вместо списка банов, записываемого в текстовый файл на отдельном сервере, вы получаете полноценную базу данных, полную историю для каждого игрока, лаконичное внутриигровое меню и оперативные уведомления в Discord.
---
## Для чего это нужно
Когда заблокированный игрок пытается присоединиться к игре, система сопоставляет его по SteamID и IP-адресу, исключает его из игры и выводит в его консоли информацию о причине блокировки, оставшемся сроке блокировки и порядке обжалования. Весь этот текст вы пишете сами — ни одна часть не встроена в плагин.
Когда администратор блокирует кого-либо, все пользователи сервера видят это в чате и на экране; информация о блокировке сохраняется в базе данных, в файле журнала и в вашем канале Discord с полными подробностями.
Когда в игру вступает игрок, на которого уже наложены ограничения, ваши администраторы получают предупреждение в чате. Вы узнаете, что этот человек уже подвергался наказанию, ещё до того, как он что-либо совершит.
---
## Основные особенности
### База данных
* **SQLite по умолчанию** — работает сразу после установки, не требует сервера баз данных и никакой настройки
* **MySQL** — достаточно одной строки в конфигурации, чтобы включить эту функцию
* Одна база данных MySQL может обслуживать несколько серверов, поэтому **запрет, наложенный на одном из них, распространяется на все остальные**
* Каждый запрос обрабатывается в отдельном потоке — база данных никогда не приводит к зависанию вашего сервера, даже при медленном соединении
* Индексируется по SteamID, IP-адресу, имени и статусу, поэтому поиск остается быстрым даже при наличии десятков тысяч банов
### Запреты
* Блокировка по **SteamID**, **IP-адресу** и, по желанию, по **никнейму**
* **Временные и постоянные** запреты
* Гибкий формат времени: `30`, `30m`, `2h`, `3d`, `1w`, или `0`для постоянного режима
* **Офлайн-блокировки** по SteamID или IP-адресу, даже если игрок не находится на сервере
* Готовый список причин, по которым вы редактируете свои записи, а также возможность для администратора ввести свои собственные причины
* Причина может иметь собственную продолжительность, поэтому при её выборе этап определения продолжительности пропускается, и происходит непосредственное подтверждение
* Просроченные запреты помечаются автоматически
### Меню
* Начинается со слов `amx_banmenu`
* Блокировка в три этапа: игрок → причина → срок → экран подтверждения с кратким отчетом
* Список активных банов, полная история и поиск по SteamID, IP-адресу или части имени
* Снять бан через меню или полностью удалить запись о бане — это два разных действия, поэтому вам решать, сохранить ли игроку его историю
* Цветовая маркировка: действующие запреты обозначены красным, отмененные — серым, а продолжительность зависит от строгости наказания
### Discord
* Надлежащее уведомление при каждом блокировании и разблокировании
* Отображает игрока, SteamID, IP-адрес, администратора, причину, продолжительность, дату истечения срока и ID бана
* Каждое поле можно скрыть отдельно
* Цвета, названия, нижний колонтитул, имя бота и аватар — все это можно настроить
* IP-адрес можно скрыть (`85.11.44.xxx`), если вы не хотите его раскрывать в Discord
### История запретов
* Полная история каждого игрока, которая сохраняется даже после снятия бана
* Администраторам, у которых установлен выбранный вами флаг, в чате отображается уведомление, когда к игре присоединяется игрок, ранее подвергавшийся бану
* **Предупреждение об обходе бана** — если кто-то подключается с новым SteamID с IP-адреса, на который наложен действующий бан, об этом сообщается вашим администраторам. Никто при этом не получает бан, поэтому использование общего подключения никогда не лишает невиновного игрока его места в игре
* Поиск по SteamID, IP-адресу или имени — через меню или консоль
* `amx_banstats` показывает общие показатели, количество банов за последние 7 дней и то, какие администраторы назначают больше всего наказаний
### HUD и звук
* Сообщение на экране о блокировке и о снятии блокировки
* Классический HUD или DHUD — на ваш выбор
* Цвета, расположение, эффекты и временные параметры — всё это задаётся в файле конфигурации
* Звуковой сигнал о блокировке и разблокировке, слышимый всем игрокам на сервере (по умолчанию ничего не настроено)
### Журналы
* Баннер запуска в консоли сервера, отображающий активную конфигурацию и текущие счетчики банов
* Отдельный файл журнала с датой в названии
* Каждый случай блокировки, разблокировки и сброса списка фиксируется — кто, кого, когда, на какой срок и почему
---
## Команды
| Команда | Для чего это нужно |
|---|---|
| `amx_banmenu` | Открывает главное меню |
| `amx_unbanmenu` | Открывает список активных запретов напрямую |
| `amx_ban <имя\|#userid\|STEAM_ID\|IP> <time>[причина]` | Заблокировать игрока |
| `amx_unban <STEAM_ID\|IP\|#banid\|имя> [причина]` | Снимает запрет |
| `amx_bans` | Отображает список действующих запретов в консоли |
| `amx_banhistory <STEAM_ID\|IP\|имя>` | Полная история одного игрока |
| `amx_banstats` | Общее количество банов и администраторы, наложившие наибольшее количество банов |
| `amx_bans_reload` | Перезагружает настройки без смены карты |
| `amx_clearbans <active\|все> CONFIRM` | Очищает весь список |
Кроме того, она перенимает управление над и`amx_banip` `amx_addban`, поэтому ничего не возвращается к стандартной системе запретов AMX Mod X.
Каждая команда имеет свой собственный настраиваемый флаг.
---
## Защита от ошибок
Плагин разработан таким образом, что ошибка администратора или некорректная конфигурация не могут нанести ущерб.
* **Иммунитет** — игроки, у которых есть флаг по вашему выбору, не могут быть забанены, за исключением случаев, когда это делает администратор с флагом более высокого уровня
* **Сроки ограничений** — установить максимальный срок, на который обычный администратор может наложить бан, а право налагать пожизненные баны оставить исключительно за владельцем
* **Требуется подтверждение** — `amx_clearbans`требуется явное подтверждение`CONFIRM`, а при удалении отдельной записи из меню сначала запрашивается подтверждение. Обе функции имеют собственные флаги, поэтому ничего не удаляется случайно
* **Отсутствие SQL-инъекций** — прозвища и причины проходят фильтрацию до того, как попадают в запрос
* **Некорректная конфигурация ничему не мешает** — каждое значение проверяется при загрузке и приводится к безопасному диапазону
---
## Требования
* AMX Mod X **версии 1.9 или более поздней** — скомпилировано и протестировано на версии 1.10
* Модуль **SQLite** или **MySQL** (SQLite входит в состав стандартной установки)
* Модуль **EasyHttp** — только если вам нужны уведомления из Discord
Плагин поставляется **в скомпилированном виде и с полным исходным кодом**.
---
## Установка
1. Загрузить `codestrike_bans.amxx`в `addons/amxmodx/plugins/`
2. Добавьте это к **вышеуказанному**`plugins.ini` и`admincmd.amxx` `plmenu.amxx`
3. Перезапустите сервер
Оба файла конфигурации создаются автоматически при первом запуске в папке `addons/amxmodx/configs/CodeStrikePlugins/`. Создавать базу данных и импортировать таблицы не требуется — SQLite самостоятельно справляется со всем этим.
---
## Настройка
Всё управляется двумя файлами, при этом не требуется изменять ни одной строки кода:
**`codestrike_bans.ini`** — 110 настроек в 14 разделах: доступ и флаги, база данных, проверка присоединений, история, Discord, журналы, меню, HUD, звуки, сообщения в чате, список причин и список продолжительности.
**`codestrike_bans_info.ini`** — всё, что видит заблокированный игрок: текст в консоли, текст в окне «kick» и инструкции по подаче апелляции.
В текстах поддерживаются заполнители, которые заполняются автоматически:
```
%name% %steamid% %ip% %reason% %admin% %length%
%expire% %timeleft% %banid% %date% %server% %bancount% %banname%
```
Любые изменения применяются с помощью `amx_bans_reload`, без изменения карты.
---
## Краткий обзор
| | |
|---|---|
| Версия | 1.0 |
| Автор | illusion @ CodeStrike |
| База данных | SQLite или MySQL |
| Настройки | 110 параметров в 2 файлах ini |
| Код | Более 5450 строк, компилируется без единого предупреждения |
| Язык | Каждая отображаемая строка содержится в файлах ini и может быть переведена |
---
*Любой текст, отображаемый плагином, редактируется в настройках. Вам никогда не придётся вносить изменения в код для перевода или адаптации к вашему серверу.*