annotate ObjectiveEvents.lua @ 16:880828018bf4

ObjectiveEvents - trim down the number of events that fire full updates - begin the general outline for determining which trackers need to refresh - handlers for accepting and completing auto-popup quests ObjectiveFrame - correct variables for money reward calculation - make sure everythign is scaling to the font strings and that the font strings aren't being pinned by SetSize ObjectiveInfo - implementation of autoquest popups - discern between internal and client bonus objective indexes - acquire the correct data set from bonus objective query ObjectiveStyle - look for a style table under the previously interpreted set before deferring standard options - horizontal/vertical options in gradient - remove height-fixing for font strings
author Nenue
date Tue, 05 Apr 2016 00:39:12 -0400
parents 7923243ae972
children 605e8f0e46db
rev   line source
Nenue@1 1 --- ${PACKAGE_NAME}
Nenue@1 2 -- @file-author@
Nenue@1 3 -- @project-revision@ @project-hash@
Nenue@1 4 -- @file-revision@ @file-hash@
Nenue@1 5 -- Created: 3/30/2016 1:23 AM
Nenue@1 6 local B = select(2,...).frame
Nenue@1 7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
Nenue@1 8 local print = B.print('ObjectiveEvent')
Nenue@1 9
Nenue@6 10 local isHooked
Nenue@6 11 local SmallEvents = {
Nenue@6 12 QUEST_ACCEPTED = 'OnQuestAccepted',
Nenue@6 13 QUEST_REMOVED = 'OnQuestRemoved'
Nenue@6 14 }
Nenue@6 15
Nenue@16 16 --- Using the same values as Blizzard_ObjectiveTracker for use in securehook
Nenue@16 17 local OBJECTIVE_TRACKER_UPDATE_QUEST = 0x0001;
Nenue@16 18 local OBJECTIVE_TRACKER_UPDATE_QUEST_ADDED = 0x0002;
Nenue@16 19 local OBJECTIVE_TRACKER_UPDATE_TASK_ADDED = 0x0004;
Nenue@16 20 local OBJECTIVE_TRACKER_UPDATE_SCENARIO = 0x0008;
Nenue@16 21 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_NEW_STAGE = 0x0010;
Nenue@16 22 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT = 0x0020;
Nenue@16 23 local OBJECTIVE_TRACKER_UPDATE_ACHIEVEMENT_ADDED = 0x0040;
Nenue@16 24 local OBJECTIVE_TRACKER_UPDATE_SCENARIO_BONUS_DELAYED = 0x0080;
Nenue@16 25
Nenue@16 26 local OBJECTIVE_TRACKER_UPDATE_MODULE_QUEST = 0x0100;
Nenue@16 27 local OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP = 0x0200;
Nenue@16 28 local OBJECTIVE_TRACKER_UPDATE_MODULE_BONUS_OBJECTIVE = 0x0400;
Nenue@16 29 local OBJECTIVE_TRACKER_UPDATE_MODULE_SCENARIO = 0x0800;
Nenue@16 30 local OBJECTIVE_TRACKER_UPDATE_MODULE_ACHIEVEMENT = 0x1000;
Nenue@16 31
Nenue@16 32 local OBJECTIVE_TRACKER_UPDATE_STATIC = 0x0000;
Nenue@16 33 local OBJECTIVE_TRACKER_UPDATE_ALL = 0xFFFF;
Nenue@16 34
Nenue@16 35 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_ALL; -- default
Nenue@16 36 local OBJECTIVE_TRACKER_UPDATE_ID = 0;
Nenue@16 37
Nenue@6 38 local HandlerEvents = {
Nenue@16 39 QUEST_ACCEPTED = 0x0003,
Nenue@16 40 QUEST_WATCH_LIST_CHANGED = 0x0003,
Nenue@6 41 SUPER_TRACKED_QUEST_CHANGED = mod.Quest,
Nenue@6 42 QUEST_LOG_UPDATE = mod.Quest,
Nenue@6 43 TRACKED_ACHIEVEMENT_LIST_CHANGED = mod.Cheevs,
Nenue@6 44 TRACKED_ACHIEVEMENT_UPDATE = mod.Cheevs
Nenue@6 45 }
Nenue@6 46
Nenue@6 47 local BlizzHooks = {
Nenue@6 48 ['AddQuestWatch'] = 'AddQuestWatch',
Nenue@6 49 ['RemoveQuestWatch'] = 'RemoveQuestWatch',
Nenue@6 50 ['AbandonQuest'] = 'AbandonQuest',
Nenue@6 51 ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
Nenue@8 52 ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp',
Nenue@16 53 ['RemoveAutoQuestPopUp'] = 'RemoveAutoQuestPopUp',
Nenue@8 54 ['RemoveTrackedAchievement'] = 'RemoveTrackedAchievement'
Nenue@6 55 }
Nenue@6 56
Nenue@6 57 mod.SetEvents = function()
Nenue@6 58
Nenue@6 59 for event, _ in pairs(SmallEvents) do
Nenue@6 60 mod:RegisterEvent(event)
Nenue@6 61 end
Nenue@6 62
Nenue@6 63 for event, _ in pairs(HandlerEvents) do
Nenue@6 64 mod:RegisterEvent(event)
Nenue@6 65 end
Nenue@6 66 mod:SetScript('OnEvent', mod.OnEvent)
Nenue@6 67
Nenue@6 68
Nenue@6 69 if not isHooked then
Nenue@6 70 VeneerData.CallLog = {}
Nenue@6 71 isHooked = true
Nenue@6 72 for blizzFunc, veneerFunc in pairs(BlizzHooks) do
Nenue@6 73 if mod[veneerFunc] then
Nenue@6 74 hooksecurefunc(blizzFunc, mod[veneerFunc])
Nenue@6 75 else
Nenue@6 76 hooksecurefunc(blizzFunc, function(...)
Nenue@6 77 print('catching', blizzFunc, ...)
Nenue@6 78 tinsert(VeneerData.CallLog, {blizzFunc, ...})
Nenue@6 79 end)
Nenue@6 80 end
Nenue@6 81 end
Nenue@6 82
Nenue@6 83 end
Nenue@6 84 end
Nenue@6 85
Nenue@6 86 function mod:OnEvent (event, ...)
Nenue@6 87 local isHandled
Nenue@6 88 if SmallEvents[event] then
Nenue@6 89 print('|cFF00FF00'..SmallEvents[event]..'(' ..event..'|r', ...)
Nenue@6 90 mod[SmallEvents[event]](event, ...)
Nenue@6 91 isHandled = true
Nenue@6 92 end
Nenue@6 93 if HandlerEvents[event] then
Nenue@6 94 print('|cFF0088FF'..event..'|r wrapper update')
Nenue@16 95 mod.UpdateWrapper(event)
Nenue@6 96 isHandled = true
Nenue@6 97 end
Nenue@6 98 if not isHandled then
Nenue@6 99 print('|cFFFF4400'..event..'|r', ...)
Nenue@6 100 end
Nenue@6 101 end
Nenue@6 102
Nenue@1 103 --------------------------------------------------------------------
Nenue@6 104 --- Events that are handled by Blizzard_ObjectiveTracker
Nenue@1 105 --------------------------------------------------------------------
Nenue@1 106 print(mod:GetName())
Nenue@1 107 mod.OnQuestAccepted = function(_, questLogIndex, questID)
Nenue@1 108 AddQuestWatch(questLogIndex)
Nenue@1 109 SetSuperTrackedQuestID(questID)
Nenue@1 110 end
Nenue@1 111
Nenue@1 112 mod.OnQuestComplete = function(_, questLogIndex, questID)
Nenue@1 113 QuestPOIUpdateIcons()
Nenue@1 114 end
Nenue@1 115
Nenue@1 116 mod.OnQuestFinished = function(_, questLogIndex, questID)
Nenue@1 117 mod.TrackClosest()
Nenue@1 118 RemoveQuestWatch(questLogIndex)
Nenue@1 119 end
Nenue@1 120
Nenue@6 121
Nenue@2 122 mod.OnQuestRemoved = function(_, questLogIndex, questID)
Nenue@6 123
Nenue@16 124 mod.UpdateWrapper(0x00000003)
Nenue@6 125
Nenue@2 126 end
Nenue@2 127
Nenue@1 128 mod.OnQuestFromLocation = function(event) end
Nenue@1 129
Nenue@6 130 -------------------------------------------------------------------
Nenue@6 131 --- Function hooks for BlizzUI compatibility
Nenue@6 132 -------------------------------------------------------------------
Nenue@6 133 mod.AddQuestWatch = function(questID)
Nenue@16 134 mod.UpdateWrapper(0x00000003)
Nenue@1 135 end
Nenue@6 136
Nenue@8 137 mod.RemoveQuestWatch = function(questIndex, ...)
Nenue@8 138 print('|cFFFF8800RemoveQuestWatch', questIndex, ...)
Nenue@8 139 local info = mod.Quest.LogInfo[questIndex]
Nenue@8 140
Nenue@8 141 -- remove quest refs
Nenue@8 142 mod.Quest.LogBlock[questIndex] = nil
Nenue@8 143 mod.Quest.QuestBlock[info.questID] = nil
Nenue@8 144
Nenue@8 145 -- remove if they still match
Nenue@8 146 if mod.Quest.WatchInfo[info.watchIndex] == info then
Nenue@8 147 print('cleaning dead WatchInfo entry')
Nenue@8 148 mod.Quest.WatchInfo[info.watchIndex] = nil
Nenue@8 149 end
Nenue@8 150
Nenue@16 151 mod.UpdateWrapper('RemovedQuestWatch' .. tostring(questIndex))
Nenue@8 152 QuestPOIUpdateIcons()
Nenue@8 153 end
Nenue@8 154
Nenue@8 155 mod.RemoveTrackedAchievement = function(cheevID)
Nenue@8 156 print('|cFFFF8800UntrackAchievement', cheevID)
Nenue@8 157 mod.CleanWidgets()
Nenue@6 158 end
Nenue@6 159
Nenue@6 160 mod.AcceptQuest = function()
Nenue@6 161 end
Nenue@6 162
Nenue@6 163 mod.AbandonQuest = function()
Nenue@8 164
Nenue@8 165 QuestPOIUpdateIcons()
Nenue@6 166 end
Nenue@6 167
Nenue@6 168 mod.TurnInQuest = function()
Nenue@8 169
Nenue@8 170 QuestPOIUpdateIcons()
Nenue@16 171 end
Nenue@16 172
Nenue@16 173 mod.AddAutoQuestPopUp = function(...)
Nenue@16 174 print('|cFFFF8800AddAutoQuestPopUp|r', ...)
Nenue@16 175 mod.UpdateWrapper(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
Nenue@16 176 end
Nenue@16 177 mod.RemoveAutoQuestPopUp = function(...)
Nenue@16 178 print('|cFFFF8800RemoveAutoQuestPopUp|r', ...)
Nenue@16 179 mod.UpdateWrapper(OBJECTIVE_TRACKER_UPDATE_MODULE_AUTO_QUEST_POPUP)
Nenue@6 180 end