VoteSystem v1.5.0
Плагин голосования для CS2 на платформе CounterStrikeSharp.
Позволяет игрокам голосовать за кик, бан, блокировку чата (gag) и блокировку голоса (mute) через интерактивное меню с поддержкой [FORK] MenuManager.
Возможности
- 4 типа наказаний: кик, бан, блокировка текстового чата (gag), блокировка голосового чата (mute)
- Интерактивное меню с навигацией WASD + E/R через [FORK] MenuManager
- Кнопка «← Назад» на каждом уровне меню для возврата к предыдущему
- Пагинация A/D для длинных списков игроков
- Заморозка игрока при открытии меню — работает для всех, включая обычных игроков
- Поддержка систем наказаний: IksAdmin, Admin System или обе одновременно
- Предустановленные причины для каждого типа наказания + возможность ввести свою
- Ввод своей причины прямо в чат — сообщение перехватывается и не показывается другим игрокам
- Защита администраторов от голосований (настраиваемый флаг)
- Промежуточный результат на середине голосования
- Досрочное завершение если все игроки проголосовали
- Кулдаун между голосованиями
- Минимальное количество игроков для начала голосования
- Полностью настраиваемый конфиг с русскими комментариями (автогенерация при первом запуске)
Зависимости
| Название | Обязательно | Назначение |
|---|---|---|
| CounterStrikeSharp | ✅ | Платформа для плагинов |
| MenuManagerCS2 | ❌ | Кнопочное меню (WASD + E/R). Без него — стандартное меню CSS |
| IksAdmin | ❌ | Система наказаний (css_ban, css_gag, css_mute) |
| Admin System | ❌ | Система наказаний (mm_ban, mm_gag, mm_mute) |
Установка
- Скачайте и установите CounterStrikeSharp
- (Рекомендуется) Установите MenuManagerCS2 для кнопочного меню
- Скомпилируйте плагин:
dotnet build -c Release
- Скопируйте содержимое
bin/Release/net8.0/в:
game/csgo/addons/counterstrikesharp/plugins/VoteSystem/
- Перезагрузите сервер — файл
config.jsonсоздастся автоматически - Настройте
config.jsonпод ваш сервер
Примечание: MenuManagerApi.dll не требуется для сборки. Плагин подключается к MenuManager через рефлексию в рантайме.
Команды
Для игроков
| Команда | Алиас | Описание |
|---|---|---|
!vote | css_vote | Открыть главное меню голосования |
!votekick | css_votekick | Голосование за кик |
!voteban | css_voteban | Голосование за бан |
!votegag | css_votegag | Голосование за блокировку текстового чата |
!votemute | css_votemute | Голосование за блокировку голосового чата |
!y | css_y | Проголосовать ЗА |
!n | css_n | Проголосовать ПРОТИВ |
Команды без аргументов открывают меню выбора игрока. С аргументами работают напрямую:
!votekick Nickname причина
!voteban #3 читы
Для администраторов
| Команда | Флаг | Описание |
|---|---|---|
!votecancel | @css/kick | Отменить активное голосование |
!votereload | @css/root | Перезагрузить конфигурацию |
Меню голосования
Навигация (с MenuManager)
| Клавиша | Действие |
|---|---|
| W | Вверх |
| S | Вниз |
| A | Предыдущая страница |
| D | Следующая страница |
| E | Выбрать |
| R | Закрыть |
Без MenuManager — стандартное CSS-меню с цифрами.
Каждый игрок может выбрать тип меню для себя через !mm.
Структура меню
★ Голосование
├── Кикнуть игрока → Выбор игрока → Выбор причины → Старт голосования
├── Забанить игрока → Выбор игрока → Выбор причины → Старт голосования
├── Заблокировать чат → Выбор игрока → Выбор причины → Старт голосования
└── Заблокировать войс → Выбор игрока → Выбор причины → Старт голосования
На каждом уровне (кроме главного) доступна кнопка «← Назад» для возврата к предыдущему меню.
Предустановленные причины
| Кик | Бан | Блокировка чата | Блокировка войса |
|---|---|---|---|
| АФК | Читы | Флуд в чате | Флуд в микро |
| Токсик | Токсик | Оскорбление | Оскорбление |
| Слив раунда | Оскорбление | Реклама | Громкая музыка |
| Мешает команде | Слив раунда | Спам | Крик |
| Своя причина | Своя причина | Своя причина | Своя причина |
При выборе «Своя причина» плагин попросит написать причину в чат. Сообщение будет перехвачено и не покажется другим игрокам.
Конфигурация
Файл config.json создаётся автоматически в папке плагина при первом запуске.
После изменений используйте !votereload или перезагрузите сервер.
{
// Длительность голосования в секундах
"vote_duration_seconds": 30,
// Кулдаун между голосованиями в секундах
"vote_cooldown_seconds": 60,
// Процент голосов "ЗА" от общего числа игроков (0.55 = 55%)
"vote_pass_percent": 0.55,
// Минимальное количество игроков для голосования
"min_players_to_vote": 3,
// Длительность бана в минутах
"ban_duration_minutes": 30,
// Длительность блокировки текстового чата в секундах
"gag_duration_seconds": 600,
// Длительность блокировки голосового чата в секундах
"mute_duration_seconds": 600,
// Разрешить типы голосований
"allow_votekick": true,
"allow_voteban": true,
"allow_votegag": true,
"allow_votemute": true,
// Система наказаний: "iks", "as" или "both"
"ban_system_type": "both",
// Защита администраторов от голосований
"protect_admins": true,
// Флаг для отмены голосования (!votecancel)
"admin_permission_cancel": "@css/kick",
// Флаг защиты от голосований
"admin_protection_flag": "@css/kick",
// Показывать промежуточный результат на середине голосования
"show_midvote_status": true,
// Досрочное завершение если все проголосовали
"allow_early_finish": true,
// Тип меню: 0=Chat, 1=Console, 2=Html, 3=ButtonMenu (WASD)
"menu_type": 3,
// Замораживать игрока при открытии меню
"freeze_on_menu": true
}
Описание параметров
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
vote_duration_seconds | int | 30 | Длительность голосования в секундах |
vote_cooldown_seconds | int | 60 | Кулдаун между голосованиями |
vote_pass_percent | float | 0.55 | Процент голосов «ЗА» для прохождения (0.55 = 55%) |
min_players_to_vote | int | 3 | Минимальное количество игроков на сервере |
ban_duration_minutes | int | 30 | Длительность бана в минутах |
gag_duration_seconds | int | 600 | Длительность блокировки текстового чата |
mute_duration_seconds | int | 600 | Длительность блокировки голосового чата |
allow_votekick | bool | true | Разрешить голосование за кик |
allow_voteban | bool | true | Разрешить голосование за бан |
allow_votegag | bool | true | Разрешить голосование за блокировку чата |
allow_votemute | bool | true | Разрешить голосование за блокировку войса |
ban_system_type | string | "both" | Система наказаний (см. таблицу ниже) |
protect_admins | bool | true | Защита администраторов от голосований |
admin_permission_cancel | string | "@css/kick" | Флаг для команды !votecancel |
admin_protection_flag | string | "@css/kick" | Флаг защиты от голосований |
show_midvote_status | bool | true | Промежуточный результат |
allow_early_finish | bool | true | Досрочное завершение |
menu_type | int | 3 | Тип меню (см. таблицу ниже) |
freeze_on_menu | bool | true | Замораживать игрока при открытии меню |
Типы меню (menu_type)
| Значение | Тип | Описание |
|---|---|---|
0 | ChatMenu | Текстовое меню в чате |
1 | ConsoleMenu | Меню в консоли |
2 | HtmlMenu | По центру экрана (нумерация) |
3 | ButtonMenu | WASD + E/R (требуется [FORK] MenuManager) |
Системы наказаний (ban_system_type)
| Значение | Бан | Gag (чат) | Mute (войс) |
|---|---|---|---|
"iks" | css_ban | css_gag | css_mute |
"as" | mm_ban | mm_gag | mm_mute |
"both" | Обе системы | Обе системы | Обе системы |
Как работает голосование
- Игрок открывает меню (
!vote) или вводит команду (!votekickи т.д.) - Выбирает тип наказания → игрока → причину
- В чат всем игрокам выводится объявление о голосовании
- Игроки голосуют:
!y(ЗА) или!n(ПРОТИВ) - На середине времени показывается промежуточный результат
- По истечении времени (или досрочно) подсчитываются голоса
- Если процент голосов «ЗА» от общего числа игроков ≥
vote_pass_percentи ЗА > ПРОТИВ — наказание применяется
Пример в чате
══════ ГОЛОСОВАНИЕ ══════
[Vote] Player1 начал голосование: БАН
[Vote] Игрок: Player2
[Vote] Причина: Читы
[Vote] !y — ЗА !n — ПРОТИВ (30 сек.)
══════════════════════════
[Vote] Промежуточный итог: 4 ЗА / 1 ПРОТИВ
══════ ГОЛОСОВАНИЕ ПРИНЯТО ══════
[Vote] 7 ЗА / 2 ПРОТИВ (58%)
[Vote] БАН игрока Player2 одобрен!
═════════════════════════════════
Защита от злоупотреблений
- Нельзя голосовать против себя
- Нельзя голосовать против администраторов (настраиваемый флаг)
- Кулдаун между голосованиями
- Минимальное количество игроков на сервере
- Нельзя голосовать дважды в одном голосовании
- Администраторы могут отменить любое голосование (
!votecancel)
Сборка из исходников
cd VoteSystem
dotnet build -c Release
Результат: bin/Release/net8.0/VoteSystem.dll
Примечание: MenuManagerApi.dll не требуется для сборки. Плагин подключается к MenuManager через рефлексию в рантайме.
Обновление
- Остановите сервер (или выгрузите плагин)
- Замените
VoteSystem.dllв папке плагина - Удалите старый
config.json— он пересоздастся с новыми параметрами - Запустите сервер
FAQ
Q: Меню отображается с номерами, а не кнопками WASD
A: Установите [FORK] MenuManager и выберите тип меню «WASD» в настройках (!mm). Каждый игрок настраивает тип меню для себя.
Q: В базе данных нет никнейма забаненного игрока
A: Убедитесь что ban_system_type установлен в "iks" или "both". Плагин использует команды для онлайн-игроков (css_ban #userid), которые автоматически подхватывают никнейм.
Q: Голосование не начинается
A: Проверьте: достаточно ли игроков на сервере (min_players_to_vote), не идёт ли уже голосование, прошёл ли кулдаун.
Q: Можно ли использовать без IksAdmin и Admin System?
A: Да, !votekick работает без внешних систем. Для бана, gag и mute нужна хотя бы одна система наказаний.
Q: Как поменять язык меню?
A: Все строки захардкожены в коде. Для локализации измените строки в VoteSystem.cs и перекомпилируйте.
Q: Как работает кнопка «Назад»?
A: MenuManager автоматически добавляет кнопку «← Назад» на каждом уровне меню (кроме главного). Нажмите E на ней или R для закрытия.