annotate ObjectiveTracker/ObjectiveTracker.lua @ 29:adcd7c328d07

code collation cleaning
author Nenue
date Wed, 13 Apr 2016 21:53:24 -0400
parents c33c17dd97e7
children 7583684becf4
rev   line source
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