Mercurial > wow > buffalo2
comparison ObjectiveInfo.lua @ 21:d5ee940de273
use hardcoded aesthetic manipulations over loadstring cramming
author | Nenue |
---|---|
date | Fri, 08 Apr 2016 06:12:05 -0400 |
parents | 605e8f0e46db |
children | 9b3fa734abff |
comparison
equal
deleted
inserted
replaced
20:6bd2102d340b | 21:d5ee940de273 |
---|---|
31 AutoQuest.LogBlock = {} | 31 AutoQuest.LogBlock = {} |
32 AutoQuest.QuestBlock = {} | 32 AutoQuest.QuestBlock = {} |
33 AutoQuest.WatchBlock = {} | 33 AutoQuest.WatchBlock = {} |
34 function AutoQuest:GetNumWatched () | 34 function AutoQuest:GetNumWatched () |
35 print(self.name, self) | 35 print(self.name, self) |
36 Quest:GetNumWatched() | |
36 self.numWatched = GetNumAutoQuestPopUps() | 37 self.numWatched = GetNumAutoQuestPopUps() |
38 | |
37 return self.numWatched | 39 return self.numWatched |
38 end | 40 end |
39 AutoQuest.GetInfo = function(self, popupIndex) | 41 AutoQuest.GetInfo = function(self, popupIndex) |
40 | 42 |
41 local questID, type = GetAutoQuestPopUp(popupIndex) | 43 local questID, type = GetAutoQuestPopUp(popupIndex) |
42 local questIndex = GetQuestLogIndexByID(questID) | 44 local questIndex = GetQuestLogIndexByID(questID) |
43 local questWatchIndex = GetQuestWatchIndex(questIndex) | 45 local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questIndex) |
44 | 46 |
45 local questInfo = Quest:GetInfo(questWatchIndex) | |
46 self.Info[questID] = { | 47 self.Info[questID] = { |
47 title = questInfo.title, | 48 title = title, |
48 description = type, | 49 description = type, |
49 popupType = type, | 50 popupType = type, |
50 questID = questID, | 51 questID = questID, |
51 questIndex = questIndex, | 52 questIndex = questIndex, |
52 popupIndex = popupIndex, | 53 popupIndex = popupIndex, |
53 watchIndex = questWatchIndex, | |
54 numObjectives = 0 | |
55 } | 54 } |
55 self.WatchInfo[popupIndex] = self.Info[questID] | |
56 | 56 |
57 | 57 |
58 return self.Info[questID] | 58 return self.Info[questID] |
59 end | 59 end |
60 | 60 |
61 ----------------------------- | 61 ----------------------------- |
62 --- BONUS OBJECTIVE | 62 --- BONUS OBJECTIVE |
63 Bonus.TasksTable = {} | 63 -- The default UI pops them up as you enter their relevant areas, but the data is actually available at all times. |
64 Bonus.TasksPOI = {} | 64 -- The only requirement is that you've been to said area and progressed any of the objectives. |
65 Bonus.TaskScenario = {} | 65 -- Blizzard deal with this fact by caching any task data collected during session and masking out whatever gets completed. |
66 | 66 -- For the addon's module structure to work, GetNumWatched method also invokes a tasks table scan. |
67 local taskData = {} | 67 -- That composes the table searched by GetInfo(). |
68 | |
69 ------------------------------------------------------------------------------------------ | |
70 --- These functions are copied from Blizzard_BonusObjectiveTracker.lua; | |
71 -- It's kind of dumb, but this avoids the risk of code taint. | |
72 | |
73 --- Returns a tasks table modified to include recently completed objectives | |
74 local completedTasks = {} | |
75 local InternalGetTasksTable = function() | |
76 local tasks = GetTasksTable() | |
77 for questID, data in pairs(completedTasks) do | |
78 if questID > 0 then | |
79 local found = false | |
80 for i = 1, #tasks do | |
81 if tasks[i] == questID then | |
82 found = true | |
83 break | |
84 end | |
85 end | |
86 -- if it's not part of the current table, then try to insert it where it was last found | |
87 if not found then | |
88 if data.watchIndex < #tasks then | |
89 tinsert(tasks, data.watchIndex, data) | |
90 else | |
91 tinsert(tasks, data) | |
92 end | |
93 end | |
94 end | |
95 end | |
96 return tasks | |
97 end | |
98 | |
99 --- Returns an entry from the composed tasks table if possible, otherwise makes an API pull | |
100 local InternalGetTaskInfo = function(questID) | |
101 if completedTasks[questID] then | |
102 return true, true, #completedTasks[questID].objectives | |
103 else | |
104 return GetTaskInfo(questID) | |
105 end | |
106 end | |
107 | |
108 --- Same as above but for the objective entries | |
109 local InternalGetQuestObjectiveInfo = function(questID, objectiveIndex) | |
110 if ( completedTasks[questID] ) then | |
111 return completedTasks[questID].objectives[objectiveIndex], completedTasks[questID].objectiveType, true; | |
112 else | |
113 return GetQuestObjectiveInfo(questID, objectiveIndex, false); | |
114 end | |
115 end | |
116 | |
117 --- end redundant copy of silliness | |
118 ------------------------------------------------------------------------------------------ | |
119 | |
120 Bonus.Completed = {} | |
121 Bonus.POI = {} | |
122 Bonus.Scenario = {} | |
68 Bonus.QuestBlock = {} | 123 Bonus.QuestBlock = {} |
69 Bonus.TaskWatch = {} | |
70 function Bonus:GetNumWatched () | 124 function Bonus:GetNumWatched () |
71 print(self.name, self) | 125 print(self.name, self) |
72 local tasks = GetTasksTable() | 126 local tasks = InternalGetTasksTable() |
73 local numTasks = 0 | 127 local numWatched = 0 |
74 Bonus.TaskWatch = {} | 128 local numAll = 0 |
129 self.WatchInfo = {} | |
75 print('|cFFFFFF00Bonus.GetNumWatched()|r', #tasks) | 130 print('|cFFFFFF00Bonus.GetNumWatched()|r', #tasks) |
76 for i, questID in ipairs(tasks) do | 131 for i, questID in ipairs(tasks) do |
77 local t = Bonus.StoreTask(questID) | 132 local isInArea, isOnMap, numObjectives = InternalGetTaskInfo(questID) |
78 print (' taskIndex', i, 'questID', questID) | 133 local existingTask = self.QuestBlock[questID] |
79 print(' isComplete', t.isComplete) | 134 local displayObjectiveHeader = false; |
80 if (t.inInArea or t.isOnMap) and not t.isComplete then | 135 print (' |cFF00FF00taskIndex', i, 'questID', questID, 'inArea', isInArea, 'onMap', isOnMap, 'existing', (existingTask and 'Y' or 'N')) |
81 numTasks = numTasks + 1 | 136 if isInArea or isOnMap then |
82 Bonus.TaskWatch[numTasks] = t | 137 self.Info[questID] = self.Info[questID] or {} |
83 end | 138 |
84 end | 139 local t = self.Info[questID] |
85 Bonus.numAll = #Bonus.TasksTable | 140 local title = GetQuestLogTitle(questID) |
86 Bonus.numWatched = numTasks | 141 self.WatchInfo[i] = t |
142 t.title = title | |
143 t.isInArea = isInArea | |
144 t.isOnMap = isOnMap | |
145 t.existingTask = existingTask | |
146 t.questID = questID | |
147 t.objectives = {} | |
148 t.taskIndex = i | |
149 | |
150 local taskFinished = true; | |
151 for objectiveIndex = 1, numObjectives do | |
152 local text, objectiveType, finished, displayAsObjective = InternalGetQuestObjectiveInfo(questID, objectiveIndex, false); | |
153 displayObjectiveHeader = displayObjectiveHeader or displayAsObjective; | |
154 print(' --', text, objectiveType, finished, displayAsObjective) | |
155 t.objectives[objectiveIndex] = t.objectives[objectiveIndex] or {} | |
156 local o = t.objectives[objectiveIndex] | |
157 | |
158 o.objectiveIndex = objectiveIndex | |
159 o.text = text | |
160 o.objectiveType = objectiveType | |
161 o.finished = finished | |
162 o.displayAsObjective = displayAsObjective | |
163 print(' |cFF00FF88*', objectiveIndex, text) | |
164 end | |
165 end | |
166 end | |
167 | |
168 | |
169 self.numAll = #tasks | |
170 self.numWatched = #self.WatchInfo | |
171 print(' stats:', self.numAll, 'active tasks,', self.numWatched, 'nearby or animating') | |
172 --return #tasks | |
87 return GetNumQuestLogTasks() | 173 return GetNumQuestLogTasks() |
88 end | 174 end |
89 | 175 |
90 Bonus.GetInfo = function(self, taskIndex) | 176 Bonus.GetInfo = function(self, taskIndex) |
91 print(self.name, self) | 177 print(self.name, self) |
92 return Bonus.TaskWatch[taskIndex] | 178 return self.WatchInfo[taskIndex] |
93 end | 179 end |
94 | 180 |
95 Bonus.StoreTask = function(questID) | 181 Bonus.Store = function(questID) |
96 | 182 |
97 if not questID then | 183 if not questID then |
98 print('|cFFFF4400invalid quest ID', questID) | 184 print('|cFFFF4400invalid quest ID', questID) |
99 return | 185 return |
100 end | 186 end |
345 end | 431 end |
346 end | 432 end |
347 | 433 |
348 | 434 |
349 Cheevs.GetNumWatched = function(self) | 435 Cheevs.GetNumWatched = function(self) |
436 print('|cFF00FF00' .. GetTime()) | |
350 Cheevs.trackedCheevs = {GetTrackedAchievements()} | 437 Cheevs.trackedCheevs = {GetTrackedAchievements()} |
351 return GetNumTrackedAchievements() | 438 return GetNumTrackedAchievements() |
352 end | 439 end |
353 Cheevs.GetInfo = function(self, index) | 440 Cheevs.GetInfo = function(self, index) |
354 local cheevID = Cheevs.trackedCheevs[index] | 441 local cheevID = Cheevs.trackedCheevs[index] |
365 c.numObjectives = GetAchievementNumCriteria(cheevID) | 452 c.numObjectives = GetAchievementNumCriteria(cheevID) |
366 c.objectives = {} | 453 c.objectives = {} |
367 for i = 1, c.numObjectives do | 454 for i = 1, c.numObjectives do |
368 local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i) | 455 local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i) |
369 c.objectives[i] = { | 456 c.objectives[i] = { |
370 index = i, | 457 objectiveIndex = i, |
371 cheevID = cheevID, | 458 cheevID = cheevID, |
372 text = description, | 459 text = description, |
373 type = type, | 460 type = type, |
374 finished = completed, | 461 finished = completed, |
375 value = quantity, | 462 value = quantity, |