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