Scripts/resources/[standalone]/MenuAPI/client/system/events.lua

65 lines
1.7 KiB
Lua
Raw Normal View History

2024-12-29 20:02:43 +00:00
Events = {}
--OnCloseEvent, OnOpenEvent, OnChangeItemEvent, OnSelectEvent
ValidEvents = {
["close"] = true,
["open"] = true,
["changeitem"] = true,
["selectitem"] = true,
["exit"] = true,
["inputtext"] = true,
}
function ValidateEvents(eventName)
return type(eventName) == "string" and ValidEvents[string.lower(eventName)] ~= nil
end
function ValidateInvokingEvent(identifier, eventName)
return Events[identifier] ~= nil and Events[identifier][eventName] ~= nil
end
function RemoveEventsWithNameResource(nameResource)
for identifier, v in pairs(Events) do
for event, value in pairs(v) do
for resource, val in pairs(value) do
if resource == nameResource then
Events[identifier][event][resource] = nil
break
end
end
end
end
end
--Register event
--Return true if event is registered, false if is not
function On(identifier, eventName, cb)
local invokingName = GetInvokingResource() or identifier
eventName = string.lower(eventName)
if not ValidateEvents(eventName) then
return false
end
if Events[identifier] == nil then
Events[identifier] = {}
end
if Events[identifier][eventName] == nil then
Events[identifier][eventName] = {}
end
Events[identifier][eventName][invokingName] = cb
return true
end
--Call event
--@internal
function CallOn(identifier, eventName, ...)
if ValidateInvokingEvent(identifier, eventName) then
for key, value in pairs(Events[identifier][eventName]) do
if type(value) == "table" or type(value) == "function" then
value(...)
end
end
end
end