Nenue@1
|
1 --- ${PACKAGE_NAME}
|
Nenue@1
|
2 -- @file-author@
|
Nenue@1
|
3 -- @project-revision@ @project-hash@
|
Nenue@1
|
4 -- @file-revision@ @file-hash@
|
Nenue@1
|
5 -- Created: 3/30/2016 1:23 AM
|
Nenue@1
|
6 local B = select(2,...).frame
|
Nenue@1
|
7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
|
Nenue@1
|
8 local print = B.print('ObjectiveEvent')
|
Nenue@1
|
9
|
Nenue@6
|
10 local isHooked
|
Nenue@6
|
11 local SmallEvents = {
|
Nenue@6
|
12 QUEST_ACCEPTED = 'OnQuestAccepted',
|
Nenue@6
|
13 QUEST_REMOVED = 'OnQuestRemoved'
|
Nenue@6
|
14 }
|
Nenue@6
|
15
|
Nenue@16
|
16 --- Using the same values as Blizzard_ObjectiveTracker for use in securehook
|
Nenue@16
|
17 local OBJECTIVE_TRACKER_UPDATE_QUEST = 0x0001;
|
Nenue@16
|
18 local OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED = 0x0002;
|
Nenue@16
|
19 local OBJECTIVE_TRACKER_UPDATE_TASK_ADDED = 0x0004;
|
Nenue@16
|
20 local OBJECTIVE_TRACKER_UPDATE_SCENARIO = 0x0008;
|
Nenue@16
|
21 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE = 0x0010;
|
Nenue@16
|
22 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT = 0x0020;
|
Nenue@16
|
23 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED = 0x0040;
|
Nenue@16
|
24 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED = 0x0080;
|
Nenue@16
|
25
|
Nenue@16
|
26 local OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST = 0x0100;
|
Nenue@16
|
27 local OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP = 0x0200;
|
Nenue@16
|
28 local OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE = 0x0400;
|
Nenue@16
|
29 local OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO = 0x0800;
|
Nenue@16
|
30 local OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT = 0x1000;
|
Nenue@16
|
31
|
Nenue@16
|
32 local OBJECTIVE_TRACKER_UPDATE_STATIC = 0x0000;
|
Nenue@16
|
33 local OBJECTIVE_TRACKER_UPDATE_ALL = 0xFFFF;
|
Nenue@16
|
34
|
Nenue@16
|
35 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_ALL; -- default
|
Nenue@16
|
36 local OBJECTIVE_TRACKER_UPDATE_ID = 0;
|
Nenue@16
|
37
|
Nenue@6
|
38 local HandlerEvents = {
|
Nenue@16
|
39 QUEST_ACCEPTED = 0x0003,
|
Nenue@16
|
40 QUEST_WATCH_LIST_CHANGED = 0x0003,
|
Nenue@6
|
41 SUPER_TRACKED_QUEST_CHANGED = mod.Quest,
|
Nenue@6
|
42 QUEST_LOG_UPDATE = mod.Quest,
|
Nenue@6
|
43 TRACKED_ACHIEVEMENT_LIST_CHANGED = mod.Cheevs,
|
Nenue@6
|
44 TRACKED_ACHIEVEMENT_UPDATE = mod.Cheevs
|
Nenue@6
|
45 }
|
Nenue@6
|
46
|
Nenue@6
|
47 local BlizzHooks = {
|
Nenue@6
|
48 ['AddQuestWatch'] = 'AddQuestWatch',
|
Nenue@6
|
49 ['RemoveQuestWatch'] = 'RemoveQuestWatch',
|
Nenue@6
|
50 ['AbandonQuest'] = 'AbandonQuest',
|
Nenue@6
|
51 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
|
Nenue@8
|
52 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp',
|
Nenue@16
|
53 ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp',
|
Nenue@8
|
54 ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement'
|
Nenue@6
|
55 }
|
Nenue@6
|
56
|
Nenue@6
|
57 mod.SetEvents = function()
|
Nenue@6
|
58
|
Nenue@6
|
59 for event, _ in pairs(SmallEvents) do
|
Nenue@6
|
60 mod:RegisterEvent(event)
|
Nenue@6
|
61 end
|
Nenue@6
|
62
|
Nenue@6
|
63 for event, _ in pairs(HandlerEvents) do
|
Nenue@6
|
64 mod:RegisterEvent(event)
|
Nenue@6
|
65 end
|
Nenue@6
|
66 mod:SetScript('OnEvent', mod.OnEvent)
|
Nenue@6
|
67
|
Nenue@6
|
68
|
Nenue@6
|
69 if not isHooked then
|
Nenue@6
|
70 VeneerData.CallLog = {}
|
Nenue@6
|
71 isHooked = true
|
Nenue@6
|
72 for blizzFunc, veneerFunc in pairs(BlizzHooks) do
|
Nenue@6
|
73 if mod[veneerFunc] then
|
Nenue@6
|
74 hooksecurefunc(blizzFunc, mod[veneerFunc])
|
Nenue@6
|
75 else
|
Nenue@6
|
76 hooksecurefunc(blizzFunc, function(...)
|
Nenue@6
|
77 print('catching', blizzFunc, ...)
|
Nenue@6
|
78 tinsert(VeneerData.CallLog, {blizzFunc, ...})
|
Nenue@6
|
79 end)
|
Nenue@6
|
80 end
|
Nenue@6
|
81 end
|
Nenue@6
|
82
|
Nenue@6
|
83 end
|
Nenue@6
|
84 end
|
Nenue@6
|
85
|
Nenue@6
|
86 function mod:OnEvent (event, ...)
|
Nenue@6
|
87 local isHandled
|
Nenue@6
|
88 if SmallEvents[event] then
|
Nenue@6
|
89 print('|cFF00FF00'..SmallEvents[event]..'(' ..event..'|r', ...)
|
Nenue@6
|
90 mod[SmallEvents[event]](event, ...)
|
Nenue@6
|
91 isHandled = true
|
Nenue@6
|
92 end
|
Nenue@6
|
93 if HandlerEvents[event] then
|
Nenue@6
|
94 print('|cFF0088FF'..event..'|r wrapper update')
|
Nenue@16
|
95 mod.UpdateWrapper(event)
|
Nenue@6
|
96 isHandled = true
|
Nenue@6
|
97 end
|
Nenue@6
|
98 if not isHandled then
|
Nenue@6
|
99 print('|cFFFF4400'..event..'|r', ...)
|
Nenue@6
|
100 end
|
Nenue@6
|
101 end
|
Nenue@6
|
102
|
Nenue@1
|
103 --------------------------------------------------------------------
|
Nenue@6
|
104 --- Events that are handled by Blizzard_ObjectiveTracker
|
Nenue@1
|
105 --------------------------------------------------------------------
|
Nenue@1
|
106 print(mod:GetName())
|
Nenue@1
|
107 mod.OnQuestAccepted = function(_, questLogIndex, questID)
|
Nenue@1
|
108 AddQuestWatch(questLogIndex)
|
Nenue@1
|
109 SetSuperTrackedQuestID(questID)
|
Nenue@1
|
110 end
|
Nenue@1
|
111
|
Nenue@1
|
112 mod.OnQuestComplete = function(_, questLogIndex, questID)
|
Nenue@1
|
113 QuestPOIUpdateIcons()
|
Nenue@1
|
114 end
|
Nenue@1
|
115
|
Nenue@1
|
116 mod.OnQuestFinished = function(_, questLogIndex, questID)
|
Nenue@1
|
117 mod.TrackClosest()
|
Nenue@1
|
118 RemoveQuestWatch(questLogIndex)
|
Nenue@1
|
119 end
|
Nenue@1
|
120
|
Nenue@6
|
121
|
Nenue@2
|
122 mod.OnQuestRemoved = function(_, questLogIndex, questID)
|
Nenue@6
|
123
|
Nenue@16
|
124 mod.UpdateWrapper(0x00000003)
|
Nenue@6
|
125
|
Nenue@2
|
126 end
|
Nenue@2
|
127
|
Nenue@1
|
128 mod.OnQuestFromLocation = function(event) end
|
Nenue@1
|
129
|
Nenue@6
|
130 -------------------------------------------------------------------
|
Nenue@6
|
131 --- Function hooks for BlizzUI compatibility
|
Nenue@6
|
132 -------------------------------------------------------------------
|
Nenue@6
|
133 mod.AddQuestWatch = function(questID)
|
Nenue@16
|
134 mod.UpdateWrapper(0x00000003)
|
Nenue@1
|
135 end
|
Nenue@6
|
136
|
Nenue@8
|
137 mod.RemoveQuestWatch = function(questIndex, ...)
|
Nenue@8
|
138 print('|cFFFF8800RemoveQuestWatch', questIndex, ...)
|
Nenue@8
|
139 local info = mod.Quest.LogInfo[questIndex]
|
Nenue@8
|
140
|
Nenue@8
|
141 -- remove quest refs
|
Nenue@8
|
142 mod.Quest.LogBlock[questIndex] = nil
|
Nenue@8
|
143 mod.Quest.QuestBlock[info.questID] = nil
|
Nenue@8
|
144
|
Nenue@8
|
145 -- remove if they still match
|
Nenue@8
|
146 if mod.Quest.WatchInfo[info.watchIndex] == info then
|
Nenue@8
|
147 print('cleaning dead WatchInfo entry')
|
Nenue@8
|
148 mod.Quest.WatchInfo[info.watchIndex] = nil
|
Nenue@8
|
149 end
|
Nenue@8
|
150
|
Nenue@16
|
151 mod.UpdateWrapper('RemovedQuestWatch' .. tostring(questIndex))
|
Nenue@8
|
152 QuestPOIUpdateIcons()
|
Nenue@8
|
153 end
|
Nenue@8
|
154
|
Nenue@8
|
155 mod.RemoveTrackedAchievement = function(cheevID)
|
Nenue@8
|
156 print('|cFFFF8800UntrackAchievement', cheevID)
|
Nenue@8
|
157 mod.CleanWidgets()
|
Nenue@6
|
158 end
|
Nenue@6
|
159
|
Nenue@6
|
160 mod.AcceptQuest = function()
|
Nenue@6
|
161 end
|
Nenue@6
|
162
|
Nenue@6
|
163 mod.AbandonQuest = function()
|
Nenue@8
|
164
|
Nenue@8
|
165 QuestPOIUpdateIcons()
|
Nenue@6
|
166 end
|
Nenue@6
|
167
|
Nenue@6
|
168 mod.TurnInQuest = function()
|
Nenue@8
|
169
|
Nenue@8
|
170 QuestPOIUpdateIcons()
|
Nenue@16
|
171 end
|
Nenue@16
|
172
|
Nenue@16
|
173 mod.AddAutoQuestPopUp = function(...)
|
Nenue@16
|
174 print('|cFFFF8800AddAutoQuestPopUp|r', ...)
|
Nenue@16
|
175 mod.UpdateWrapper(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
|
Nenue@16
|
176 end
|
Nenue@16
|
177 mod.RemoveAutoQuestPopUp = function(...)
|
Nenue@16
|
178 print('|cFFFF8800RemoveAutoQuestPopUp|r', ...)
|
Nenue@16
|
179 mod.UpdateWrapper(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
|
Nenue@6
|
180 end |