Key Bind Manager - Плагин для бинда клавиш на команды

DENZEL519

Работаю через AI !
Сообщения
502
Реакции
322

Описание:​

Плагин Key Bind Manager позволяет биндить любые клавиши игрока на выполнение команд через файл конфигурации. При нажатии назначенной клавиши автоматически выполняется указанная команда.

Key Bind Manager - Плагин для бинда клавиш на команды​


Основные возможности​

  • Бинд любых клавиш на команды через файл конфигурации
  • Поддержка всех основных клавиш Source Engine (E, R, ЛКМ, ПКМ, Пробел, Ctrl и т.д.)
  • Автоматическое создание файла конфигурации при первом запуске
  • Поддержка различных типов команд (SourceMod, чат, консольные)
  • Возможность включения/отключения биндов без перезагрузки плагина
  • Перезагрузка конфигурации без перезапуска сервера
  • Отслеживание только новых нажатий клавиш (не срабатывает при удержании)

Как работает плагин​


1. Инициализация
При запуске плагина:
  • Регистрируются команды для перезагрузки конфигурации:
    C-подобный:
    sm_keybind_reload
    и
    C-подобный:
    sm_kb_reload
  • Создается путь к файлу конфигурации:
    C-подобный:
    cfg/sourcemod/key_bind.cfg
  • Инициализируется массив для хранения биндов
  • Загружается конфигурация из файла

2. Загрузка конфигурации
Плагин читает файл
C-подобный:
cfg/sourcemod/key_bind.cfg
в формате KeyValues:
  • Если файл не существует - создается файл с примерами биндов
  • Если директория
    C-подобный:
    cfg/sourcemod
    не существует - она создается автоматически
  • Парсится секция
    C-подобный:
    "Binds"
    со всеми биндами
  • Каждый бинд проверяется на корректность (наличие клавиши и команды)
  • Некорректные бинды пропускаются с записью в лог
  • Все загруженные бинды сохраняются в памяти

3. Отслеживание нажатий клавиш
Плагин использует хук
C-подобный:
OnPlayerRunCmd
для отслеживания нажатий:
  • Каждый тик проверяются все зарегистрированные клавиши
  • Сравнивается текущее состояние кнопок с предыдущим
  • Если клавиша только что была нажата (не была нажата в прошлом кадре, но нажата сейчас) - выполняется команда
  • Состояние кнопок сохраняется для следующего тика
  • Команды выполняются через таймер с задержкой 0.0 для безопасного выполнения

4. Выполнение команд
В зависимости от типа команды используется соответствующий метод:
  • Команды чата (начинаются с
    C-подобный:
    !
    или
    C-подобный:
    /
    ) - выполняются через
    C-подобный:
    say
  • SourceMod команды (начинаются с
    C-подобный:
    sm_
    ) - выполняются через
    C-подобный:
    FakeClientCommand
  • Команды say/say_team - выполняются через
    C-подобный:
    FakeClientCommand
  • Обычные консольные команды - выполняются через
    C-подобный:
    ClientCommand

Поддерживаемые клавиши​

Плагин поддерживает следующие клавиши Source Engine:

НазваниеКлавишаОписание
C-подобный:
IN_USE
EИспользование/взаимодействие
C-подобный:
IN_RELOAD
RПерезарядка оружия
C-подобный:
IN_ATTACK
ЛКМАтака/стрельба
C-подобный:
IN_ATTACK2
ПКМАльтернативная атака/прицел
C-подобный:
IN_JUMP
ПробелПрыжок
C-подобный:
IN_DUCK
CtrlПриседание
C-подобный:
IN_FORWARD
WДвижение вперед
C-подобный:
IN_BACK
SДвижение назад
C-подобный:
IN_LEFT
AПоворот влево
C-подобный:
IN_RIGHT
DПоворот вправо
C-подобный:
IN_MOVELEFT
A (боковое)Боковое движение влево
C-подобный:
IN_MOVERIGHT
D (боковое)Боковое движение вправо
C-подобный:
IN_RUN
ShiftБег
C-подобный:
IN_WALK
Shift (альтернативный)Ходьба
C-подобный:
IN_ZOOM
ПКМ (в некоторых играх)Прицеливание
C-подобный:
IN_GRENADE1
4Первая граната
C-подобный:
IN_GRENADE2
5Вторая граната
C-подобный:
IN_WEAPON1
1Первое оружие
C-подобный:
IN_WEAPON2
2Второе оружие
C-подобный:
IN_SCORE
TabТаблица результатов
C-подобный:
IN_ALT1
QАльтернативная клавиша 1
C-подобный:
IN_ALT2
FАльтернативная клавиша 2

Файл конфигурации​


Расположение
Файл конфигурации находится по пути:
C-подобный:
cfg/sourcemod/key_bind.cfg

Формат файла
C-подобный:
"KeyBinds"
{
    "Binds"
    {
        "ИмяБинда1"
        {
            "key"          "IN_USE"
            "command"      "say_team Привет команде!"
            "enabled"      "1"
        }
     
        "ИмяБинда2"
        {
            "key"          "IN_RELOAD"
            "command"      "sm_menu"
            "enabled"      "0"
        }
    }
}

Параметры бинда
  • key - название клавиши (например,
    C-подобный:
    IN_USE
    ,
    C-подобный:
    IN_RELOAD
    )
  • command - команда для выполнения (может быть SourceMod командой, командой чата или консольной командой)
  • enabled - включен ли бинд (
    C-подобный:
    1
    - включен,
    C-подобный:
    0
    - выключен)

Примеры команд
  • C-подобный:
    say_team Привет команде!
    - сообщение в командный чат
  • C-подобный:
    sm_menu
    - открыть меню SourceMod
  • C-подобный:
    sm_noblock
    - выполнить команду NoBlock
  • C-подобный:
    !voteban
    - команда чата (будет выполнена как
    C-подобный:
    say !voteban
    )
  • C-подобный:
    /help
    - команда чата (будет выполнена как
    C-подобный:
    say /help
    )

Команды плагина​


sm_keybind_reload
  • Описание: Перезагружает конфигурацию биндов клавиш
  • Доступ: Администраторы с флагом
    C-подобный:
    ADMFLAG_CONFIG
  • Альтернатива:
    C-подобный:
    sm_kb_reload
  • Использование:
    C-подобный:
    sm_keybind_reload

Технические детали​


Структура данных
Каждый бинд хранится в структуре
C-подобный:
KeyBind
:
  • C-подобный:
    keyName[32]
    - название клавиши (строка)
  • C-подобный:
    keyFlag
    - флаг клавиши (число, битовая маска)
  • C-подобный:
    command[256]
    - команда для выполнения (строка)
  • C-подобный:
    enabled
    - включен ли бинд (булево значение)

Алгоритм работы
  1. При загрузке плагина читается файл конфигурации
  2. Все бинды загружаются в массив
    C-подобный:
    g_KeyBinds
  3. При каждом тике в
    C-подобный:
    OnPlayerRunCmd
    проверяются все бинды
  4. Для каждого бинда сравнивается текущее состояние кнопки с предыдущим
  5. Если кнопка только что была нажата - команда добавляется в очередь через таймер
  6. Таймер выполняет команду в безопасном контексте
  7. Команда выполняется через соответствующий метод в зависимости от типа

Безопасность
  • Проверка валидности клиента перед выполнением команды
  • Игнорирование ботов (
    C-подобный:
    IsFakeClient
    )
  • Проверка подключения клиента (
    C-подобный:
    IsClientInGame
    )
  • Выполнение команд через таймер для избежания проблем в
    C-подобный:
    OnPlayerRunCmd
  • Очистка состояния при отключении клиента

Установка​

  1. Скомпилируйте плагин:
    C-подобный:
    spcomp key_bind.sp
  2. Скопируйте
    C-подобный:
    key_bind.smx
    в
    C-подобный:
    addons/sourcemod/plugins/
  3. Перезапустите сервер или выполните
    C-подобный:
    sm plugins load key_bind
  4. При первом запуске автоматически создастся файл
    C-подобный:
    cfg/sourcemod/key_bind.cfg
  5. Отредактируйте файл конфигурации под свои нужды
  6. Выполните
    C-подобный:
    sm_keybind_reload
    для применения изменений

Логирование​

Плагин записывает в лог следующую информацию:
  • Загрузку каждого бинда с указанием имени, команды, клавиши и статуса
  • Общее количество загруженных биндов
  • Ошибки при загрузке конфигурации
  • Создание файла конфигурации по умолчанию
  • Ошибки при создании директорий

Ограничения​

  • Плагин отслеживает только новые нажатия клавиш (не срабатывает при удержании)
  • Некоторые клавиши могут конфликтовать с игровыми механиками (например,
    C-подобный:
    IN_ATTACK
    для стрельбы)
  • Бинды применяются ко всем игрокам одинаково (нет индивидуальных настроек)
  • Максимальная длина команды - 256 символов

Версия​

Текущая версия: 1.0.0

Автор​

Автор: DENZEl519&AI
 

Вложения

  • key_bind.7z
    10.8 КБ · Просмотры: 5

DENZEL519

Работаю через AI !
Сообщения
502
Реакции
322
Каждый тик проверяются все зарегистрированные клавиши и зачем?
V 1.0.1
Новый оптимизированный подход:
проверяются только изменившиеся кнопки.
Производительность:
  • Старый подход: всегда N проверок (N = количество биндов)
  • Новый подход: 0 проверок, если ничего не нажато; только нужные проверки при нажатии
 

Вложения

  • key_bind.7z
    10.8 КБ · Просмотры: 2
Сверху Снизу