annotate ObjectiveTracker/ObjectiveCore.lua @ 77:51f248dc0276

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