- 8,947
- 11,721
Данная мини-библиотека создана для добавления биндов в меню mimgui
Установка: перенести файл
Функции:
Готовый код с пояснениями:
Пример сохранения через inicfg:
Lua:
bool result, string code = <module>.RegisterCallback(string name, table keys, function callback)
Описание:
"Создает" бинд и "привязывает" функцию к нему. (При срабатывании бинда будет вызвана функция из 3 аргумента)
Аргументы:
string name: название бинда (используется в качестве "уникального идентификатора")
table keys: массив с клавишами (если в массиве 2 клавиши, то для срабатывания бинда первая клавиша (keys[1]) должна быть зажата)
function callback: функция, которая будет выполнятся при "срабатывании" бинда
KeyEditor:
<module>.KeyEditor(string name, string text, (imgui)ImVec2 size)
Описание:
Рисует в mimgui окне кнопку, через которую можно будет смотреть/изменять клавиши бинда
Аргументы:
string name: название бинда (первый аргумент, указанный при вызове RegisterCallback)
string text: текст, который будет отображатся на кнопке (например если text == 'KNOPKA', то текст на кнопке будет "KNOPKA: *клавиши*")
(imgui)ImVec2 size: размер кнопки с биндом
Готовый код с пояснениями:
Lua:
local imgui = require 'mimgui'
local renderWindow = imgui.new.bool(true)
local hotkey = require('mimhotkey') -- подключаем библиотеку
local bindKeys = {16, 49} -- начальные клавиши (если их 2, то необходимо что бы первая клавиша была зажата ДО нажатия на вторую клавишу)
local bindCallback = function() -- функция, которая сработает при нажатии на кнопки бинда
sampAddChatMessage('BIND ACTIVATED', 0xFFff004d)
end
local newFrame = imgui.OnFrame(
function() return renderWindow[0] end,
function(self)
if imgui.Begin('MimHotKey example', renderWindow) then
imgui.Text('Bind Example')
hotkey.KeyEditor('myBind', 'Chat message')
--[[
рисуем кнопку изменения бинда, привязанную к бинду с айди "mybind"
текст на кнопке: "Chat message"
размер кнопки не указан (следовательно он будет менятся в зависимости от размеров текста)
]]
imgui.End()
end
end
)
function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand('mimkotkey', function()
renderWindow[0] = not renderWindow[0]
end)
hotkey.RegisterCallback('myBind', bindKeys, bindCallback)
--[[
создаем бинд с айди "myBind", задаем ему "начальные" клавиши из массива bindKeys
, а так же привязываем бинд к функции bindCallback
]]
wait(-1)
end
Lua:
local inicfg = require 'inicfg'
local directIni = 'bindkeys.ini'
local ini = inicfg.load(inicfg.load({
main = {
keys = '[16,49]'
},
}, directIni))
inicfg.save(ini, directIni)
local bindKeys = decodeJson(ini.main.keys)
-- сохраняем клавиши при выгрузке скрипта
function onScriptTerminate(s, q)
if s == thisScript() then
ini.main.keys = encodeJson(bindKeys)
end
end
mimhotkey.lua
в папку moonloader\lib
Обновил файл в теме, изменения:
- добавлена возможность изменить текст если бинда нет и текст ожидания нажатия клавиши
- теперь функция KeyEditor вернет массив с клавишами, если бинд был изменен
- добавлена функция GetBindKeys
- добавлена возможность удалить бинд нажатием клавиши BACKSPACE
- добавлена возможность включить/выключить флуд при зажатии клавиши
Пример скрипта с использованием хоткеев и сохранением их в INICFG
- добавлена возможность изменить текст если бинда нет и текст ожидания нажатия клавиши
Lua:
hotkey.Text.wait_for_key = u8'Нажмите клавишу'
hotkey.Text.no_key = u8'Нет'
Lua:
local NewKeys_Lock = hotkey.KeyEditor('Lock', u8'Открать/закрыть машину')
if NewKeys_Lock then
sampAddChatMessage('Бинд изменен на: '..hotkey.GetBindKeys(NewKeys_Lock), -1)
end
- добавлена возможность удалить бинд нажатием клавиши BACKSPACE
- добавлена возможность включить/выключить флуд при зажатии клавиши
Пример скрипта с использованием хоткеев и сохранением их в INICFG
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local hotkey = require('mimhotkey') -- подключаем библиотеку
local inicfg = require 'inicfg'
local directIni = 'mimhotkey_example_2.ini'
local ini = inicfg.load(inicfg.load({
main = {
lock_keys = '[80]',
phone_keys = '[76]'
},
}, directIni))
inicfg.save(ini, directIni)
local renderWindow = imgui.new.bool(true)
local noBindFlood = imgui.new.bool(true)
local Binds = {
Lock = {
desc = u8'Бинд на /lock',
keys = decodeJson(ini.main.lock_keys),
callback = function()
if not sampIsCursorActive() then
sampSendChat('/lock')
sampAddChatMessage('машина открыта/закрыта', -1)
end
end
},
Phone = {
desc = u8'Бинд на /phone',
keys = decodeJson(ini.main.phone_keys),
callback = function()
if not sampIsCursorActive() then
sampSendChat('/phone')
sampAddChatMessage('достаю телефон...', -1)
end
end
}
}
local newFrame = imgui.OnFrame(
function() return renderWindow[0] end,
function(self)
if imgui.Begin('mimhotkey example #2', renderWindow) then
local NewKeys_Lock = hotkey.KeyEditor('Lock', u8'Открать/закрыть машину')
if NewKeys_Lock then
sampAddChatMessage('Бинд изменен на: '..hotkey.GetBindKeys(NewKeys_Lock), -1)
ini.main.lock_keys = encodeJson(NewKeys_Lock)
inicfg.save(ini, directIni)
end
local NewKeys_Phone = hotkey.KeyEditor('Phone', u8'Достать телефон')
if NewKeys_Phone then
sampAddChatMessage('Бинд изменен на: '..hotkey.GetBindKeys(NewKeys_Phone), -1)
ini.main.phone_keys = encodeJson(NewKeys_Phone)
inicfg.save(ini, directIni)
end
if imgui.Checkbox('No key flood', noBindFlood) then
hotkey.no_flood = noBindFlood[0]
end
imgui.End()
end
end
)
function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand('mimhk', function()
renderWindow[0] = not renderWindow[0]
end)
hotkey.RegisterCallback('Lock', Binds.Lock.keys, Binds.Lock.callback)
hotkey.RegisterCallback('Phone', Binds.Phone.keys, Binds.Phone.callback)
hotkey.Text.wait_for_key = u8'Нажмите клавишу'
hotkey.Text.no_key = u8'Нет'
wait(-1)
end
Вложения
Последнее редактирование: