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