A World of Warcraft Experience Bar addon
worldofwarcraft
wow
addon
midnight
1local _, F = ...
2
3-- 1. Event Handling (Replaces Trigger 2)
4F.Events:RegisterEvent("PLAYER_ENTERING_WORLD")
5F.Events:RegisterEvent("PLAYER_LEVEL_UP")
6F.Events:RegisterEvent("PLAYER_XP_UPDATE")
7F.Events:RegisterEvent("UPDATE_FACTION")
8F.Events:RegisterEvent("QUEST_LOG_UPDATE")
9F.Events:RegisterEvent("QUEST_WATCH_LIST_CHANGED")
10F.Events:RegisterEvent("QUEST_WATCH_UPDATE")
11F.Events:RegisterEvent("ADDON_LOADED")
12
13F.Events:SetScript("OnEvent", function(self, event, ...)
14 local arg1 = ...
15
16 if event == "ADDON_LOADED" and arg1 == "NixxnuxXPBar" then
17 F.InitDB()
18 F.State.session.startTime = time()
19 F.State.session.lastXP = UnitXP("player")
20 -- Hide Blizzard XP / Reputation bars if configured
21 if F.UI and F.UI.HideBlizzardBars then
22 F.UI.HideBlizzardBars()
23 end
24 end
25
26 if event == "PLAYER_ENTERING_WORLD" then
27 F.State:UpdatePlayerXP()
28 F.State:UpdateQuestXP()
29 -- Hide Blizzard bars after entering world (in case something re-enabled them)
30 if F.UI and F.UI.HideBlizzardBars then
31 F.UI.HideBlizzardBars()
32 end
33
34 elseif event == "PLAYER_XP_UPDATE" then
35 local currentXP = UnitXP("player")
36 local gained = currentXP - F.State.session.lastXP
37
38 -- Handle wrap around level up
39 if gained < 0 then
40 gained = F.State.maxXP - F.State.session.lastXP + currentXP
41 end
42
43 F.State.session.gainedXP = F.State.session.gainedXP + gained
44 F.State.session.lastXP = currentXP
45 F.State:UpdatePlayerXP()
46
47 elseif event == "QUEST_LOG_UPDATE" or event == "QUEST_WATCH_LIST_CHANGED" or event == "QUEST_WATCH_UPDATE" then
48 F.State:UpdateQuestXP()
49 end
50
51 -- Force a UI Update immediately on event
52 F.UpdateUI()
53end)
54
55-- ticker that updates the UI each second
56C_Timer.NewTicker(1, function()
57 F.UpdateUI()
58end)
59
60function F.UpdateUI()
61 if F.UI and F.UI.Update then
62 F.UI.Update()
63 end
64end