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 |
