Исходник Информация hotkeys imgui + mimgui

Smeruxa

Известный
Автор темы
1,361
722
Много библиотек уже появилось по поводу хоткеев, они поддерживают добавление множества кнопок, а мой просто очень упрощенный вариант создания, пользуйтесь, кто желает, не придется за собой тянуть еще одну библиотеку (подойдет как для inicfg, так и для json)
[!] Не забудьте подключить vkeys
Тут просто в основном нужно сделать Ctrl + C Ctrl + V, для простых скриптов самое то
Пример:
Lua:
-- Инициализация
j = json.load({
    keys = {
        ["airbrake"] = 0xA1,
        ["speedhack"] = 18,
        ["another_cheat"] = 78,
        ["super_cheat"] = 66,
        ["wallhack"] = 16
    }
}, "test.json")

-- main()
hotkeys = {}
for k,v in pairs(j.keys) do
    hotkeys[k] = {
        activate = v, buttonName = vkeys.key_names[v], edit = false, ticked = os.clock(), tickedState = false
    } -- названия ключей будут совпадать с ключами внутри вашего конфига
end

-- функция получения нажатых кнопок
function getDownKeys()
    local curkeys = ""
    local bool = false
    for k, v in pairs(vkeys) do
        if isKeyDown(v) then
            curkeys = v
            bool = true
        end
    end
    return curkeys, bool
end

-- функция создания хоткея
function createHotkey(text, hotkeyTable, configValue) -- 1 аргумент - текст, 2 аргумент - элемент в массиве, который мы создавали в main, третий аргумент, это название ключа внутри основного конфига
    if hotkeyTable.edit then
        local downKey = getDownKeys()
        j.keys[configValue] = downKey
        if downKey == '' then
            if os.clock() - hotkeyTable.ticked > 0.5 then
                hotkeyTable.ticked = os.clock()
                hotkeyTable.tickedState = not hotkeyTable.tickedState
            end
            hotkeyTable.buttonName = hotkeyTable.tickedState and "No" or "##justClear"..hotkeyTable.ticked
        else
            hotkeyTable.buttonName = vkeys.key_names[j.keys[configValue]]
            hotkeyTable.edit = false
            j() -- сохранение конфига ( используйте свой метод сохранения )
        end
    end
    if imgui.Button(u8(tostring(hotkeyTable.buttonName)), imgui.ImVec2(80, 0)) then
        hotkeyTable.edit = true
    end imgui.SameLine() imgui.Text(u8(text))
end

-- Пример использования
if isKeyJustPressed(j.keys["speedhack"]) then
    -- code
end

-- in imgui
createHotkey("Клавиша активации SpeedHack", hotkeys.speedhack, "speedhack")
 
Последнее редактирование: