Mercurial > wow > buffalo2
comparison ObjectiveTracker/ObjectiveTracker.lua @ 34:9856ebc63fa4
- half solution to Update being fired multiple times during load
- change securefunc handlers to dispense a reason code; catch that reason code in the enclosure passed to hooksecurefunc, and decide whether to update or not from there.
| author | Nenue |
|---|---|
| date | Sun, 17 Apr 2016 00:21:45 -0400 |
| parents | 64f2a9bbea79 |
| children | 69d03f8e293e |
comparison
equal
deleted
inserted
replaced
| 33:64f2a9bbea79 | 34:9856ebc63fa4 |
|---|---|
| 65 T.strings = {} | 65 T.strings = {} |
| 66 T.strings.CLICK_TO_ACCCEPT = 'Click to Accept' | 66 T.strings.CLICK_TO_ACCCEPT = 'Click to Accept' |
| 67 T.strings.CLICK_TO_COMPLETE = 'Click to complete' | 67 T.strings.CLICK_TO_COMPLETE = 'Click to complete' |
| 68 T.colors ={ | 68 T.colors ={ |
| 69 enable = true, | 69 enable = true, |
| 70 default = { | |
| 71 titlebg = {'HORIZONTAL', 1, 0, .7, .25, 1, 0, .7, .125}, | |
| 72 textbg = {'HORIZONTAL', 0, 0, 0, 0.4, 0, 0, 0, 0 }, | |
| 73 selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225}, | |
| 74 }, | |
| 75 daily = { | |
| 76 titlebg = {'HORIZONTAL', 0, .7, 1, .25, 0, 1, .7, .125}, | |
| 77 textbg = {'HORIZONTAL', 0, .7, 1, .1, 0, 1, .7, .075 }, | |
| 78 }, | |
| 79 weekly = { | |
| 80 titlebg = {'HORIZONTAL', 0, .35, .7, .25, 0, .35, .7, .125}, | |
| 81 textbg = {'HORIZONTAL', 0, .35, .7, .1, 0, .35, .7, .075 }, | |
| 82 }, | |
| 83 account = { | |
| 84 titlebg = {'HORIZONTAL', .1, .1, .1, .25, .1, .1, .1, .125}, | |
| 85 textbg = {'HORIZONTAL', .1, .1, .1, 0.4, .1, .1, .1, .085 }, | |
| 86 }, | |
| 87 -- alliance | |
| 88 faction_1 = { | |
| 89 titlebg = {'HORIZONTAL', .2, .4, 1, 0.4, .2, .4, 1, .085 }, | |
| 90 textbg = {'HORIZONTAL', .2, .4, 1, 0.4, .2, .4, 1, .085 }, | |
| 91 }, | |
| 92 -- horde | |
| 93 faction_2 = { | |
| 94 titlebg = {'HORIZONTAL', .6, 0, 0.4, 0.4, .6, 0, 0.4, .085 }, | |
| 95 textbg = {'HORIZONTAL', .6, 0, 0.4, 0.4, .6, 0, 0.4, .085 }, | |
| 96 } | |
| 97 } | 70 } |
| 98 | 71 |
| 99 T.watchMoneyReasons = 0 | 72 T.watchMoneyReasons = 0 |
| 100 | 73 |
| 101 --- Baseline defaults table; values defined in the files that they pertain to | 74 --- Baseline defaults table; values defined in the files that they pertain to |
| 102 T.defaults = {} | 75 T.defaults = {} |
| 76 | |
| 103 | 77 |
| 104 --- Tracker display order | 78 --- Tracker display order |
| 105 T.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'} | 79 T.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'} |
| 106 | 80 |
| 107 --- ipairs() argument tables | 81 --- ipairs() argument tables |
| 144 updateReasonEvent = 0x00FF, | 118 updateReasonEvent = 0x00FF, |
| 145 | 119 |
| 146 numWatched = 0, --- number of entries being handled | 120 numWatched = 0, --- number of entries being handled |
| 147 numBlocks = 0, --- number of blocks created | 121 numBlocks = 0, --- number of blocks created |
| 148 actualBlocks = 0, --- number of blocks in use | 122 actualBlocks = 0, --- number of blocks in use |
| 149 | 123 Info = {}, --- stored watch list information, keyed by whatever unique ID is involved for that tracker |
| 150 freeBlocks = {}, --- block heap | 124 Watched = {}, --- stores whether the given unique ID is tracked |
| 151 usedBlocks = {}, | 125 |
| 152 | 126 freeBlocks = {}, --- blocks hidden due to list shrinkage |
| 153 Info = {}, -- find data by ID | 127 usedBlocks = {}, --- block in use |
| 154 BlockInfo = {}, -- find data by block ID | 128 BlockInfo = {}, --- by block creation offset, used by framescript |
| 155 Watched = {}, -- find watchIndex by data ID | 129 |
| 156 WatchInfo = {}, -- find data by watch index | 130 --- Indexes |
| 157 WatchBlock = {}, -- find block by watch index | 131 LogBlock = {}, --- by API log offset, used by GetBlock if possible |
| 132 WatchBlock = {}, --- block by internal offset, used in GetBlock scope | |
| 133 WatchInfo = {}, --- info by internal offset, used in Update scope | |
| 158 } | 134 } |
| 159 | 135 |
| 160 T.AutoQuest = { | 136 T.AutoQuest = { |
| 161 name = "AutoQuest", | 137 name = "AutoQuest", |
| 162 displayName = "Notice", | 138 displayName = "Notice", |
| 163 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, | 139 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, |
| 164 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, | 140 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, |
| 165 LogInfo = {}, | 141 LogInfo = {}, |
| 166 LogBlock = {}, | |
| 167 QuestBlock = {}, | 142 QuestBlock = {}, |
| 168 } | 143 } |
| 169 T.Quest = { | 144 T.Quest = { |
| 170 name = "Quest", | 145 name = "Quest", |
| 171 displayName = "Quests", | 146 displayName = "Quests", |
| 172 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, | 147 updateReasonModule = OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST, |
| 173 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, | 148 updateReasonEvents = OBJECTIVE_TRACKER_UPDATE_QUEST + OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, |
| 174 itemButtons = {}, | 149 itemButtons = {}, |
| 175 freeButtons = {}, | 150 freeButtons = {}, |
| 176 LogInfo = {}, | 151 LogInfo = {}, |
| 177 LogBlock = {}, | |
| 178 QuestBlock = {}, | 152 QuestBlock = {}, |
| 179 } | 153 } |
| 180 T.Cheevs = { | 154 T.Cheevs = { |
| 181 name = "Cheevs", | 155 name = "Cheevs", |
| 182 displayName = "Achievements", | 156 displayName = "Achievements", |
| 271 local GetNumQuestWatches, AddQuestWatch, SetSuperTrackedQuestID = GetNumQuestWatches, AddQuestWatch, SetSuperTrackedQuestID | 245 local GetNumQuestWatches, AddQuestWatch, SetSuperTrackedQuestID = GetNumQuestWatches, AddQuestWatch, SetSuperTrackedQuestID |
| 272 Event.QUEST_ACCEPTED = function(questLogIndex, questID, added) | 246 Event.QUEST_ACCEPTED = function(questLogIndex, questID, added) |
| 273 if ( IsQuestTask(questID) ) then | 247 if ( IsQuestTask(questID) ) then |
| 274 return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED, questID | 248 return OBJECTIVE_TRACKER_UPDATE_TASK_ADDED, questID |
| 275 else | 249 else |
| 276 if ( _G.AUTO_QUEST_WATCH == "1" ) then | |
| 277 AddQuestWatch(questLogIndex); | |
| 278 SetSuperTrackedQuestID(questID); | |
| 279 end | |
| 280 return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added | 250 return OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED, questID, added |
| 281 end | 251 end |
| 282 end | 252 end |
| 283 | 253 |
| 284 Event.QUEST_REMOVED = function(questLogIndex, questID) | 254 Event.QUEST_REMOVED = function(questLogIndex, questID) |
| 372 end | 342 end |
| 373 T.Event = Event | 343 T.Event = Event |
| 374 | 344 |
| 375 --- Done once per ui load | 345 --- Done once per ui load |
| 376 local BlizzHooks = { | 346 local BlizzHooks = { |
| 347 ['AcceptQuest'] = 'AcceptQuest', | |
| 377 ['AddQuestWatch'] = 'AddQuestWatch', | 348 ['AddQuestWatch'] = 'AddQuestWatch', |
| 378 ['RemoveQuestWatch'] = 'RemoveQuestWatch', | 349 ['RemoveQuestWatch'] = 'RemoveQuestWatch', |
| 379 ['AbandonQuest'] = 'AbandonQuest', | 350 ['AbandonQuest'] = 'AbandonQuest', |
| 380 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest', | 351 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest', |
| 381 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp', | 352 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp', |
| 411 end | 382 end |
| 412 end | 383 end |
| 413 | 384 |
| 414 local iprint = B.print('Info') | 385 local iprint = B.print('Info') |
| 415 T.SetRewards = function(t, questID) | 386 T.SetRewards = function(t, questID) |
| 387 local previousSelection = GetQuestLogSelection() | |
| 416 | 388 |
| 417 SelectQuestLogEntry(GetQuestLogIndexByID(questID)) | 389 SelectQuestLogEntry(GetQuestLogIndexByID(questID)) |
| 418 local numQuestChoices = GetNumQuestLogChoices(); | 390 local numQuestChoices = GetNumQuestLogChoices(); |
| 419 local skillName, skillIcon, skillPoints = GetQuestLogRewardSkillPoints(); | 391 local skillName, skillIcon, skillPoints = GetQuestLogRewardSkillPoints(); |
| 420 local xp = GetQuestLogRewardXP(); | 392 local xp = GetQuestLogRewardXP(); |
| 421 local playerTitle = GetQuestLogRewardTitle(); | 393 local playerTitle = GetQuestLogRewardTitle(); |
| 422 ProcessQuestLogRewardFactions(); | 394 ProcessQuestLogRewardFactions(); |
| 395 if previousSelection then | |
| 396 SelectQuestLogEntry(previousSelection) | |
| 397 end | |
| 398 | |
| 423 local rewards = {} | 399 local rewards = {} |
| 424 local texture, name, isTradeskillSpell, isSpellLearned, hideSpellLearnText, isBoostSpell, garrFollowerID = GetQuestLogRewardSpell(questID) | 400 local texture, name, isTradeskillSpell, isSpellLearned, hideSpellLearnText, isBoostSpell, garrFollowerID = GetQuestLogRewardSpell(questID) |
| 425 if name then | 401 if name then |
| 426 tinsert(rewards,{ | 402 tinsert(rewards,{ |
| 427 type = 'spell', | 403 type = 'spell', |
| 471 t.rewardInfo = rewards | 447 t.rewardInfo = rewards |
| 472 end | 448 end |
| 473 end | 449 end |
| 474 | 450 |
| 475 local Play = function(file) if Devian and Devian.InWorkspace() then PlaySoundFile(file) end end | 451 local Play = function(file) if Devian and Devian.InWorkspace() then PlaySoundFile(file) end end |
| 452 | |
| 453 T.OnHookedFunc = function(name, ...) | |
| 454 print('|cFFFF8800securehook:|r', name, '|cFF00FFFFargs:|r', ...) | |
| 455 local updateReason = T[name](...) | |
| 456 if updateReason then | |
| 457 print('|cFF00FFFFupdate reason:|r', updateReason) | |
| 458 T:Update(updateReason) | |
| 459 end | |
| 460 end | |
| 476 | 461 |
| 477 function T:OnEvent (event, ...) | 462 function T:OnEvent (event, ...) |
| 478 local isHandled | 463 local isHandled |
| 479 print('OnEvent(|cFF00FF00'.. event ..'|r):', ...) | 464 print('OnEvent(|cFF00FF00'.. event ..'|r):', ...) |
| 480 local reason, arg1, arg2, arg3 | 465 local reason, arg1, arg2, arg3 |
| 520 VeneerData.CallLog = VeneerData.CallLog or {} | 505 VeneerData.CallLog = VeneerData.CallLog or {} |
| 521 if not T.isHooked then | 506 if not T.isHooked then |
| 522 T.isHooked = true | 507 T.isHooked = true |
| 523 for blizzFunc, veneerFunc in pairs(BlizzHooks) do | 508 for blizzFunc, veneerFunc in pairs(BlizzHooks) do |
| 524 if T[veneerFunc] then | 509 if T[veneerFunc] then |
| 525 hooksecurefunc(blizzFunc, T[veneerFunc]) | 510 hooksecurefunc(blizzFunc, function(...) return T.OnHookedFunc(blizzFunc, ...) end) |
| 526 else | 511 else |
| 527 hooksecurefunc(blizzFunc, function(...) | 512 hooksecurefunc(blizzFunc, function(...) |
| 528 print('|cFFFF0088securehook('..tostring(blizzFunc)..')|r args:', ...) | 513 print('|cFFFF0088securehook('..tostring(blizzFunc)..')|r args:', ...) |
| 529 tinsert(VeneerData.CallLog, {blizzFunc, ...}) | 514 tinsert(VeneerData.CallLog, {blizzFunc, ...}) |
| 530 end) | 515 end) |
| 549 | 534 |
| 550 --- Done any time the the minimize button is toggled up | 535 --- Done any time the the minimize button is toggled up |
| 551 function T:OnEnable() | 536 function T:OnEnable() |
| 552 | 537 |
| 553 print(B.Conf.VeneerObjectiveWrapper.enabled) | 538 print(B.Conf.VeneerObjectiveWrapper.enabled) |
| 554 if not B.Conf.VeneerObjectiveWrapper.enabled then | 539 |
| 555 return | |
| 556 end | |
| 557 | 540 |
| 558 for event, action in pairs(Event) do | 541 for event, action in pairs(Event) do |
| 559 print('|cFFFF0088listen to', event, 'for action|r', tostring(action)) | 542 print('|cFFFF0088listen to', event, 'for action|r', tostring(action)) |
| 560 Wrapper:RegisterEvent(event) | 543 Wrapper:RegisterEvent(event) |
| 561 end | 544 end |
