mirror of
https://github.com/opentibiabr/canary
synced 2026-08-16 06:26:09 -04:00
Resolves #2145 
53 lines
1.4 KiB
Lua
53 lines
1.4 KiB
Lua
-- HelperConstructors
|
|
local classes = { Action, CreatureEvent, Spell, TalkAction, MoveEvent, GlobalEvent, Weapon }
|
|
|
|
for _, class in ipairs(classes) do
|
|
local MT = getmetatable(class)
|
|
local DefaultConstructor = MT.__call
|
|
|
|
MT.__call = function(self, def, ...)
|
|
-- Backwards compatibility for default obj() constructor
|
|
if type(def) ~= "table" then
|
|
return DefaultConstructor(self, def, ...)
|
|
end
|
|
|
|
local obj = nil
|
|
if def.init then
|
|
obj = DefaultConstructor(self, unpack(def.init))
|
|
else
|
|
obj = DefaultConstructor(self)
|
|
end
|
|
|
|
-- Call each method from definition table with the value as params
|
|
local hasCallback = false
|
|
|
|
for methodName, value in pairs(def) do
|
|
-- Strictly check if a correct callback is passed
|
|
if methodName:sub(1, 2) == "on" and type(value) == "function" and rawget(class, methodName) then
|
|
hasCallback = true
|
|
end
|
|
|
|
if methodName ~= "register" then
|
|
local method = rawget(self, methodName)
|
|
if method then
|
|
if type(value) == "table" then
|
|
method(obj, unpack(value))
|
|
else
|
|
method(obj, value)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Only register if callback has already been defined, otherwise defining afterwards will not work
|
|
if def.register then
|
|
if not hasCallback then
|
|
logger.warn("[HelperConstructors] - Event not registered due to there being no callback")
|
|
else
|
|
obj:register()
|
|
end
|
|
end
|
|
|
|
return obj
|
|
end
|
|
end
|