95 lines
2.4 KiB
Lua
95 lines
2.4 KiB
Lua
|
|
||
|
local myname, ns = ...
|
||
|
|
||
|
|
||
|
local frame = CreateFrame("Frame")
|
||
|
|
||
|
|
||
|
function ns.RegisterEvent(event, func)
|
||
|
frame:RegisterEvent(event)
|
||
|
if func then ns[event] = func end
|
||
|
end
|
||
|
|
||
|
|
||
|
function ns.UnregisterEvent(event)
|
||
|
frame:UnregisterEvent(event)
|
||
|
end
|
||
|
|
||
|
|
||
|
function ns.UnregisterAllEvents()
|
||
|
frame:UnregisterAllEvents()
|
||
|
end
|
||
|
|
||
|
|
||
|
-- Handles special OnLogin code for when the PLAYER_LOGIN event is fired.
|
||
|
-- If our addon is loaded after that event is fired, then we call it immediately
|
||
|
-- after the OnLoad handler is processed.
|
||
|
local function ProcessOnLogin()
|
||
|
if ns.OnLogin then
|
||
|
ns.OnLogin()
|
||
|
ns.OnLogin = nil
|
||
|
end
|
||
|
|
||
|
ProcessOnLogin = nil
|
||
|
if not ns.PLAYER_LOGIN then frame:UnregisterEvent("PLAYER_LOGIN") end
|
||
|
end
|
||
|
|
||
|
|
||
|
-- Handle special OnLoad code when our addon has loaded, if present
|
||
|
-- Also initializes the savedvar for us, if ns.dbname or ns.dbpcname is set
|
||
|
-- If ns.ADDON_LOADED is defined, the ADDON_LOADED event is not unregistered
|
||
|
local function ProcessOnLoad(arg1)
|
||
|
if arg1 ~= myname then return end
|
||
|
|
||
|
if ns.dbname then
|
||
|
local defaults = ns.dbdefaults or {}
|
||
|
_G[ns.dbname] = setmetatable(_G[ns.dbname] or {}, {__index = defaults})
|
||
|
ns.db = _G[ns.dbname]
|
||
|
end
|
||
|
|
||
|
if ns.dbpcname then
|
||
|
local defaults = ns.dbpcdefaults or {}
|
||
|
_G[ns.dbpcname] = setmetatable(_G[ns.dbpcname] or {}, {__index = defaults})
|
||
|
ns.dbpc = _G[ns.dbpcname]
|
||
|
end
|
||
|
|
||
|
if ns.OnLoad then
|
||
|
ns.OnLoad()
|
||
|
ns.OnLoad = nil
|
||
|
end
|
||
|
|
||
|
ProcessOnLoad = nil
|
||
|
if not ns.ADDON_LOADED then frame:UnregisterEvent("ADDON_LOADED") end
|
||
|
|
||
|
if ns.dbdefaults or ns.dbpcdefaults then ns.RegisterEvent("PLAYER_LOGOUT") end
|
||
|
|
||
|
if IsLoggedIn() then ProcessOnLogin()
|
||
|
else frame:RegisterEvent("PLAYER_LOGIN") end
|
||
|
end
|
||
|
|
||
|
|
||
|
-- Removes the default values from the db and dbpc as we're logging out
|
||
|
local function ProcessLogout()
|
||
|
if ns.dbdefaults then
|
||
|
for i,v in pairs(ns.dbdefaults) do
|
||
|
if ns.db[i] == v then ns.db[i] = nil end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if ns.dbpcdefaults then
|
||
|
for i,v in pairs(ns.dbpcdefaults) do
|
||
|
if ns.dbpc[i] == v then ns.dbpc[i] = nil end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
frame:RegisterEvent("ADDON_LOADED")
|
||
|
frame:SetScript("OnEvent", function(self, event, arg1, ...)
|
||
|
if ProcessOnLoad and event == "ADDON_LOADED" then ProcessOnLoad(arg1) end
|
||
|
if ProcessOnLogin and event == "PLAYER_LOGIN" then ProcessOnLogin() end
|
||
|
|
||
|
if event == "PLAYER_LOGOUT" then ProcessLogout() end
|
||
|
if ns[event] then ns[event](event, arg1, ...) end
|
||
|
end)
|