DENZEL519
Работаю с AI !
- Сообщения
- 416
- Реакции
- 197
В связи с тем что я перестал работать с одним из проектов, пусть меня не навидят другие, я сливаю работы которые делал.
Гибкая настройка (можно отключить адаптивный баланс, изменить веса).
Учет предпочтений (игроки реже перемещаются на нелюбимую сторону).
Защита от злоупотреблений (новые игроки и недавно перемещенные защищены).
Работает без перезагрузки (настройки применяются сразу после изменения конфига).
Выравнивает команды не только по количеству, но и по силе.
Учитывает предпочтения игроков.
Защищает от несправедливых перемещений.
Понятна в настройке через конфиг-файл.
Я сам ничего не проверял, нет возможности)
Настройка
В databases.cfg
добавить подключение к sql с именем smart_balancer
После запуска плагина, появится конфиг smart_balancer.cfg
PS Если плагин окажется лажей, всегда можно удалить его.
@Nekro, Версия 1.1
Авторы плагина теперь DENZEL519 & AI & Nekro
На гитхаб можешь залить свой, я не буду против. Ты лучше знаешь как данный плагин оптимизировать и улучшить)
V .1.1
V 1.2 DM
Полное описание работы плагина Smart Balancer
Этот плагин реализует интеллектуальную двухуровневую систему балансировки команд для Counter-Strike: Source (CSS) на движке SourceMod 1.11. Он сочетает автоматическое выравнивание численного состава и адаптивную балансировку по игровым показателям.1. Основные функции
1.1 Двухуровневая система балансировки
Вынужденный баланс (Force Balance)
- Когда активируется: При разнице в количестве игроков ≥ sm_balance_force_diff (по умолчанию 2).
- Как работает:
- Перемещает последнего подключившегося игрока из большей команды в меньшую.
- Игрок получает уведомление о причине перемещения.
- Пример: Если в команде T — 5 игроков, а в CT — 3, плагин переместит одного игрока из T в CT.
Адаптивный баланс (Adaptive Balance)
- Когда активируется: При равном количестве игроков, но разнице в силе команд ≥ sm_balance_adaptive_diff (шкала 1-10).
- Как работает:
- Анализирует K/D, победы, влияние игроков и находит оптимальную пару для обмена.
- Учитывает предпочтения сторон (если игрок выбрал !side ct, его реже будут перемещать в T).
- Пример: Если команда CT выигрывает подряд 5 раундов, а T постоянно проигрывает, плагин может поменять местами двух игроков.
1.2 Дополнительные механизмы
Функция | Описание | Настройка в конфиге |
---|---|---|
Защита новых игроков | Новые игроки не перемещаются первые NEW_PLAYER_GRACE_TIME секунд. | sm_balance_newplayer_time |
Иммунитет после перемещения | Перемещенный игрок защищен от повторного баланса на BALANCE_IMMUNITY_TIME секунд. | sm_balance_immunity_time |
Визуальная индикация | Перемещенный игрок становится зеленым на 5 сек. и не получает урон. | — |
Сохранение статистики | K/D, победы, предпочтения сторон хранятся в SQLite-базе. | — |
Очистка неактивных | Игроки, не заходившие 30 дней, удаляются из БД. | — |
2. Алгоритм работы
2.1 Как рассчитывается "сила" игрока?
Плагин использует комбинированный показатель Impact:
C-подобный:
Impact = (KDR × KDR_Weight) + (WinRate × WinStreak_Weight) + (OldImpact × Impact_Weight)
- KDR = Убийства / Смерти (если смертей 0, KDR = убийства).
- WinRate = Победы / (Победы + Поражения).
- Веса настраиваются в конфиге (sm_balance_kdr_weight, sm_balance_winstreak_weight).
2.2 Когда срабатывает балансировка?
- В конце каждого раунда (после round_end).
- Проверяет условия:
- Если |T_count - CT_count| ≥ sm_balance_force_diff → Вынужденный баланс.
- Если T_count == CT_count, но дисбаланс силы ≥ sm_balance_adaptive_diff → Адаптивный баланс.
3. Примеры сценариев
Сценарий 1: Сервер заполняется неравномерно
- Ситуация: На сервер заходят 5 игроков в T и 3 в CT.
- Действие плагина:
- Активируется Вынужденный баланс, перемещает последнего зашедшего игрока из T в CT.
- Игрок получает сообщение: "Вы были перемещены в CT. Причина: Вынужденный баланс".
Сценарий 2: Одна команда доминирует
- Ситуация: Команда CT выиграла 5 раундов подряд, их средний KDR = 1.8, а у T = 0.6.
- Действие плагина:
- Активируется Адаптивный баланс, находит двух игроков с близким Impact и меняет их местами.
- В логах: *"Обмен игроками Player1 (CT) и Player2 (T). Улучшение баланса: +0.42"*.
4. Особенности




5. Возможные проблемы и решения
Проблема | Решение |
---|---|
Игроки жалуются на частые перемещения | Увеличьте sm_balance_immunity_time (например, до 300 сек). |
Баланс слишком агрессивный | Уменьшите sm_balance_adaptive_diff (например, до 3). |
Новые игроки попадают в проигрывающую команду | Увеличьте sm_balance_newplayer_time (например, до 180 сек). |
Нет логов | Включите sm_balance_debug "1" и проверьте logs/smart_balancer.log. |
Итог
Smart Balancer — это умная, гибкая и прозрачная система балансировки, которая:



Я сам ничего не проверял, нет возможности)
Настройка
В databases.cfg
добавить подключение к sql с именем smart_balancer
Пример:
"smart_balancer"
{
"driver" "sqlite"
"database" "smart_balancer-local"
}
После запуска плагина, появится конфиг smart_balancer.cfg
C-подобный:
// Минимальная разница в количестве игроков для вынужденного баланса (1-10)
sm_balance_force_diff "2"
// Уровень дисбаланса для адаптивного баланса (1-10, где 10 — сильный дисбаланс)
sm_balance_adaptive_diff "5"
// Весовые коэффициенты (0.0–1.0):
sm_balance_impact_weight "0.5" // Общее влияние игрока (убийства/смерти/победы)
sm_balance_kdr_weight "0.3" // Вес K/D (убийства к смертям)
sm_balance_winstreak_weight "0.2" // Вес победной серии
// Дополнительные настройки:
sm_balance_min_players "4" // Минимальное число игроков для баланса
sm_balance_immunity_time "180" // Иммунитет после перемещения (сек)
sm_balance_newplayer_time "120" // Защита новых игроков (сек)
sm_balance_debug "0" // Режим отладки (1 — включить логи)
PS Если плагин окажется лажей, всегда можно удалить его.
@Nekro, Версия 1.1
Основные изменения:
- Перенос инициализации БД и таймера в OnConfigsExecuted()
- Удаление куков - теперь вся информация хранится только в SQLite
- Удаление лишних return в void-функциях
- Удаление #include <sourcemod> - так как подключается автоматически
- Фикс таймера очистки БД - теперь он корректно удаляется при смене карты
- Оптимизация кода - уменьшено количество лишних проверок и упрощена логика
Авторы плагина теперь DENZEL519 & AI & Nekro
На гитхаб можешь залить свой, я не буду против. Ты лучше знаешь как данный плагин оптимизировать и улучшить)
V .1.1
Авторы плагина теперь DENZEL519 & AI & Nekro & AlastarА можно ли добавить балансировку игроков не только в конце раунда, а, допустим, для дезматч и гангейм режимов, через заданный временной интервал?
Основные изменения и улучшения:
- Периодическая балансировка:
- Добавлена поддержка балансировки по таймеру для определенных режимов (gungame, deathmatch, armsrace)
- Настраиваемый интервал балансировки через sm_balance_interval
- Настраиваемый список режимов через sm_balance_modes
- Улучшенная система определения режима игры:
- Проверка режима при старте игры и смене карты
- Более надежное сравнение режимов с учетом пробелов и регистра
- Оптимизация кода:
- Вынесена общая функция проверки баланса CheckBalance()
- Улучшена структура кода для лучшей читаемости
- Дополнительная отладка:
- Добавлены сообщения отладки для отслеживания работы таймера балансировки
- Подробное логирование процесса определения игрового режима
- Безопасность:
- Проверка на null для ConVar mp_gamemode
- Обработка ошибок при работе с базой данных
Файл конфига smart_balancer.cfg:
// Версия Smart Balancer
sm_smartbalancer_version "1.2"
// Минимальная разница для вынужденного баланса (def: 2, min: 1.000000)
sm_balance_force_diff "2"
// Минимальный дисбаланс для адаптивного баланса (0-10) (def: 5, min: 1.000000, max: 10.000000)
sm_balance_adaptive_diff "5"
// Вес общего влияния игрока (def: 0.5, min: 0.000000, max: 1.000000)
sm_balance_impact_weight "0.5"
// Вес K/D соотношения (def: 0.3, min: 0.000000, max: 1.000000)
sm_balance_kdr_weight "0.3"
// Вес победной серии (def: 0.2, min: 0.000000, max: 1.000000)
sm_balance_winstreak_weight "0.2"
// Минимальное количество игроков (def: 4, min: 2.000000)
sm_balance_min_players "4"
// Иммунитет после перемещения (сек) (def: 180, min: 0.000000)
sm_balance_immunity_time "180"
// Защита новых игроков (сек) (def: 120, min: 0.000000)
sm_balance_newplayer_time "120"
// Режим отладки (def: 0, min: 0.000000, max: 1.000000)
sm_balance_debug "0"
// Интервал балансировки для определенных режимов (сек) (def: 120, min: 30.000000)
sm_balance_interval "120"
// Режимы игры с балансировкой по таймеру (через запятую)
sm_balance_modes "gungame,deathmatch,armsrace"
Обозначения:
Основные параметры балансировки:
sm_balance_force_diff - минимальная разница в количестве игроков для принудительного баланса
sm_balance_adaptive_diff - уровень дисбаланса (1-10) для активации адаптивного баланса
Весовые коэффициенты:
sm_balance_impact_weight - влияние общего рейтинга игрока
sm_balance_kdr_weight - влияние K/D соотношения
sm_balance_winstreak_weight - влияние победных серий
Защитные механизмы:
sm_balance_immunity_time - защита от повторного перемещения
sm_balance_newplayer_time - защита новичков от балансировки
Настройки для специальных режимов:
sm_balance_interval - интервал балансировки для режимов типа Deathmatch
sm_balance_modes - список режимов с периодической балансировкой
sm_balance_debug - включение подробного логирования
V 1.2 DM
Нет, боты там исключеныА ботов он тоже учитывает?
Сообщения автоматически склеены:
Авторы плагина теперь DENZEL519 & AI & Nekro & Alastar & Sniper45301А ботов он тоже учитывает?
Ключевые особенности версии 1.3:
- Поддержка ботов:
- Добавлен параметр sm_balance_bots (1 - учитывать, 0 - игнорировать)
- Упрощённая система расчёта Impact для ботов
- Боты перемещаются без уведомлений и защиты
- Оптимизированная балансировка:
- Приоритет перемещения реальных игроков
- Боты используются только при недостатке реальных игроков
- Улучшенная отладка:
- Чёткое разделение в логах между ботами и игроками
- Подробное логирование всех перемещений
- Стабильность:
- Дополнительные проверки IsClientInGame()
- Защита от ошибок при работе с ботами
- Гибкость:
- Можно отключить учёт ботов без изменения кода
- Настройка через конфиг-файл
Основные настройки балансировки
C-подобный:
// Версия плагина (не изменять)
sm_smartbalancer_version "1.3"
// Минимальная разница игроков для принудительного баланса (1-10)
// Пример: при значении 2 баланс сработает если в командах 5vs3
sm_balance_force_diff "2"
// Чувствительность адаптивного баланса (1-10)
// Чем выше значение, тем реже срабатывает баланс по скиллу
sm_balance_adaptive_diff "5"
Весовые коэффициенты (влияние параметров)
C-подобный:
// Общий вес игрока (0.0-1.0)
sm_balance_impact_weight "0.5"
// Влияние K/D соотношения (0.0-1.0)
sm_balance_kdr_weight "0.3"
// Влияние победных серий (0.0-1.0)
sm_balance_winstreak_weight "0.2"
Условия балансировки
C-подобный:
// Минимальное количество игроков для работы баланса
sm_balance_min_players "4"
// Иммунитет после перемещения (в секундах)
sm_balance_immunity_time "180"
// Защита новичков (в секундах после подключения)
sm_balance_newplayer_time "120"
Настройки для специальных режимов
C-подобный:
// Интервал балансировки для DM/GG режимов (в секундах)
sm_balance_interval "120"
// Режимы с периодической балансировкой (через запятую)
sm_balance_modes "gungame,deathmatch,armsrace"
Настройки ботов
C-подобный:
// Учитывать ботов при балансировке (1 - да, 0 - нет)
sm_balance_bots "1"
Отладка
C-подобный:
// Режим отладки (1 - включить логирование, 0 - выключить)
sm_balance_debug "0"
Рекомендуемые значения:
- Для серверов с ботами:
C-подобный:sm_balance_bots "1" sm_balance_min_players "6"
- Для соревновательных серверов:
C-подобный:sm_balance_adaptive_diff "3" sm_balance_immunity_time "300"
- Для публичных серверов:
C-подобный:sm_balance_newplayer_time "180" sm_balance_force_diff "3"
- Для DM/GG режимов:
C-подобный:sm_balance_interval "90" sm_balance_modes "gungame,deathmatch"
Данный плагин связан с Custom Weapons без его инклудов компилить не будет. Я компилил в sourcemod 1.10.
Не забудьте добавить "inspect" "номер" в addons\sourcemod\configs\custom_weapons.txt
Пример:
Именно
// Осмотр оружия
"inspect" "6"
Сам номер берётся если декомпилить модель оружия
Баги для исправления:
Баг вот какой, что при использовании анимации при нажатии на F включается фонарь, хотя он должен быть заблочен когда включена функция осмотра sm_inspect.
Я надеюсь тут найдутся люди которые допилят плагин для своих серверов, или просто захотят помочь сообществу в его доработке. И выложат тут)
Не забудьте добавить "inspect" "номер" в addons\sourcemod\configs\custom_weapons.txt
Пример:
C-подобный:
"Weapons"
{
"knife" // Оружие (секция) без тэга "weapon_", "_projectile" и "planted_"
{
"flags" "" // Флаги доступа. Можно указывать несколько флагов или оставьте пустым, чтобы сделать доступным для всех
// Отображение названия на разных языках, если не найдено отображение, будет использован название секции
"ru" "Нож"
"en" "Knife"
// Категории, в каком меню будет отображаться данное оружие
// 0 - Автоматы
// 1 - Пистолеты-пулеметы
// 2 - Дробовики
// 3 - Пистолеты
// 4 - Ближний бой
// 5 - Взрывные
// 6 - Снайперские
"category" "4"
// Осмотр оружия
"inspect" "6"
"butterfly" // Под-выбор модели для оружия
{
"flags" "" // Флаги доступа. Можно указывать несколько флагов или оставьте пустым, чтобы сделать доступным для всех
// Отображение названия на разных языках, если не найдено отображение, будет использован название секции
"ru" "Лом"
"en" "Crowbar"
"view_model" "MDL Модель" // Путь до модели от первого лица
}
}
}
Именно
// Осмотр оружия
"inspect" "6"
Сам номер берётся если декомпилить модель оружия
Баги для исправления:
Баг вот какой, что при использовании анимации при нажатии на F включается фонарь, хотя он должен быть заблочен когда включена функция осмотра sm_inspect.
Я надеюсь тут найдутся люди которые допилят плагин для своих серверов, или просто захотят помочь сообществу в его доработке. И выложат тут)
Вложения
Последнее редактирование: