local _, F = ... -- 1. Event Handling (Replaces Trigger 2) F.Events:RegisterEvent("PLAYER_ENTERING_WORLD") F.Events:RegisterEvent("PLAYER_LEVEL_UP") F.Events:RegisterEvent("PLAYER_XP_UPDATE") F.Events:RegisterEvent("UPDATE_FACTION") F.Events:RegisterEvent("QUEST_LOG_UPDATE") F.Events:RegisterEvent("QUEST_WATCH_LIST_CHANGED") F.Events:RegisterEvent("QUEST_WATCH_UPDATE") F.Events:RegisterEvent("ADDON_LOADED") F.Events:SetScript("OnEvent", function(self, event, ...) local arg1 = ... if event == "ADDON_LOADED" and arg1 == "NixxnuxXPBar" then F.InitDB() F.State.session.startTime = time() F.State.session.lastXP = UnitXP("player") -- Hide Blizzard XP / Reputation bars if configured if F.UI and F.UI.HideBlizzardBars then F.UI.HideBlizzardBars() end end if event == "PLAYER_ENTERING_WORLD" then F.State:UpdatePlayerXP() F.State:UpdateQuestXP() -- Hide Blizzard bars after entering world (in case something re-enabled them) if F.UI and F.UI.HideBlizzardBars then F.UI.HideBlizzardBars() end elseif event == "PLAYER_XP_UPDATE" then local currentXP = UnitXP("player") local gained = currentXP - F.State.session.lastXP -- Handle wrap around level up if gained < 0 then gained = F.State.maxXP - F.State.session.lastXP + currentXP end F.State.session.gainedXP = F.State.session.gainedXP + gained F.State.session.lastXP = currentXP F.State:UpdatePlayerXP() elseif event == "QUEST_LOG_UPDATE" or event == "QUEST_WATCH_LIST_CHANGED" or event == "QUEST_WATCH_UPDATE" then F.State:UpdateQuestXP() end -- Force a UI Update immediately on event F.UpdateUI() end) -- ticker that updates the UI each second C_Timer.NewTicker(1, function() F.UpdateUI() end) function F.UpdateUI() if F.UI and F.UI.Update then F.UI.Update() end end