broo

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)

Установка

  1. Скачайте и установите CounterStrikeSharp
  2. (Рекомендуется) Установите MenuManagerCS2 для кнопочного меню
  3. Скомпилируйте плагин:

   dotnet build -c Release
   

  1. Скопируйте содержимое bin/Release/net8.0/ в:

   game/csgo/addons/counterstrikesharp/plugins/VoteSystem/
   

  1. Перезагрузите сервер — файл config.json создастся автоматически
  2. Настройте config.json под ваш сервер
Примечание: MenuManagerApi.dll не требуется для сборки. Плагин подключается к MenuManager через рефлексию в рантайме.

Команды

Для игроков

КомандаАлиасОписание
!votecss_voteОткрыть главное меню голосования
!votekickcss_votekickГолосование за кик
!votebancss_votebanГолосование за бан
!votegagcss_votegagГолосование за блокировку текстового чата
!votemutecss_votemuteГолосование за блокировку голосового чата
!ycss_yПроголосовать ЗА
!ncss_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_secondsint30Длительность голосования в секундах
vote_cooldown_secondsint60Кулдаун между голосованиями
vote_pass_percentfloat0.55Процент голосов «ЗА» для прохождения (0.55 = 55%)
min_players_to_voteint3Минимальное количество игроков на сервере
ban_duration_minutesint30Длительность бана в минутах
gag_duration_secondsint600Длительность блокировки текстового чата
mute_duration_secondsint600Длительность блокировки голосового чата
allow_votekickbooltrueРазрешить голосование за кик
allow_votebanbooltrueРазрешить голосование за бан
allow_votegagbooltrueРазрешить голосование за блокировку чата
allow_votemutebooltrueРазрешить голосование за блокировку войса
ban_system_typestring"both"Система наказаний (см. таблицу ниже)
protect_adminsbooltrueЗащита администраторов от голосований
admin_permission_cancelstring"@css/kick"Флаг для команды !votecancel
admin_protection_flagstring"@css/kick"Флаг защиты от голосований
show_midvote_statusbooltrueПромежуточный результат
allow_early_finishbooltrueДосрочное завершение
menu_typeint3Тип меню (см. таблицу ниже)
freeze_on_menubooltrueЗамораживать игрока при открытии меню

Типы меню (menu_type)

ЗначениеТипОписание
0ChatMenuТекстовое меню в чате
1ConsoleMenuМеню в консоли
2HtmlMenuПо центру экрана (нумерация)
3ButtonMenuWASD + E/R (требуется [FORK] MenuManager)

Системы наказаний (ban_system_type)

ЗначениеБанGag (чат)Mute (войс)
"iks"css_bancss_gagcss_mute
"as"mm_banmm_gagmm_mute
"both"Обе системыОбе системыОбе системы

Как работает голосование

  1. Игрок открывает меню (!vote) или вводит команду (!votekick и т.д.)
  2. Выбирает тип наказания → игрока → причину
  3. В чат всем игрокам выводится объявление о голосовании
  4. Игроки голосуют: !y (ЗА) или !n (ПРОТИВ)
  5. На середине времени показывается промежуточный результат
  6. По истечении времени (или досрочно) подсчитываются голоса
  7. Если процент голосов «ЗА» от общего числа игроков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 через рефлексию в рантайме.

Обновление

  1. Остановите сервер (или выгрузите плагин)
  2. Замените VoteSystem.dll в папке плагина
  3. Удалите старый config.json — он пересоздастся с новыми параметрами
  4. Запустите сервер

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 для закрытия.

Последние обновления

Обновлений пока нет