Mercurial > wow > buffalo2
comparison ObjectiveCore.lua @ 19:605e8f0e46db
ObjectiveCore / Style / Events / Frame
- polishing the execution path for better performance
- make use of the Blizzard_ObjectiveTracker bitfield values to ensure compatibility in possible secure hooks
- avoid full updates when possible (using said bitfield values to indicate targeted sections)
- extreme streamlining of event handling layout: specific reason updates are invoked from API hooks; broader updates are invoked by when the event listener catches something vague like 'QUEST_LOG_UPDATE'
author | Nenue |
---|---|
date | Wed, 06 Apr 2016 07:38:35 -0400 |
parents | 880828018bf4 |
children | 6bd2102d340b |
comparison
equal
deleted
inserted
replaced
18:d1812fb10ae6 | 19:605e8f0e46db |
---|---|
1 --- ${PACKAGE_NAME} | 1 --- ${PACKAGE_NAME} |
2 -- @file-author@ | 2 -- @file-author@ |
3 -- @project-revision@ @project-hash@ | 3 -- @project-revision@ @project-hash@ |
4 -- @file-revision@ @file-hash@ | 4 -- @file-revision@ @file-hash@ |
5 -- Created: 3/26/2016 1:51 AM | 5 -- Created: 3/26/2016 1:51 AM |
6 local B = select(2,...).frame | 6 local B, _G = select(2,...).frame, _G |
7 local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring | 7 local pairs, setmetatable, type, tostring = _G.pairs, _G.setmetatable, _G.type, _G.tostring |
8 local format = string.format | 8 local format = _G.format |
9 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | 9 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') |
10 local print = B.print('Objectives') | 10 local print = B.print('Objectives') |
11 local ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame = ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame | 11 local ObjectiveTrackerFrame, VeneerObjectiveScroll, CreateFrame = _G.ObjectiveTrackerFrame, _G.VeneerObjectiveScroll, _G.CreateFrame |
12 | 12 local Wrapper = _G.VeneerObjectiveWrapper |
13 --[[ | 13 local ipairs, tinsert, hooksecurefunc = _G.ipairs, _G.tinsert, _G.hooksecurefunc |
14 Full quest info is available if: | 14 local Scroller = VeneerObjectiveWrapper.scrollArea |
15 - It's in the player quest log, or is available from the Gossip interface | 15 local Scroll = _G.VeneerObjectiveScroll |
16 - It's being shared from another player and is acceptible | |
17 - It's an auto-quest that is available in the current location | |
18 Partial quest info is availabe if: | |
19 - It's already completed (i.e. it appears in CompletedQuestInfo()). | |
20 - It's an scheduled interval quest (daily, weekly, etc.) | |
21 - It's contained in a quest link received from chat | |
22 Under any other circumstances, only minimal info can be pulled: | |
23 - Its availability to the player | |
24 - Its relation with the currently engaged NPC | |
25 - Its binary completion status | |
26 | |
27 ]] | |
28 | |
29 | 16 |
30 --- Performance values | 17 --- Performance values |
31 --[[ | 18 --[[ |
32 self:RegisterEvent("QUEST_LOG_UPDATE"); | 19 self:RegisterEvent("QUEST_LOG_UPDATE"); |
33 self:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED"); | 20 self:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED"); |
43 self:RegisterEvent("QUEST_POI_UPDATE"); | 30 self:RegisterEvent("QUEST_POI_UPDATE"); |
44 self:RegisterEvent("VARIABLES_LOADED"); | 31 self:RegisterEvent("VARIABLES_LOADED"); |
45 self:RegisterEvent("QUEST_TURNED_IN"); | 32 self:RegisterEvent("QUEST_TURNED_IN"); |
46 self:RegisterEvent("PLAYER_MONEY"); | 33 self:RegisterEvent("PLAYER_MONEY"); |
47 ]] | 34 ]] |
48 mod.Reason ={ | 35 |
49 UPDATE_MASK_AUTOQUEST = 0x00000001, | 36 |
50 UPDATE_MASK_QUEST = 0x00000002, | 37 --- These are the bitfields used by Blizzard_ObjectiveTracker to determine which segments get parsed. |
51 UPDATE_MASK_BONUS = 0x00000004, | 38 --- They are replicated here so that plugins can make use of any securehook args involving this info. |
52 UPDATE_MASK_CHEEVS = 0x00000008, | 39 local OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST -- 0x0100 |
53 UPDATE_MASK_ALL = 0x00000017, | 40 local OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP = OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP -- 0x0200 |
54 | 41 local OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE -- 0x0400 |
55 QUEST_LOG_UPDATE = 0x00000003, | 42 local OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO -- 0x0800 |
56 TRACKED_ACHIEVEMENT_LIST_CHANGED = 0x00000008, | 43 local OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT -- 0x1000 |
57 QUEST_WATCH_LIST_CHANGED = 0x00000003, | 44 |
58 QUEST_AUTOCOMPLETE = 0x00000003, | 45 |
59 QUEST_ACCEPTED = 0x00000003, | 46 local OBJECTIVE_TRACKER_UPDATE_STATIC = OBJECTIVE_TRACKER_UPDATE_STATIC -- 0x0000 |
60 SUPER_TRACKED_QUEST_CHANGED = 0x00000002, | 47 local OBJECTIVE_TRACKER_UPDATE_ALL = OBJECTIVE_TRACKER_UPDATE_ALL -- 0xFFFF |
61 SCENARIO_UPDATE = 0x00000004, | 48 local OBJECTIVE_TRACKER_UPDATE_ID = OBJECTIVE_TRACKER_UPDATE_ID -- 0 |
62 SCENARIO_CRITERIA_UPDATE = 0x00000004, | 49 |
63 TRACKED_ACHIEVEMENT_UPDATE = 0x00000008, | 50 local OBJECTIVE_TRACKER_UPDATE_QUEST = OBJECTIVE_TRACKER_UPDATE_QUEST -- 0x0001 |
64 ZONE_CHANGED_NEW_AREA = 0x00000017, | 51 local OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED = OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED -- 0x0002 |
65 ZONE_CHANGED = 0x00000017, | 52 local OBJECTIVE_TRACKER_UPDATE_TASK_ADDED = OBJECTIVE_TRACKER_UPDATE_TASK_ADDED -- 0x0004 |
66 QUEST_POI_UPDATE = 0x00000003, | 53 local OBJECTIVE_TRACKER_UPDATE_SCENARIO = OBJECTIVE_TRACKER_UPDATE_SCENARIO -- 0x0008 |
67 QUEST_TURNED_IN = 0x00000003, | 54 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE = OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE -- 0x0010 |
68 } | 55 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT -- 0x0020 |
56 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED -- 0x0040 | |
57 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED = OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED -- 0x0080 | |
58 | |
59 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_ALL -- default | |
60 --- Used to determine which trackers are listening for money events | |
69 mod.MoneyReasons = 0 | 61 mod.MoneyReasons = 0 |
70 | 62 |
71 --- Baseline defaults | 63 --- Baseline defaults table; values defined in the files that they pertain to |
72 mod.defaults = {} | 64 mod.defaults = {} |
73 | 65 |
74 --- list used to make things happen | 66 --- Tracker display order |
75 mod.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'} | 67 mod.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'} |
76 | 68 |
77 --- ipairs() list of handlers for wrapper update | 69 --- ipairs() argument tables |
78 mod.orderedHandlers = {} | 70 mod.orderedHandlers = setmetatable({}, {__mode = "k"}) |
79 mod.orderedTrackers = {} | 71 mod.orderedTrackers = setmetatable({}, {__mode = "k"}) |
80 mod.indexedTrackers = {} | 72 mod.indexedTrackers = setmetatable({}, {__mode = "k"}) |
81 --- pairs() list of handler frames for tracker updates | 73 |
82 mod.namedTrackers = {} | 74 --- pairs() argument tables |
83 | 75 mod.namedTrackers = setmetatable({}, {__mode = "k"}) |
84 --- Handler stubs | 76 |
77 local WRAPPER_ANCHOR_POINT = 'TOPRIGHT' | |
78 local WRAPPER_OFFSET_X = 0 | |
79 local WRAPPER_OFFSET_Y = -200 | |
80 local WRAPPER_MAX_HEIGHT = 670 | |
81 local WRAPPER_WIDTH = 280 | |
82 local WRAPPER_HEADER_HEIGHT = 24 | |
83 | |
84 mod.defaults.Wrapper = { | |
85 AnchorPoint = WRAPPER_ANCHOR_POINT, | |
86 OffsetX = WRAPPER_OFFSET_X, | |
87 OffsetY = WRAPPER_OFFSET_Y, | |
88 Height = WRAPPER_MAX_HEIGHT, | |
89 Width = WRAPPER_WIDTH, | |
90 HeaderHeight = WRAPPER_HEADER_HEIGHT | |
91 } | |
92 --- Tracker module definitions begin here; innards dealing with data retreival and output are defined further in | |
93 mod.DefaultTracker = { | |
94 previousHeight = 0, | |
95 | |
96 name = "temp", | |
97 displayName = "temp", | |
98 updateReasonModule = 0xFF00, | |
99 updateReasonEvent = 0x00FF, | |
100 | |
101 numWatched = 0, --- number of entries being handled | |
102 numBlocks = 0, --- number of blocks created | |
103 actualBlocks = 0, --- number of blocks in use | |
104 | |
105 freeBlocks = {}, --- block heap | |
106 usedBlocks = {}, | |
107 | |
108 Info = {}, -- find data by ID | |
109 BlockInfo = {}, -- find data by block ID | |
110 Watched = {}, -- find watchIndex by data ID | |
111 WatchInfo = {}, -- find data by watch index | |
112 WatchBlock = {}, -- find block by watch index | |
113 } | |
114 | |
85 mod.AutoQuest = { | 115 mod.AutoQuest = { |
86 name = "AutoQuest", | 116 name = "AutoQuest", |
87 displayName = "Notice", | 117 displayName = "Notice", |
118 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, | |
119 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + | |
120 OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, | |
88 } | 121 } |
89 mod.Quest = { | 122 mod.Quest = { |
90 name = "Quest", | 123 name = "Quest", |
91 displayName = "Quests", | 124 displayName = "Quests", |
125 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, | |
126 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + | |
127 OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, | |
92 } | 128 } |
93 mod.Cheevs = { | 129 mod.Cheevs = { |
94 name = "Cheevs", | 130 name = "Cheevs", |
95 displayName = "Achievements", | 131 displayName = "Achievements", |
132 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT, | |
133 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT + | |
134 OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, | |
96 } | 135 } |
97 mod.Bonus = { | 136 mod.Bonus = { |
98 name = "Bonus", | 137 name = "Bonus", |
99 displayName = "Bonus Objectives", | 138 displayName = "Bonus Objectives", |
100 } | 139 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE, |
101 | 140 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + |
102 --- Handler template | 141 OBJECTIVE_TRACKER_UPDATE_TASK_ADDED + |
103 local CreateHandler = function (self, name, index) | 142 OBJECTIVE_TRACKER_UPDATE_SCENARIO + |
104 print(self, name) | 143 OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE + |
144 OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED | |
145 } | |
146 | |
147 local Tracker_string = function (self) | |
148 return self.name | |
149 end | |
150 local Tracker_call = function (self, reason) | |
151 self:Update(reason) | |
152 end | |
153 | |
154 local Tracker_Initialize = function (self, name, index) | |
155 print('Initializing |cFF00FFFF'..name..'|r module...') | |
105 | 156 |
106 local handler = setmetatable(mod[name] or {}, { | 157 local handler = setmetatable(mod[name] or {}, { |
107 __tostring = function() return name end, | 158 __tostring = Tracker_string, |
108 __call = function (self) mod.UpdateTracker(self) end | 159 __call = Tracker_call |
109 }) | 160 }) |
110 if type(mod.orderedHandlers[index]) == 'table' then | 161 if type(mod.orderedHandlers[index]) == 'table' then |
111 return mod.orderedHandlers[index] | 162 return mod.orderedHandlers[index] |
112 end | 163 end |
113 | 164 |
114 print('take up locals first') | 165 print('|cFFFFFF00Acquiring locals') |
115 local preset = {} | 166 local preset = {} |
116 for k,v in pairs(mod[name]) do | 167 for k, _ in pairs(handler) do |
117 preset[k] = true | 168 preset[k] = true |
118 if type(v) == 'table' then | 169 end |
119 handler[k] = {} | 170 |
120 else | 171 |
121 handler[k] = v | 172 print('|cFFFF8800Inheriting') |
122 end | |
123 end | |
124 | |
125 | |
126 print('resulting handler contents') | |
127 for k, v in pairs(self) do | 173 for k, v in pairs(self) do |
128 if not handler[k] then | 174 if not handler[k] then |
129 if type(v) == 'table' then | 175 if type(v) == 'table' then |
130 -- assume all tables to be local data; don't inherit or ref | 176 -- assume all tables to be local data; don't inherit or ref |
131 handler[k] = {} | 177 handler[k] = {} |
132 else | 178 else |
133 handler[k] = mod.Tracker[k] | 179 handler[k] = self[k] |
134 end | 180 end |
135 else | 181 print('copying', k) |
136 print(name, 'has its own', k) | |
137 end | 182 end |
138 end | 183 end |
139 print('|cFFFF4400'..tostring(name)..'|r:') | 184 print('|cFFFF4400'..tostring(name)..'|r:') |
140 for k, v in pairs(handler) do | 185 for k, v in pairs(handler) do |
141 print(format("%24s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v))) | 186 print(format("%32s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v))) |
142 end | 187 end |
143 | 188 |
144 mod[name] = handler | 189 mod[name] = handler |
190 | |
191 local trackerName = 'Veneer'..name..'Tracker' | |
192 local handler = mod[name] | |
193 local frame = CreateFrame('Frame', trackerName, _G.VeneerObjectiveScroll, 'VeneerTrackerTemplate') | |
194 frame.title:SetText(handler.displayName) | |
195 mod.SetBlockStyle(frame, 'Tracker', 'Normal') | |
196 handler.frame = frame | |
197 handler.trackerName = trackerName | |
198 mod.orderedTrackers[index] = frame | |
199 mod.namedTrackers[name] = frame | |
200 mod.indexedTrackers[handler] = frame | |
201 print('|cFFFF0088' .. trackerName .. '|r created for |cFF00FFFF' .. handler.displayName .. '|r module') | |
145 | 202 |
146 mod.orderedHandlers[index] = handler | 203 mod.orderedHandlers[index] = handler |
147 return true | 204 return true |
148 end | 205 end |
149 | 206 |
150 mod.Tracker = setmetatable({}, { | 207 function mod:OnEvent (event, ...) |
151 __call = CreateHandler, | 208 local isHandled |
152 __tostring = function() return 'DEFAULT_TRACKING_HANDLER' end | 209 print('|cFF00FF00'.. event ..'|r', ...) |
153 }) | 210 if ( event == "QUEST_LOG_UPDATE" ) then |
154 local Tracker = mod.Tracker | 211 mod:Update(OBJECTIVE_TRACKER_UPDATE_QUEST); |
155 Tracker.numWatched = 0 --- number of entries being handled | 212 elseif ( event == "TRACKED_ACHIEVEMENT_UPDATE" ) then |
156 Tracker.numBlocks = 0 --- number of blocks created | 213 --AchievementObjectiveTracker_OnAchievementUpdate(...); |
157 Tracker.actualBlocks = 0 --- number of blocks in use | 214 mod.Cheevs:Update(OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT) |
158 | 215 elseif ( event == "QUEST_ACCEPTED" ) then |
159 Tracker.freeBlocks = {} --- block heap | 216 local questLogIndex, questID = ...; |
160 Tracker.usedBlocks = {} | 217 if ( IsQuestTask(questID) ) then |
161 | 218 mod:Update(OBJECTIVE_TRACKER_UPDATE_TASK_ADDED, questID); |
162 Tracker.Watched = {} -- find by watchIndex | |
163 Tracker.Info = {} -- find by data ID | |
164 Tracker.BlockInfo = {} -- find by block ID | |
165 Tracker.WatchInfo = {} -- find data by watch index | |
166 Tracker.WatchBlock = {} -- find block by watch index | |
167 | |
168 | |
169 | |
170 Tracker.GetBlock = function(handler, blockIndex) | |
171 local block = handler.usedBlocks[blockIndex] | |
172 if not handler.usedBlocks[blockIndex] then | |
173 if #handler.freeBlocks >= 1 then | |
174 block = handler.freeBlocks[#handler.freeBlocks] | |
175 handler.freeBlocks[#handler.freeBlocks] = nil | |
176 else | 219 else |
177 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, VeneerObjectiveScroll, 'VeneerTrackerBlock') | 220 if ( AUTO_QUEST_WATCH == "1" and GetNumQuestWatches() < MAX_WATCHABLE_QUESTS ) then |
178 block.SetStyle = mod.SetBlockStyle | 221 AddQuestWatch(questLogIndex); |
179 block.Select = handler.Select | 222 SetSuperTrackedQuestID(questID); |
180 block.Open = handler.Open | 223 end |
181 block.Remove = handler.Remove | 224 end |
182 block.Link = handler.Link | 225 elseif ( event == "TRACKED_ACHIEVEMENT_LIST_CHANGED" ) then |
183 block:SetScript('OnMouseUp', handler.OnMouseUp) | 226 local achievementID, added = ...; |
184 block:SetScript('OnMouseDown', handler.OnMouseDown) | 227 if ( added ) then |
185 block:ClearAllPoints() | 228 mod:Update(OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED, achievementID); |
186 end | 229 else |
187 | 230 mod:Update(OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT); |
188 handler.usedBlocks[blockIndex] = block | 231 end |
189 end | 232 elseif ( event == "QUEST_WATCH_LIST_CHANGED" ) then |
190 return handler.usedBlocks[blockIndex] | 233 local questID, added = ...; |
191 end | 234 if ( added ) then |
192 | 235 if ( not IsQuestTask(questID) ) then |
236 mod:Update(OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID); | |
237 end | |
238 else | |
239 mod:Update(OBJECTIVE_TRACKER_UPDATE_QUEST); | |
240 end | |
241 elseif ( event == "QUEST_POI_UPDATE" ) then | |
242 QuestPOIUpdateIcons(); | |
243 if ( GetCVar("trackQuestSorting") == "proximity" ) then | |
244 SortQuestWatches(); | |
245 end | |
246 | |
247 mod:Update(OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST); | |
248 | |
249 elseif ( event == "SCENARIO_CRITERIA_UPDATE" ) then | |
250 mod:Update(OBJECTIVE_TRACKER_UPDATE_SCENARIO); | |
251 elseif ( event == "SUPER_TRACKED_QUEST_CHANGED" ) then | |
252 mod:Update(OBJECTIVE_TRACKER_UPDATE_QUEST) | |
253 elseif ( event == "ZONE_CHANGED" ) then | |
254 local inMicroDungeon = IsPlayerInMicroDungeon(); | |
255 if ( inMicroDungeon ~= self.inMicroDungeon ) then | |
256 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then | |
257 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker | |
258 end | |
259 --SortQuestWatches(); | |
260 self.inMicroDungeon = inMicroDungeon; | |
261 end | |
262 elseif ( event == "QUEST_AUTOCOMPLETE" ) then | |
263 local questId = ...; | |
264 AddAutoQuestPopUp(questId, "COMPLETE"); | |
265 elseif ( event == "SCENARIO_UPDATE" ) then | |
266 local newStage = ...; | |
267 if ( newStage ) then | |
268 mod:Update(OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE); | |
269 else | |
270 mod:Update(OBJECTIVE_TRACKER_UPDATE_SCENARIO); | |
271 end | |
272 elseif ( event == "ZONE_CHANGED_NEW_AREA" ) then | |
273 if ( not WorldMapFrame:IsShown() and GetCVarBool("questPOI") ) then | |
274 SetMapToCurrentZone(); -- update the zone to get the right POI numbers for the tracker | |
275 end | |
276 SortQuestWatches(); | |
277 elseif ( event == "QUEST_TURNED_IN" ) then | |
278 local questID, xp, money = ...; | |
279 if ( IsQuestTask(questID) ) then | |
280 mod.Bonus:Update() | |
281 end | |
282 elseif ( event == "PLAYER_MONEY" and self.watchMoneyReasons > 0 ) then | |
283 mod:Update(self.watchMoneyReasons); | |
284 end | |
285 end | |
286 | |
287 --- Done once per ui load | |
288 local BlizzHooks = { | |
289 ['AddQuestWatch'] = 'AddQuestWatch', | |
290 ['RemoveQuestWatch'] = 'RemoveQuestWatch', | |
291 ['AbandonQuest'] = 'AbandonQuest', | |
292 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest', | |
293 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp', | |
294 ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp', | |
295 ['AddTrackedAchievement'] = 'AddTrackedAchievement', | |
296 ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement', | |
297 ['SetSuperTrackedQuestID'] = 'SetSuperTrackedQuestID' | |
298 } | |
299 local VeneerData | |
193 function mod:OnInitialize() | 300 function mod:OnInitialize() |
194 self.InitializeWrapper() | 301 local c = mod.Conf.Wrapper |
195 self.InitializeXPTracker() | 302 VeneerData = _G.VeneerData |
196 mod.SetEvents() | 303 VeneerData.CallLog = VeneerData.CallLog or {} |
304 if not mod.isHooked then | |
305 mod.isHooked = true | |
306 for blizzFunc, veneerFunc in pairs(BlizzHooks) do | |
307 if mod[veneerFunc] then | |
308 hooksecurefunc(blizzFunc, mod[veneerFunc]) | |
309 else | |
310 hooksecurefunc(blizzFunc, function(...) | |
311 print('|cFFFF0088securehook('..tostring(blizzFunc)..')|r args:', ...) | |
312 tinsert(VeneerData.CallLog, {blizzFunc, ...}) | |
313 end) | |
314 end | |
315 end | |
316 end | |
317 Scroller:SetScrollChild(Scroll) | |
318 Scroller:SetWidth(c.Width) | |
319 Scroll:SetPoint('TOPLEFT', Scroller, 'TOPLEFT') | |
320 Scroll:SetWidth(c.Width) | |
197 ObjectiveTrackerFrame:UnregisterAllEvents() | 321 ObjectiveTrackerFrame:UnregisterAllEvents() |
198 ObjectiveTrackerFrame:Hide() | 322 ObjectiveTrackerFrame:Hide() |
199 end | 323 end |
324 | |
325 --- Done any time the the minimize button is toggled up | |
326 | |
327 function mod:OnEnable() | |
328 for id, name in ipairs(mod.orderedNames) do | |
329 if not mod.orderedHandlers[id] then | |
330 Tracker_Initialize(mod.DefaultTracker, name, id) | |
331 end | |
332 end | |
333 | |
334 for event, func in pairs(mod) do | |
335 if type(func) == 'function' and event:match('^[A-Z_]+$') then | |
336 print('|cFFFF44FFlistening to', event) | |
337 Wrapper:RegisterEvent(event) | |
338 end | |
339 end | |
340 | |
341 local c = mod.Conf.Wrapper | |
342 Wrapper:SetPoint(c.AnchorPoint, UIParent, c.AnchorPoint, c.OffsetX, c.OffsetY) | |
343 B.Conf.FramePosition[Wrapper:GetName()] = {c.AnchorPoint, c.AnchorPoint, c.OffsetX, c.OffsetY} | |
344 Wrapper:SetWidth(c.Width) | |
345 | |
346 | |
347 mod.InitializeWidgets() | |
348 mod:Update() | |
349 end | |
350 | |
351 function mod:OnDisable() | |
352 | |
353 end | |
354 | |
355 |