parent
029d69a36b
commit
af0948bfa0
@ -0,0 +1,31 @@ |
|||||||
|
local RakLuaDll = require "RakLuaDll" |
||||||
|
|
||||||
|
addEventHandler("onScriptTerminate", function(scr) if scr == script.this then RakLuaDll.destroyHandlers() end end) |
||||||
|
|
||||||
|
local events = { |
||||||
|
["onSendRpc"] = RakLuaEvents.OUTGOING_RPC, |
||||||
|
["onSendPacket"] = RakLuaEvents.OUTGOING_PACKET, |
||||||
|
["onReceiveRpc"] = RakLuaEvents.INCOMING_RPC, |
||||||
|
["onReceivePacket"] = RakLuaEvents.INCOMING_PACKET |
||||||
|
} |
||||||
|
|
||||||
|
local addEventHandler_orig = addEventHandler |
||||||
|
|
||||||
|
function hookAddEventHandler(event, func) |
||||||
|
if events[event] then |
||||||
|
RakLuaDll.registerHandler(events[event], func) |
||||||
|
else |
||||||
|
addEventHandler_orig(event, func) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
function defineSampLuaCompatibility() |
||||||
|
RakLuaDll.defineGlobals() |
||||||
|
|
||||||
|
addEventHandler = hookAddEventHandler |
||||||
|
isSampfuncsLoaded = function() return true end |
||||||
|
end |
||||||
|
|
||||||
|
RakLuaDll.defineSampLuaCompatibility = defineSampLuaCompatibility |
||||||
|
|
||||||
|
return RakLuaDll |
Binary file not shown.
@ -0,0 +1,238 @@ |
|||||||
|
--[[ |
||||||
|
|
||||||
|
Author: СоМиК |
||||||
|
Links: |
||||||
|
- https://www.blast.hk/members/406277/ |
||||||
|
- https://t.me/klamet_one |
||||||
|
- https://vk.com/klamet1 |
||||||
|
|
||||||
|
]] |
||||||
|
|
||||||
|
local imgui = require 'mimgui' |
||||||
|
local vk = require 'vkeys' |
||||||
|
|
||||||
|
HOTKEY = { |
||||||
|
MODULEINFO = { |
||||||
|
version = 1, |
||||||
|
author = 'СоМиК' |
||||||
|
}, |
||||||
|
Text = { |
||||||
|
WaitForKey = 'Нажмите любую клавишу...', |
||||||
|
NoKey = '< Свободно >' |
||||||
|
}, |
||||||
|
List = {}, |
||||||
|
ActiveKeys = {}, |
||||||
|
ReturnHotKeys = nil, |
||||||
|
HotKeyIsEdit = nil, |
||||||
|
CancelKey = 0x1B, |
||||||
|
RemoveKey = 0x08, |
||||||
|
True = true |
||||||
|
} |
||||||
|
|
||||||
|
local specialKeys = { |
||||||
|
0x10, |
||||||
|
0x11, |
||||||
|
0x12, |
||||||
|
0xA4, |
||||||
|
0xA5 |
||||||
|
} |
||||||
|
|
||||||
|
deepcopy = function(orig) |
||||||
|
local orig_type = type(orig) |
||||||
|
local copy |
||||||
|
if orig_type == 'table' then |
||||||
|
copy = {} |
||||||
|
for orig_key, orig_value in next, orig, nil do |
||||||
|
copy[deepcopy(orig_key)] = deepcopy(orig_value) |
||||||
|
end |
||||||
|
setmetatable(copy, deepcopy(getmetatable(orig))) |
||||||
|
else -- number, string, boolean, etc |
||||||
|
copy = orig |
||||||
|
end |
||||||
|
return copy |
||||||
|
end |
||||||
|
|
||||||
|
local keyIsSpecial = function(key) |
||||||
|
for k, v in ipairs(specialKeys) do |
||||||
|
if v == key then |
||||||
|
return true |
||||||
|
end |
||||||
|
end |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
local getKeysText = function(name) |
||||||
|
local keysText = {} |
||||||
|
if HOTKEY.List[name] ~= nil then |
||||||
|
for k, v in ipairs(HOTKEY.List[name].keys) do |
||||||
|
table.insert(keysText, vk.id_to_name(v)) |
||||||
|
end |
||||||
|
end |
||||||
|
return table.concat(keysText, ' + ') |
||||||
|
end |
||||||
|
|
||||||
|
local searchHotKey = function(keys) |
||||||
|
local needCombo = deepcopy(keys) |
||||||
|
table.sort(needCombo) |
||||||
|
needCombo = table.concat(needCombo, ':') |
||||||
|
for k, v in pairs(HOTKEY.List) do |
||||||
|
if next(v.keys) then |
||||||
|
local foundCombo = deepcopy(v.keys) |
||||||
|
table.sort(foundCombo) |
||||||
|
foundCombo = table.concat(foundCombo, ':') |
||||||
|
if foundCombo == needCombo then |
||||||
|
v.callback() |
||||||
|
break |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
HOTKEY.RegisterHotKey = function(name, soloKey, keys, callback) |
||||||
|
if HOTKEY.List[name] == nil then |
||||||
|
HOTKEY.List[name] = { |
||||||
|
soloKey = soloKey, |
||||||
|
keys = keys, |
||||||
|
callback = callback |
||||||
|
} |
||||||
|
return { |
||||||
|
name, |
||||||
|
['ShowHotKey'] = setmetatable({}, {__call = function(self, arg1, arg2) return HOTKEY.ShowHotKey(arg1[1], arg2) end}), |
||||||
|
['EditHotKey'] = setmetatable({}, {__call = function(self, arg1, arg2) return HOTKEY.EditHotKey(arg1[1], arg2) end}), |
||||||
|
['RemoveHotKey'] = setmetatable({}, {__call = function(self, arg) return HOTKEY.RemoveHotKey(arg[1]) end}), |
||||||
|
['GetHotKey'] = setmetatable({}, {__call = function(self, arg) return HOTKEY.GetHotKey(arg[1]) end}) |
||||||
|
} |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
HOTKEY.EditHotKey = setmetatable( |
||||||
|
{}, |
||||||
|
{ |
||||||
|
__call = function(self, name, keys) |
||||||
|
if HOTKEY.List[name] ~= nil then |
||||||
|
HOTKEY.List[name].keys = keys |
||||||
|
return true |
||||||
|
end |
||||||
|
return false |
||||||
|
end |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
HOTKEY.RemoveHotKey = setmetatable( |
||||||
|
{}, |
||||||
|
{ |
||||||
|
__call = function(self, name) |
||||||
|
HOTKEY.List[name] = nil |
||||||
|
return true |
||||||
|
end |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
HOTKEY.ShowHotKey = setmetatable( |
||||||
|
{}, |
||||||
|
{ |
||||||
|
__call = function(self, name, sizeButton) |
||||||
|
if HOTKEY.List[name] ~= nil then |
||||||
|
local HotKeyText = #HOTKEY.List[name].keys == 0 and ((HOTKEY.HotKeyIsEdit ~= nil and HOTKEY.HotKeyIsEdit.NameHotKey == name) and HOTKEY.Text.WaitForKey or HOTKEY.Text.NoKey) or getKeysText(name) |
||||||
|
if imgui.Button(('%s##HK:%s'):format(HotKeyText, name), sizeButton) then |
||||||
|
HOTKEY.HotKeyIsEdit = { |
||||||
|
NameHotKey = name, |
||||||
|
BackupHotKeyKeys = HOTKEY.List[name].keys, |
||||||
|
} |
||||||
|
HOTKEY.ActiveKeys = {} |
||||||
|
HOTKEY.HotKeyIsEdit.ActiveKeys = {} |
||||||
|
HOTKEY.List[name].keys = {} |
||||||
|
end |
||||||
|
if HOTKEY.ReturnHotKeys == name then |
||||||
|
HOTKEY.ReturnHotKeys = nil |
||||||
|
return true |
||||||
|
end |
||||||
|
else |
||||||
|
imgui.Button('Хоткей не найден', sizeButton) |
||||||
|
end |
||||||
|
end |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
HOTKEY.GetHotKey = setmetatable( |
||||||
|
{}, |
||||||
|
{ |
||||||
|
__call = function(self, name) |
||||||
|
if HOTKEY.List[name] ~= nil then |
||||||
|
return HOTKEY.List[name].keys |
||||||
|
end |
||||||
|
end |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
addEventHandler('onWindowMessage', function(msg, key, lparam) |
||||||
|
if msg == 0x100 or msg == 260 then |
||||||
|
if HOTKEY.HotKeyIsEdit == nil then |
||||||
|
if key ~= HOTKEY.CancelKey and key ~= HOTKEY.RemoveKey and key ~= 0x1B and key ~= 0x08 and next(HOTKEY.List) then |
||||||
|
local found = false |
||||||
|
for k, v in ipairs(HOTKEY.ActiveKeys) do |
||||||
|
if v == key then |
||||||
|
found = true |
||||||
|
break |
||||||
|
end |
||||||
|
end |
||||||
|
if not found then |
||||||
|
table.insert(HOTKEY.ActiveKeys, key) |
||||||
|
if keyIsSpecial(key) then |
||||||
|
table.sort(HOTKEY.ActiveKeys) |
||||||
|
else |
||||||
|
searchHotKey(HOTKEY.ActiveKeys) |
||||||
|
table.remove(HOTKEY.ActiveKeys) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
else |
||||||
|
if key == HOTKEY.CancelKey then |
||||||
|
HOTKEY.List[HOTKEY.HotKeyIsEdit.NameHotKey].keys = HOTKEY.HotKeyIsEdit.BackupHotKeyKeys |
||||||
|
HOTKEY.HotKeyIsEdit = nil |
||||||
|
elseif key == HOTKEY.RemoveKey then |
||||||
|
HOTKEY.List[HOTKEY.HotKeyIsEdit.NameHotKey].keys = {} |
||||||
|
HOTKEY.ReturnHotKeys = HOTKEY.HotKeyIsEdit.NameHotKey |
||||||
|
HOTKEY.HotKeyIsEdit = nil |
||||||
|
elseif key ~= 0x1B and key ~= 0x08 then |
||||||
|
local found = false |
||||||
|
for k, v in ipairs(HOTKEY.HotKeyIsEdit.ActiveKeys) do |
||||||
|
if v == key then |
||||||
|
found = true |
||||||
|
break |
||||||
|
end |
||||||
|
end |
||||||
|
if not found then |
||||||
|
if keyIsSpecial(key) then |
||||||
|
if not HOTKEY.List[HOTKEY.HotKeyIsEdit.NameHotKey].soloKey then |
||||||
|
for k, v in ipairs(specialKeys) do |
||||||
|
if key == v then |
||||||
|
table.insert(HOTKEY.HotKeyIsEdit.ActiveKeys, v) |
||||||
|
end |
||||||
|
end |
||||||
|
table.sort(HOTKEY.HotKeyIsEdit.ActiveKeys) |
||||||
|
HOTKEY.List[HOTKEY.HotKeyIsEdit.NameHotKey].keys = HOTKEY.HotKeyIsEdit.ActiveKeys |
||||||
|
end |
||||||
|
else |
||||||
|
table.insert(HOTKEY.List[HOTKEY.HotKeyIsEdit.NameHotKey].keys, key) |
||||||
|
HOTKEY.ReturnHotKeys = HOTKEY.HotKeyIsEdit.NameHotKey |
||||||
|
HOTKEY.HotKeyIsEdit = nil |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
consumeWindowMessage(true, true) |
||||||
|
end |
||||||
|
elseif msg == 0x101 or msg == 261 then |
||||||
|
if keyIsSpecial(key) then |
||||||
|
local pizdec = HOTKEY.HotKeyIsEdit ~= nil and HOTKEY.HotKeyIsEdit.ActiveKeys or HOTKEY.ActiveKeys |
||||||
|
for k, v in ipairs(pizdec) do |
||||||
|
if v == key then |
||||||
|
table.remove(pizdec, k) |
||||||
|
break |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end) |
||||||
|
|
||||||
|
return HOTKEY |
Loading…
Reference in new issue