Nenue@28
|
1 --- ${PACKAGE_NAME}
|
Nenue@28
|
2 -- @file-author@
|
Nenue@28
|
3 -- @project-revision@ @project-hash@
|
Nenue@28
|
4 -- @file-revision@ @file-hash@
|
Nenue@28
|
5 -- Created: 3/26/2016 1:51 AM
|
Nenue@28
|
6 local B, _G = select(2,...).frame, _G
|
Nenue@28
|
7 local pairs, setmetatable, type, tostring, band, format = _G.pairs, _G.setmetatable, _G.type, _G.tostring, bit.band, string.format
|
Nenue@28
|
8 local ipairs, tinsert, hooksecurefunc = _G.ipairs, _G.tinsert, _G.hooksecurefunc
|
Nenue@28
|
9 local PlaySoundFile, IsQuestTask, SortQuestWatches, GetCurrentMapAreaID, GetZoneText, GetMinimapZoneText = PlaySoundFile, IsQuestTask, SortQuestWatches, GetCurrentMapAreaID, GetZoneText, GetMinimapZoneText
|
Nenue@28
|
10 local AddQuestWatch, SetSuperTrackedQuestID, GetNumQuestWatches, AUTO_QUEST_WATCH, MAX_WATCHABLE_QUESTS = AddQuestWatch, SetSuperTrackedQuestID, GetNumQuestWatches, AUTO_QUEST_WATCH, MAX_WATCHABLE_QUESTS
|
Nenue@28
|
11 local QuestPOIUpdateIcons, GetCVar, IsPlayerInMicroDungeon, WorldMapFrame, GetCVarBool, SetMapToCurrentZone = QuestPOIUpdateIcons, GetCVar, IsPlayerInMicroDungeon, WorldMapFrame, GetCVarBool, SetMapToCurrentZone
|
Nenue@28
|
12 local AddAutoQuestPopUp = AddAutoQuestPopUp
|
Nenue@28
|
13 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
|
Nenue@28
|
14 local print = B.print('Objectives')
|
Nenue@28
|
15 local ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame = _G.ObjectiveTrackerFrame, _G.VeneerObjectiveScroll, _G.CreateFrame
|
Nenue@28
|
16 local Wrapper = _G.VeneerObjectiveWrapper
|
Nenue@28
|
17 local Scroller = VeneerObjectiveWrapper.scrollArea
|
Nenue@28
|
18 local Scroll = _G.VeneerObjectiveScroll
|
Nenue@28
|
19 local unitLevel = UnitLevel('player')
|
Nenue@28
|
20
|
Nenue@28
|
21 --- Performance values
|
Nenue@28
|
22 --[[
|
Nenue@28
|
23 self:RegisterEvent("QUEST_LOG_UPDATE");
|
Nenue@28
|
24 self:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED");
|
Nenue@28
|
25 self:RegisterEvent("QUEST_WATCH_LIST_CHANGED");
|
Nenue@28
|
26 self:RegisterEvent("QUEST_AUTOCOMPLETE");
|
Nenue@28
|
27 self:RegisterEvent("QUEST_ACCEPTED");
|
Nenue@28
|
28 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED");
|
Nenue@28
|
29 self:RegisterEvent("SCENARIO_UPDATE");
|
Nenue@28
|
30 self:RegisterEvent("SCENARIO_CRITERIA_UPDATE");
|
Nenue@28
|
31 self:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE");
|
Nenue@28
|
32 self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
|
Nenue@28
|
33 self:RegisterEvent("ZONE_CHANGED");
|
Nenue@28
|
34 self:RegisterEvent("QUEST_POI_UPDATE");
|
Nenue@28
|
35 self:RegisterEvent("VARIABLES_LOADED");
|
Nenue@28
|
36 self:RegisterEvent("QUEST_TURNED_IN");
|
Nenue@28
|
37 self:RegisterEvent("PLAYER_MONEY");
|
Nenue@28
|
38 ]]
|
Nenue@28
|
39
|
Nenue@28
|
40
|
Nenue@28
|
41 --- These are the bitfields used by Blizzard_ObjectiveTracker to determine which segments get parsed.
|
Nenue@28
|
42 --- They are replicated here so that plugins can make use of any securehook args involving this info.
|
Nenue@28
|
43 local OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST -- 0x0100
|
Nenue@28
|
44 local OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP = OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP -- 0x0200
|
Nenue@28
|
45 local OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE -- 0x0400
|
Nenue@28
|
46 local OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO -- 0x0800
|
Nenue@28
|
47 local OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT -- 0x1000
|
Nenue@28
|
48
|
Nenue@28
|
49
|
Nenue@28
|
50 local OBJECTIVE_TRACKER_UPDATE_STATIC = OBJECTIVE_TRACKER_UPDATE_STATIC -- 0x0000
|
Nenue@28
|
51 local OBJECTIVE_TRACKER_UPDATE_ALL = OBJECTIVE_TRACKER_UPDATE_ALL -- 0xFFFF
|
Nenue@28
|
52 local OBJECTIVE_TRACKER_UPDATE_ID = OBJECTIVE_TRACKER_UPDATE_ID -- 0
|
Nenue@28
|
53
|
Nenue@28
|
54 local OBJECTIVE_TRACKER_UPDATE_QUEST = OBJECTIVE_TRACKER_UPDATE_QUEST -- 0x0001
|
Nenue@28
|
55 local OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED = OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED -- 0x0002
|
Nenue@28
|
56 local OBJECTIVE_TRACKER_UPDATE_TASK_ADDED = OBJECTIVE_TRACKER_UPDATE_TASK_ADDED -- 0x0004
|
Nenue@28
|
57 local OBJECTIVE_TRACKER_UPDATE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_SCENARIO -- 0x0008
|
Nenue@28
|
58 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE = OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE -- 0x0010
|
Nenue@28
|
59 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT -- 0x0020
|
Nenue@28
|
60 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED -- 0x0040
|
Nenue@28
|
61 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED = OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED -- 0x0080
|
Nenue@28
|
62
|
Nenue@28
|
63 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_ALL -- default
|
Nenue@28
|
64 --- Used to determine which trackers are listening for money events
|
Nenue@28
|
65
|
Nenue@28
|
66 T.strings = {}
|
Nenue@28
|
67 T.strings.CLICK_TO_ACCCEPT = 'Click to Accept'
|
Nenue@28
|
68 T.strings.CLICK_TO_COMPLETE = 'Click to complete'
|
Nenue@28
|
69 T.colors ={
|
Nenue@28
|
70 enable = true,
|
Nenue@28
|
71 default = {
|
Nenue@28
|
72 titlebg = {'HORIZONTAL', 1, 0, .7, .25, 1, 0, .7, .125},
|
Nenue@28
|
73 textbg = {'HORIZONTAL', 0, 0, 0, 0.4, 0, 0, 0, 0 },
|
Nenue@28
|
74 selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225},
|
Nenue@28
|
75 },
|
Nenue@28
|
76 daily = {
|
Nenue@28
|
77 titlebg = {'HORIZONTAL', 0, .7, 1, .25, 0, 1, .7, .125},
|
Nenue@28
|
78 textbg = {'HORIZONTAL', 0, .7, 1, .1, 0, 1, .7, .075 },
|
Nenue@28
|
79 },
|
Nenue@28
|
80 weekly = {
|
Nenue@28
|
81 titlebg = {'HORIZONTAL', 0, .35, .7, .25, 0, .35, .7, .125},
|
Nenue@28
|
82 textbg = {'HORIZONTAL', 0, .35, .7, .1, 0, .35, .7, .075 },
|
Nenue@28
|
83 },
|
Nenue@28
|
84 account = {
|
Nenue@28
|
85 titlebg = {'HORIZONTAL', .1, .1, .1, .25, .1, .1, .1, .125},
|
Nenue@28
|
86 textbg = {'HORIZONTAL', .1, .1, .1, 0.4, .1, .1, .1, .085 },
|
Nenue@28
|
87 },
|
Nenue@28
|
88 -- alliance
|
Nenue@28
|
89 faction_1 = {
|
Nenue@28
|
90 titlebg = {'HORIZONTAL', .2, .4, 1, 0.4, .2, .4, 1, .085 },
|
Nenue@28
|
91 textbg = {'HORIZONTAL', .2, .4, 1, 0.4, .2, .4, 1, .085 },
|
Nenue@28
|
92 },
|
Nenue@28
|
93 -- horde
|
Nenue@28
|
94 faction_2 = {
|
Nenue@28
|
95 titlebg = {'HORIZONTAL', .6, 0, 0.4, 0.4, .6, 0, 0.4, .085 },
|
Nenue@28
|
96 textbg = {'HORIZONTAL', .6, 0, 0.4, 0.4, .6, 0, 0.4, .085 },
|
Nenue@28
|
97 }
|
Nenue@28
|
98 }
|
Nenue@28
|
99
|
Nenue@28
|
100 T.watchMoneyReasons = 0
|
Nenue@28
|
101
|
Nenue@28
|
102 --- Baseline defaults table; values defined in the files that they pertain to
|
Nenue@28
|
103 T.defaults = {}
|
Nenue@28
|
104
|
Nenue@28
|
105 --- Tracker display order
|
Nenue@28
|
106 T.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'}
|
Nenue@28
|
107
|
Nenue@28
|
108 --- ipairs() argument tables
|
Nenue@28
|
109 T.orderedHandlers = setmetatable({}, {__mode = "k"})
|
Nenue@28
|
110 T.orderedTrackers = setmetatable({}, {__mode = "k"})
|
Nenue@28
|
111 T.indexedTrackers = setmetatable({}, {__mode = "k"})
|
Nenue@28
|
112
|
Nenue@28
|
113 --- pairs() argument tables
|
Nenue@28
|
114 T.namedTrackers = setmetatable({}, {__mode = "k"})
|
Nenue@28
|
115
|
Nenue@28
|
116 local WRAPPER_ANCHOR_POINT = 'TOPRIGHT'
|
Nenue@28
|
117 local WRAPPER_OFFSET_X = 0
|
Nenue@28
|
118 local WRAPPER_OFFSET_Y = -200
|
Nenue@28
|
119 local WRAPPER_MAX_HEIGHT = 670
|
Nenue@28
|
120 local WRAPPER_WIDTH = 280
|
Nenue@28
|
121 local WRAPPER_HEADER_HEIGHT = 24
|
Nenue@28
|
122
|
Nenue@28
|
123 T.defaults.Wrapper = {
|
Nenue@28
|
124 AnchorPoint = WRAPPER_ANCHOR_POINT,
|
Nenue@28
|
125 OffsetX = WRAPPER_OFFSET_X,
|
Nenue@28
|
126 OffsetY = WRAPPER_OFFSET_Y,
|
Nenue@28
|
127 Height = WRAPPER_MAX_HEIGHT,
|
Nenue@28
|
128 Width = WRAPPER_WIDTH,
|
Nenue@28
|
129 HeaderHeight = WRAPPER_HEADER_HEIGHT,
|
Nenue@28
|
130 TextSpacing = 3,
|
Nenue@28
|
131 TitleSpacing = 3,
|
Nenue@28
|
132 }
|
Nenue@28
|
133
|
Nenue@28
|
134
|
Nenue@28
|
135
|
Nenue@28
|
136 --- Tracker module definitions begin here; innards dealing with data retreival and output are defined further in
|
Nenue@28
|
137 T.DefaultHandler = {
|
Nenue@28
|
138 previousHeight = 0,
|
Nenue@28
|
139
|
Nenue@28
|
140 name = "temp",
|
Nenue@28
|
141 displayName = "temp",
|
Nenue@28
|
142 updateReasonModule = 0xFF00,
|
Nenue@28
|
143 updateReasonEvent = 0x00FF,
|
Nenue@28
|
144
|
Nenue@28
|
145 numWatched = 0, --- number of entries being handled
|
Nenue@28
|
146 numBlocks = 0, --- number of blocks created
|
Nenue@28
|
147 actualBlocks = 0, --- number of blocks in use
|
Nenue@28
|
148
|
Nenue@28
|
149 freeBlocks = {}, --- block heap
|
Nenue@28
|
150 usedBlocks = {},
|
Nenue@28
|
151
|
Nenue@28
|
152 Info = {}, -- find data by ID
|
Nenue@28
|
153 BlockInfo = {}, -- find data by block ID
|
Nenue@28
|
154 Watched = {}, -- find watchIndex by data ID
|
Nenue@28
|
155 WatchInfo = {}, -- find data by watch index
|
Nenue@28
|
156 WatchBlock = {}, -- find block by watch index
|
Nenue@28
|
157 }
|
Nenue@28
|
158
|
Nenue@28
|
159 T.AutoQuest = {
|
Nenue@28
|
160 name = "AutoQuest",
|
Nenue@28
|
161 displayName = "Notice",
|
Nenue@28
|
162 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST,
|
Nenue@28
|
163 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED,
|
Nenue@29
|
164 LogInfo = {},
|
Nenue@29
|
165 LogBlock = {},
|
Nenue@29
|
166 QuestBlock = {},
|
Nenue@28
|
167 }
|
Nenue@28
|
168 T.Quest = {
|
Nenue@28
|
169 name = "Quest",
|
Nenue@28
|
170 displayName = "Quests",
|
Nenue@28
|
171 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST,
|
Nenue@28
|
172 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED,
|
Nenue@28
|
173 itemButtons = {},
|
Nenue@28
|
174 freeButtons = {},
|
Nenue@29
|
175 LogInfo = {},
|
Nenue@29
|
176 LogBlock = {},
|
Nenue@29
|
177 QuestBlock = {},
|
Nenue@28
|
178 }
|
Nenue@28
|
179 T.Cheevs = {
|
Nenue@28
|
180 name = "Cheevs",
|
Nenue@28
|
181 displayName = "Achievements",
|
Nenue@28
|
182 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT,
|
Nenue@28
|
183 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT +
|
Nenue@28
|
184 OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED,
|
Nenue@28
|
185 }
|
Nenue@28
|
186 T.Bonus = {
|
Nenue@28
|
187 name = "Bonus",
|
Nenue@28
|
188 displayName = "Bonus Objectives",
|
Nenue@28
|
189 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE,
|
Nenue@29
|
190 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_TASK_ADDED,
|
Nenue@29
|
191 QuestBlock = {},
|
Nenue@28
|
192 }
|
Nenue@28
|
193
|
Nenue@28
|
194 T.Scenario = {
|
Nenue@28
|
195 name = 'Scenario',
|
Nenue@28
|
196 displayName = 'Scenario Objectives',
|
Nenue@28
|
197 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO,
|
Nenue@28
|
198 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE + OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED
|
Nenue@28
|
199 }
|
Nenue@28
|
200
|
Nenue@28
|
201 local Tracker_string = function (self)
|
Nenue@28
|
202 return self.name
|
Nenue@28
|
203 end
|
Nenue@28
|
204 local Tracker_call = function (self, reason)
|
Nenue@28
|
205 self:Update(reason)
|
Nenue@28
|
206 end
|
Nenue@28
|
207 local Handler_Initialize = function (self, name, index)
|
Nenue@28
|
208 local c = T.Conf.Wrapper
|
Nenue@28
|
209 print('Initializing |cFF00FFFF'..name..'|r module...')
|
Nenue@28
|
210
|
Nenue@28
|
211 local handler = setmetatable(T[name] or {}, {
|
Nenue@28
|
212 __tostring = Tracker_string,
|
Nenue@28
|
213 __call = Tracker_call
|
Nenue@28
|
214 })
|
Nenue@28
|
215 if type(T.orderedHandlers[index]) == 'table' then
|
Nenue@28
|
216 return T.orderedHandlers[index]
|
Nenue@28
|
217 end
|
Nenue@28
|
218
|
Nenue@28
|
219 print('|cFFFFFF00Acquiring locals')
|
Nenue@28
|
220 local preset = {}
|
Nenue@28
|
221 for k, _ in pairs(handler) do
|
Nenue@28
|
222 preset[k] = true
|
Nenue@28
|
223 end
|
Nenue@28
|
224
|
Nenue@28
|
225
|
Nenue@28
|
226 print('|cFFFF8800Inheriting')
|
Nenue@28
|
227 for k, v in pairs(self) do
|
Nenue@28
|
228 if not handler[k] then
|
Nenue@28
|
229 if type(v) == 'table' then
|
Nenue@28
|
230 -- assume all tables to be local data; don't inherit or ref
|
Nenue@28
|
231 handler[k] = {}
|
Nenue@28
|
232 else
|
Nenue@28
|
233 handler[k] = self[k]
|
Nenue@28
|
234 end
|
Nenue@28
|
235 print('copying', k)
|
Nenue@28
|
236 end
|
Nenue@28
|
237 end
|
Nenue@28
|
238 print('|cFFFF4400'..tostring(name)..'|r:')
|
Nenue@28
|
239 for k, v in pairs(handler) do
|
Nenue@28
|
240 print(format("%32s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v)))
|
Nenue@28
|
241 end
|
Nenue@28
|
242
|
Nenue@28
|
243 T[name] = handler
|
Nenue@28
|
244
|
Nenue@28
|
245 local trackerName = 'Veneer'..name..'Tracker'
|
Nenue@28
|
246 local handler = T[name]
|
Nenue@28
|
247 local frame = CreateFrame('Frame', trackerName, _G.VeneerObjectiveScroll, 'VeneerTrackerTemplate')
|
Nenue@28
|
248 frame.title:SetText(handler.displayName)
|
Nenue@28
|
249 frame:SetWidth(c.Width)
|
Nenue@29
|
250
|
Nenue@28
|
251 handler.frame = frame
|
Nenue@29
|
252 handler.numBlocks = 0
|
Nenue@29
|
253 handler.actualBlocks = 0
|
Nenue@28
|
254 handler.trackerName = trackerName
|
Nenue@28
|
255 handler.lines = {}
|
Nenue@28
|
256 T.orderedTrackers[index] = frame
|
Nenue@28
|
257 T.namedTrackers[name] = frame
|
Nenue@28
|
258 T.indexedTrackers[handler] = frame
|
Nenue@28
|
259 print('|cFFFF0088' .. trackerName .. '|r created for |cFF00FFFF' .. handler.displayName .. '|r module')
|
Nenue@28
|
260
|
Nenue@28
|
261 T.orderedHandlers[index] = handler
|
Nenue@28
|
262 return true
|
Nenue@28
|
263 end
|
Nenue@28
|
264
|
Nenue@28
|
265 local Event = {}
|
Nenue@28
|
266 Event.QUEST_LOG_UPDATE = function()
|
Nenue@28
|
267 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST + OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE
|
Nenue@28
|
268 end
|
Nenue@28
|
269 Event.QUEST_ACCEPTED = function(questLogIndex, questID)
|
Nenue@28
|
270 if ( IsQuestTask(questID) ) then
|
Nenue@28
|
271 return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED, questID
|
Nenue@28
|
272 else
|
Nenue@28
|
273 if ( AUTO_QUEST_WATCH == "1" and GetNumQuestWatches() < MAX_WATCHABLE_QUESTS ) then
|
Nenue@28
|
274 AddQuestWatch(questLogIndex);
|
Nenue@28
|
275 SetSuperTrackedQuestID(questID);
|
Nenue@28
|
276 end
|
Nenue@28
|
277 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST
|
Nenue@28
|
278 end
|
Nenue@28
|
279 end
|
Nenue@28
|
280
|
Nenue@28
|
281 Event.QUEST_WATCH_LIST_CHANGED = function(questID, added)
|
Nenue@28
|
282 if ( added ) then
|
Nenue@28
|
283 if ( not IsQuestTask(questID) ) then
|
Nenue@28
|
284 return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added
|
Nenue@28
|
285 end
|
Nenue@28
|
286 else
|
Nenue@28
|
287 return OBJECTIVE_TRACKER_UPDATE_QUEST, questID, added
|
Nenue@28
|
288 end
|
Nenue@28
|
289 end
|
Nenue@28
|
290
|
Nenue@28
|
291 Event.QUEST_POI_UPDATE = function()
|
Nenue@28
|
292 QuestPOIUpdateIcons();
|
Nenue@28
|
293 if ( GetCVar("trackQuestSorting") == "proximity" ) then
|
Nenue@28
|
294 SortQuestWatches();
|
Nenue@28
|
295 end
|
Nenue@28
|
296 return OBJECTIVE_TRACKER_UPDATE_ALL
|
Nenue@28
|
297 end
|
Nenue@28
|
298 Event.SUPER_TRACKED_QUEST_CHANGED = function()
|
Nenue@28
|
299 return OBJECTIVE_TRACKER_UPDATE_QUEST
|
Nenue@28
|
300 end
|
Nenue@28
|
301 Event.ZONE_CHANGED = function()
|
Nenue@28
|
302
|
Nenue@28
|
303 local inMicroDungeon = IsPlayerInMicroDungeon();
|
Nenue@28
|
304 if ( inMicroDungeon ~= T.inMicroDungeon ) then
|
Nenue@28
|
305 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
|
Nenue@28
|
306 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker
|
Nenue@28
|
307 end
|
Nenue@28
|
308 --SortQuestWatches();
|
Nenue@28
|
309 T.inMicroDungeon = inMicroDungeon;
|
Nenue@28
|
310 end
|
Nenue@28
|
311 end
|
Nenue@28
|
312 Event.QUEST_AUTOCOMPLETE = function(questId)
|
Nenue@28
|
313 AddAutoQuestPopUp(questId, "COMPLETE");
|
Nenue@28
|
314 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST + OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP
|
Nenue@28
|
315 end
|
Nenue@28
|
316 Event.SCENARIO_CRITERIA_UPDATE = function()
|
Nenue@28
|
317 return OBJECTIVE_TRACKER_UPDATE_SCENARIO
|
Nenue@28
|
318 end
|
Nenue@28
|
319 Event.SCENARIO_UPDATE = function(newStage)
|
Nenue@28
|
320 if ( newStage ) then
|
Nenue@28
|
321 return OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE
|
Nenue@28
|
322 else
|
Nenue@28
|
323 return OBJECTIVE_TRACKER_UPDATE_SCENARIO
|
Nenue@28
|
324 end
|
Nenue@28
|
325 end
|
Nenue@28
|
326 Event.TRACKED_ACHIEVEMENT_UPDATE = function()
|
Nenue@28
|
327 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
|
Nenue@28
|
328 end
|
Nenue@28
|
329 Event.TRACKED_ACHIEVEMENT_LIST_CHANGED = function(achievementID, added)
|
Nenue@28
|
330 if ( added ) then
|
Nenue@28
|
331 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, achievementID
|
Nenue@28
|
332 else
|
Nenue@28
|
333 return OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT
|
Nenue@28
|
334 end
|
Nenue@28
|
335 end
|
Nenue@28
|
336 Event.ZONE_CHANGED_NEW_AREA = function ()
|
Nenue@28
|
337 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then
|
Nenue@28
|
338 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker
|
Nenue@28
|
339 end
|
Nenue@28
|
340 SortQuestWatches();
|
Nenue@28
|
341 T.currentZoneArea = GetCurrentMapAreaID()
|
Nenue@28
|
342 print('Updating zone ID to', T.currentZoneArea, '=', GetZoneText(), GetMinimapZoneText())
|
Nenue@28
|
343
|
Nenue@28
|
344
|
Nenue@28
|
345 return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED
|
Nenue@28
|
346 end
|
Nenue@28
|
347
|
Nenue@28
|
348
|
Nenue@28
|
349 Event.PLAYER_MONEY = function()
|
Nenue@28
|
350 if T.watchMoneyReasons > 0 then
|
Nenue@28
|
351 return T.watchMoneyReasons
|
Nenue@28
|
352 end
|
Nenue@28
|
353 end
|
Nenue@28
|
354 Event.CRITERIA_COMPLETE = function()
|
Nenue@28
|
355 return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE
|
Nenue@28
|
356 end
|
Nenue@28
|
357 Event.QUEST_TURN_IN = function(questID, xp, money)
|
Nenue@28
|
358 if ( IsQuestTask(questID) ) then
|
Nenue@28
|
359 T.Bonus:OnTurnIn(questID, xp, money)
|
Nenue@28
|
360 print('updating bonus modules (code', OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, ',', questID, xp, money)
|
Nenue@28
|
361 return OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, questID, xp, money
|
Nenue@28
|
362 else
|
Nenue@28
|
363 return OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, questID, xp, money
|
Nenue@28
|
364 end
|
Nenue@28
|
365 end
|
Nenue@28
|
366 T.Event = Event
|
Nenue@28
|
367
|
Nenue@28
|
368 --- Done once per ui load
|
Nenue@28
|
369 local BlizzHooks = {
|
Nenue@28
|
370 ['AddQuestWatch'] = 'AddQuestWatch',
|
Nenue@28
|
371 ['RemoveQuestWatch'] = 'RemoveQuestWatch',
|
Nenue@28
|
372 ['AbandonQuest'] = 'AbandonQuest',
|
Nenue@28
|
373 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
|
Nenue@28
|
374 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp',
|
Nenue@28
|
375 ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp',
|
Nenue@28
|
376 ['AddTrackedAchievement'] = 'AddTrackedAchievement',
|
Nenue@28
|
377 ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement',
|
Nenue@28
|
378 ['SetSuperTrackedQuestID'] = 'SetSuperTrackedQuestID'
|
Nenue@28
|
379 }
|
Nenue@28
|
380 local VeneerData
|
Nenue@28
|
381
|
Nenue@28
|
382 T.SetWatchMoney = function(watchMoney, reason)
|
Nenue@28
|
383 if watchMoney then
|
Nenue@28
|
384 if band(T.watchMoneyReasons, reason) == 0 then
|
Nenue@28
|
385 T.watchMoneyReasons = T.watchMoneyReasons + reason;
|
Nenue@28
|
386 end
|
Nenue@28
|
387 else
|
Nenue@28
|
388 if band(T.watchMoneyReasons, reason) > 0 then
|
Nenue@28
|
389 T.watchMoneyReasons = T.watchMoneyReasons - reason;
|
Nenue@28
|
390 end
|
Nenue@28
|
391 end
|
Nenue@28
|
392 end
|
Nenue@28
|
393 T.animateReasons = 0
|
Nenue@28
|
394 T.SetAnimate = function(reason)
|
Nenue@28
|
395 print('comparing', T.animateReasons, reason)
|
Nenue@28
|
396 if animate then
|
Nenue@28
|
397 if band(T.animateReasons, reason) == 0 then
|
Nenue@28
|
398 T.animateReasons = T.animateReasons + reason
|
Nenue@28
|
399 end
|
Nenue@28
|
400 else
|
Nenue@28
|
401 if band(T.animateReasons, reason) > 0 then
|
Nenue@28
|
402 T.animateReasons = T.animateReasons - reason
|
Nenue@28
|
403 end
|
Nenue@28
|
404 end
|
Nenue@28
|
405 end
|
Nenue@28
|
406
|
Nenue@28
|
407 local Play = function(file) if Devian and Devian.InWorkspace() then PlaySoundFile(file) end end
|
Nenue@28
|
408
|
Nenue@28
|
409 function T:OnEvent (event, ...)
|
Nenue@28
|
410 local isHandled
|
Nenue@28
|
411 print('OnEvent(|cFF00FF00'.. event ..'|r):', ...)
|
Nenue@28
|
412 local reason, arg1, arg2, arg3
|
Nenue@28
|
413 if Event[event] then
|
Nenue@28
|
414 if type(Event[event]) == 'function' then
|
Nenue@28
|
415 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Info.ogg]])
|
Nenue@28
|
416 reason, arg1, arg2, arg3 = Event[event](...)
|
Nenue@28
|
417 elseif type(Event[event]) == 'table' then
|
Nenue@28
|
418 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Link.ogg]])
|
Nenue@28
|
419 for i, action in ipairs(Event[event]) do
|
Nenue@28
|
420 if type(action) == 'function' then
|
Nenue@28
|
421 reason, arg1, arg2, arg3 = action(event, ...)
|
Nenue@28
|
422 else
|
Nenue@28
|
423 reason = action
|
Nenue@28
|
424 end
|
Nenue@28
|
425
|
Nenue@28
|
426 if reason then
|
Nenue@28
|
427 T:Update(reason, arg1, arg2, arg3)
|
Nenue@28
|
428 end
|
Nenue@28
|
429 end
|
Nenue@28
|
430 else
|
Nenue@28
|
431 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Heart.ogg]])
|
Nenue@28
|
432 reason = Event[event]
|
Nenue@28
|
433 end
|
Nenue@28
|
434 else
|
Nenue@28
|
435 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
|
Nenue@28
|
436 end
|
Nenue@28
|
437 if reason then
|
Nenue@28
|
438 T:Update(reason, arg1, arg2, arg3)
|
Nenue@28
|
439 else
|
Nenue@28
|
440 print('no reason value returned')
|
Nenue@28
|
441 Play([[Interface\Addons\SharedMedia_MyMedia\sound\Quack.ogg]])
|
Nenue@28
|
442 end
|
Nenue@28
|
443
|
Nenue@28
|
444 end
|
Nenue@28
|
445
|
Nenue@28
|
446
|
Nenue@28
|
447 function T:OnInitialize()
|
Nenue@28
|
448 local c = T.Conf.Wrapper
|
Nenue@28
|
449 VeneerData = _G.VeneerData
|
Nenue@28
|
450 VeneerData.CallLog = VeneerData.CallLog or {}
|
Nenue@28
|
451 if not T.isHooked then
|
Nenue@28
|
452 T.isHooked = true
|
Nenue@28
|
453 for blizzFunc, veneerFunc in pairs(BlizzHooks) do
|
Nenue@28
|
454 if T[veneerFunc] then
|
Nenue@28
|
455 hooksecurefunc(blizzFunc, T[veneerFunc])
|
Nenue@28
|
456 else
|
Nenue@28
|
457 hooksecurefunc(blizzFunc, function(...)
|
Nenue@28
|
458 print('|cFFFF0088securehook('..tostring(blizzFunc)..')|r args:', ...)
|
Nenue@28
|
459 tinsert(VeneerData.CallLog, {blizzFunc, ...})
|
Nenue@28
|
460 end)
|
Nenue@28
|
461 end
|
Nenue@28
|
462 end
|
Nenue@28
|
463 end
|
Nenue@28
|
464
|
Nenue@28
|
465 T.Conf.TasksLog = T.Conf.TasksLog or {}
|
Nenue@28
|
466
|
Nenue@28
|
467 ObjectiveTrackerFrame:UnregisterAllEvents()
|
Nenue@28
|
468 ObjectiveTrackerFrame:Hide()
|
Nenue@28
|
469
|
Nenue@28
|
470
|
Nenue@28
|
471 for id, name in ipairs(T.orderedNames) do
|
Nenue@28
|
472 if not T.orderedHandlers[id] then
|
Nenue@28
|
473 Handler_Initialize(T.DefaultHandler, name, id)
|
Nenue@28
|
474 end
|
Nenue@28
|
475 end
|
Nenue@28
|
476 self:SetSize(c.Width, 40)
|
Nenue@28
|
477 T.InitializeWidgets()
|
Nenue@28
|
478 end
|
Nenue@28
|
479
|
Nenue@28
|
480 --- Done any time the the minimize button is toggled up
|
Nenue@28
|
481 function T:OnEnable()
|
Nenue@28
|
482
|
Nenue@28
|
483 print(B.Conf.VeneerObjectiveWrapper.enabled)
|
Nenue@28
|
484 if not B.Conf.VeneerObjectiveWrapper.enabled then
|
Nenue@28
|
485 return
|
Nenue@28
|
486 end
|
Nenue@28
|
487
|
Nenue@28
|
488 for event, action in pairs(Event) do
|
Nenue@28
|
489 print('|cFFFF0088listen to', event, 'for action|r', tostring(action))
|
Nenue@28
|
490 Wrapper:RegisterEvent(event)
|
Nenue@28
|
491 end
|
Nenue@28
|
492
|
Nenue@28
|
493 local c = T.Conf.Wrapper
|
Nenue@28
|
494
|
Nenue@28
|
495 Scroller:SetScrollChild(Scroll)
|
Nenue@28
|
496 Scroller:SetWidth(c.Width)
|
Nenue@28
|
497 Scroll:SetWidth(c.Width)
|
Nenue@28
|
498 Scroll:ClearAllPoints()
|
Nenue@28
|
499 Scroll:SetPoint('TOP', Scroller, 'TOP')
|
Nenue@28
|
500 self:SetScript('OnEvent', T.OnEvent)
|
Nenue@28
|
501
|
Nenue@28
|
502 Scroller:Show()
|
Nenue@28
|
503
|
Nenue@28
|
504 local from, target, to, x, y = Wrapper:GetPoint(1)
|
Nenue@28
|
505 print(from, target:GetName(), to, x,y)
|
Nenue@28
|
506
|
Nenue@28
|
507 T:Update()
|
Nenue@28
|
508
|
Nenue@28
|
509 -- run once to prime the data structure
|
Nenue@28
|
510 T.UpdateActionButtons()
|
Nenue@28
|
511 end
|
Nenue@28
|
512
|
Nenue@28
|
513 function T:OnDisable()
|
Nenue@28
|
514 self:UnregisterAllEvents()
|
Nenue@28
|
515 Scroller:Hide()
|
Nenue@28
|
516 end
|
Nenue@28
|
517
|