comparison ObjectiveInfo.lua @ 22:9b3fa734abff

ObjectiveFrame - polish quest rewards display - implement money objectives - set line metrics in UpdateLine - set block metrics in UpdateBlock (sum of line metrics)
author Nenue
date Sat, 09 Apr 2016 07:32:45 -0400
parents d5ee940de273
children
comparison
equal deleted inserted replaced
21:d5ee940de273 22:9b3fa734abff
1 local B = select(2,...).frame 1 local B = select(2,...).frame
2 local wipe, pairs, ipairs, min, max, unpack, format = table.wipe, pairs, ipairs, min, max, unpack, format 2 local wipe, pairs, ipairs, min, max, unpack, format, mod = table.wipe, pairs, ipairs, min, max, unpack, format, mod
3 local tinsert, tostring = tinsert, tostring 3 local tinsert, tostring = tinsert, tostring
4 local GetQuestTagInfo, GetQuestLogTitle = GetQuestTagInfo, GetQuestLogTitle 4 local GetQuestTagInfo, GetQuestLogTitle = GetQuestTagInfo, GetQuestLogTitle
5 local GetNumQuestLogEntries, GetNumQuestWatches, GetQuestLogCompletionText, IsQuestWatched, IsQuestHardWatched, GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown = GetNumQuestLogEntries, GetNumQuestWatches, GetQuestLogCompletionText, IsQuestWatched, IsQuestHardWatched, GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown 5 local GetNumQuestLogEntries, GetNumQuestWatches, GetQuestLogCompletionText, IsQuestWatched, IsQuestHardWatched, GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown = GetNumQuestLogEntries, GetNumQuestWatches, GetQuestLogCompletionText, IsQuestWatched, IsQuestHardWatched, GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown
6 local GetNumAutoQuestPopUps, GetAutoQuestPopUp, GetTasksTable, GetNumQuestLogTasks, GetTaskInfo, GetQuestObjectiveInfo = GetNumAutoQuestPopUps, GetAutoQuestPopUp, GetTasksTable, GetNumQuestLogTasks, GetTaskInfo, GetQuestObjectiveInfo 6 local GetNumAutoQuestPopUps, GetAutoQuestPopUp, GetTasksTable, GetNumQuestLogTasks, GetTaskInfo, GetQuestObjectiveInfo = GetNumAutoQuestPopUps, GetAutoQuestPopUp, GetTasksTable, GetNumQuestLogTasks, GetTaskInfo, GetQuestObjectiveInfo
7 local GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo, GetNumQuestLogRewards, GetQuestLogRewardInfo, GetQuestLogRewardMoney, GetMoneyString = GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo, GetNumQuestLogRewards, GetQuestLogRewardInfo, GetQuestLogRewardMoney, GetMoneyString 7 local GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo, GetNumQuestLogRewards, GetQuestLogRewardInfo, GetQuestLogRewardMoney, GetMoneyString = GetNumQuestLogRewardCurrencies, GetQuestLogRewardCurrencyInfo, GetNumQuestLogRewards, GetQuestLogRewardInfo, GetQuestLogRewardMoney, GetMoneyString
8 local GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo = GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo 8 local GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo = GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo
9 local GetQuestWatchIndex, GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo = GetQuestWatchIndex, GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo 9 local GetQuestWatchIndex, GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo = GetQuestWatchIndex, GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo
10 local QuestHasPOIInfo, GetDistanceSqToQuest, GetQuestFactionGroup = QuestHasPOIInfo, GetDistanceSqToQuest, GetQuestFactionGroup 10 local QuestHasPOIInfo, GetDistanceSqToQuest, GetQuestFactionGroup = QuestHasPOIInfo, GetDistanceSqToQuest, GetQuestFactionGroup
11 local GetTrackedAchievements, GetNumTrackedAchievements, GetAchievementInfo = GetTrackedAchievements, GetNumTrackedAchievements, GetAchievementInfo 11 local GetTrackedAchievements, GetNumTrackedAchievements, GetAchievementInfo = GetTrackedAchievements, GetNumTrackedAchievements, GetAchievementInfo
12 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') 12 local GetMoney, floor = GetMoney, floor
13 local print = B.print('TrackerInfo') 13 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
14 local print = B.print('Info')
14 local QUEST_TAG_DUNGEON = QUEST_TAG_DUNGEON 15 local QUEST_TAG_DUNGEON = QUEST_TAG_DUNGEON
15 local QUEST_TAG_GROUP = QUEST_TAG_GROUP 16 local QUEST_TAG_GROUP = QUEST_TAG_GROUP
16 local QUEST_TAG_ACCOUNT = QUEST_TAG_ACCOUNT 17 local QUEST_TAG_ACCOUNT = QUEST_TAG_ACCOUNT
17 local QUEST_TAG_TCOORDS = QUEST_TAG_TCOORDS 18 local QUEST_TAG_TCOORDS = QUEST_TAG_TCOORDS
18 local LE_QUEST_FREQUENCY_DAILY = LE_QUEST_FREQUENCY_DAILY 19 local LE_QUEST_FREQUENCY_DAILY = LE_QUEST_FREQUENCY_DAILY
19 local LE_QUEST_FREQUENCY_WEEKLY = LE_QUEST_FREQUENCY_WEEKLY 20 local LE_QUEST_FREQUENCY_WEEKLY = LE_QUEST_FREQUENCY_WEEKLY
20 local FACTION_ALLIANCE, LE_QUEST_FACTION_HORDE, FACTION_HORDE, LE_QUEST_FACTION_HORDE = FACTION_ALLIANCE, LE_QUEST_FACTION_HORDE, FACTION_HORDE, LE_QUEST_FACTION_HORDE 21 local FACTION_ALLIANCE, LE_QUEST_FACTION_HORDE, FACTION_HORDE, LE_QUEST_FACTION_HORDE = FACTION_ALLIANCE, LE_QUEST_FACTION_HORDE, FACTION_HORDE, LE_QUEST_FACTION_HORDE
21 22
22 local Tracker, Bonus, AutoQuest, Quest, Cheevs = mod.DefaultTracker, mod.Bonus, mod.AutoQuest, mod.Quest, mod.Cheevs 23 local Tracker, Bonus, AutoQuest, Quest, Cheevs = T.DefaultTracker, T.Bonus, T.AutoQuest, T.Quest, T.Cheevs
23 -------------------------------------------------------------------- 24 --------------------------------------------------------------------
24 --- Tracker-specific data retrieval functions 25 --- Tracker-specific data retrieval functions
25 -------------------------------------------------------------------- 26 --------------------------------------------------------------------
26 27
27 28
28 ----------------------------- 29 local DoQuestRewards= function(t, questID)
29 --- AUTO_QUEST
30 AutoQuest.LogInfo = {}
31 AutoQuest.LogBlock = {}
32 AutoQuest.QuestBlock = {}
33 AutoQuest.WatchBlock = {}
34 function AutoQuest:GetNumWatched ()
35 print(self.name, self)
36 Quest:GetNumWatched()
37 self.numWatched = GetNumAutoQuestPopUps()
38
39 return self.numWatched
40 end
41 AutoQuest.GetInfo = function(self, popupIndex)
42
43 local questID, type = GetAutoQuestPopUp(popupIndex)
44 local questIndex = GetQuestLogIndexByID(questID)
45 local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questIndex)
46
47 self.Info[questID] = {
48 title = title,
49 description = type,
50 popupType = type,
51 questID = questID,
52 questIndex = questIndex,
53 popupIndex = popupIndex,
54 }
55 self.WatchInfo[popupIndex] = self.Info[questID]
56
57
58 return self.Info[questID]
59 end
60
61 -----------------------------
62 --- BONUS OBJECTIVE
63 -- The default UI pops them up as you enter their relevant areas, but the data is actually available at all times.
64 -- The only requirement is that you've been to said area and progressed any of the objectives.
65 -- Blizzard deal with this fact by caching any task data collected during session and masking out whatever gets completed.
66 -- For the addon's module structure to work, GetNumWatched method also invokes a tasks table scan.
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 = {}
123 Bonus.QuestBlock = {}
124 function Bonus:GetNumWatched ()
125 print(self.name, self)
126 local tasks = InternalGetTasksTable()
127 local numWatched = 0
128 local numAll = 0
129 self.WatchInfo = {}
130 print('|cFFFFFF00Bonus.GetNumWatched()|r', #tasks)
131 for i, questID in ipairs(tasks) do
132 local isInArea, isOnMap, numObjectives = InternalGetTaskInfo(questID)
133 local existingTask = self.QuestBlock[questID]
134 local displayObjectiveHeader = false;
135 print (' |cFF00FF00taskIndex', i, 'questID', questID, 'inArea', isInArea, 'onMap', isOnMap, 'existing', (existingTask and 'Y' or 'N'))
136 if isInArea or isOnMap then
137 self.Info[questID] = self.Info[questID] or {}
138
139 local t = self.Info[questID]
140 local title = GetQuestLogTitle(questID)
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
173 return GetNumQuestLogTasks()
174 end
175
176 Bonus.GetInfo = function(self, taskIndex)
177 print(self.name, self)
178 return self.WatchInfo[taskIndex]
179 end
180
181 Bonus.Store = function(questID)
182
183 if not questID then
184 print('|cFFFF4400invalid quest ID', questID)
185 return
186 end
187
188 Bonus.Info[questID] = Bonus.Info[questID] or {}
189 local t = Bonus.Info[questID]
190 local isInArea, isOnMap, numObjectives = GetTaskInfo(questID)
191 t.questID = questID
192 t.numObjectives = numObjectives
193 t.isInArea = isInArea
194 t.isOnMap = isOnMap
195
196 print(' isInArea', isInArea, 'isOnMap', isOnMap, 'numObj', numObjectives)
197 local displayObjectives = false
198 local isComplete = true
199 if numObjectives >= 1 then
200 print(' ', numObjectives,'objective rows')
201 t.objectives = {}
202 for i = 1, t.numObjectives do
203 t.objectives[i] = {}
204 local o = t.objectives[i]
205 o.index = i
206 --local text, objectiveType, finished, displayAsObjective =
207 o.text, o.objectiveType, o.finished, o.displayAsObjective = GetQuestObjectiveInfo(questID, i, false)
208
209 print(i, '==>', o.text, o.objectiveType, o.finished, o.displayAsObjective)
210 t.displayObjectives = t.displayObjectives or o.displayAsObjective
211 t.isComplete = t.isComplete and o.finished
212
213 end
214 end
215
216 t.displayObjectives = displayObjectives
217
218
219 local rewards = {} 30 local rewards = {}
220 t.numCurrencies = GetNumQuestLogRewardCurrencies(questID) 31 t.numCurrencies = GetNumQuestLogRewardCurrencies(questID)
221 for i = 1, t.numCurrencies do 32 for i = 1, t.numCurrencies do
222 local name, texture, count = GetQuestLogRewardCurrencyInfo(i, questID) 33 local name, texture, count = GetQuestLogRewardCurrencyInfo(i, questID)
223 tinsert(rewards,{ 34 tinsert(rewards,{
255 end 66 end
256 67
257 if #rewards >= 1 then 68 if #rewards >= 1 then
258 t.rewardInfo = rewards 69 t.rewardInfo = rewards
259 end 70 end
71 end
72
73
74 -----------------------------
75 --- AUTO_QUEST
76 AutoQuest.LogInfo = {}
77 AutoQuest.LogBlock = {}
78 AutoQuest.QuestBlock = {}
79 AutoQuest.WatchBlock = {}
80 function AutoQuest:GetNumWatched ()
81 print(self.name, self)
82 Quest:GetNumWatched()
83 self.numWatched = GetNumAutoQuestPopUps()
84
85 return self.numWatched
86 end
87 AutoQuest.GetInfo = function(self, popupIndex)
88
89
90 local questID, type = GetAutoQuestPopUp(popupIndex)
91 local questIndex = GetQuestLogIndexByID(questID)
92 local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questIndex)
93
94 self.Info[questID] = self.Info[questID] or {}
95 local popup = self.Info[questID]
96 popup.title = title
97 popup.description = type
98 popup.popupType = type
99 popup.questID = questID
100 popup.questIndex = questIndex
101 popup.popupIndex = popupIndex
102
103 self.Info[questID] = popup
104 self.WatchInfo[popupIndex] = popup
105
106
107 return self.Info[questID]
108 end
109
110 -----------------------------
111 --- BONUS OBJECTIVE
112 -- The default UI pops them up as you enter their relevant areas, but the data is actually available at all times.
113 -- The only requirement is that you've been to said area and progressed any of the objectives.
114 -- Blizzard deal with this fact by caching any task data collected during session and masking out whatever gets completed.
115 -- For the addon's module structure to work, GetNumWatched method also invokes a tasks table scan.
116 -- That composes the table searched by GetInfo().
117
118 ------------------------------------------------------------------------------------------
119 --- These functions are copied from Blizzard_BonusObjectiveTracker.lua;
120 -- It's kind of dumb, but this avoids the risk of code taint.
121
122 --- Returns a tasks table modified to include recently completed objectives
123 local UnitName, GetRealmName = UnitName, GetRealmName
124 local InternalGetTasksTable = function()
125 local completedTasks = T.Conf.TasksLog
126 local char = UnitName("player")
127 local realm = GetRealmName()
128 local tasks = GetTasksTable()
129
130 for questID, data in pairs(Bonus.Info) do
131
132 print(' -- questID:', questID, #data.objectives)
133 for i, o in ipairs(data.objectives) do
134 print(' --', i, o.text)
135 end
136
137 end
138
139
140 for questID, data in pairs(completedTasks) do
141 if questID > 0 then
142 local found = false
143 for i = 1, #tasks do
144 if tasks[i] == questID then
145 found = true
146 break
147 end
148 end
149 -- if it's not part of the current table, then try to insert it where it was last found
150 if not found then
151 if data.watchIndex < #tasks then
152 tinsert(tasks, data.watchIndex, data)
153 else
154 tinsert(tasks, data)
155 end
156 end
157 end
158 end
159 return tasks
160 end
161
162 --- Returns an entry from the composed tasks table if possible, otherwise makes an API pull
163 local InternalGetTaskInfo = function(questID)
164 local completedTasks = T.Conf.TasksLog
165 if completedTasks[questID] then
166 return true, true, #completedTasks[questID].objectives
167 else
168 return GetTaskInfo(questID)
169 end
170 end
171
172 --- Same as above but for the objective entries
173 local InternalGetQuestObjectiveInfo = function(questID, objectiveIndex)
174 local completedTasks = T.Conf.TasksLog
175 if ( completedTasks[questID] ) then
176 print('using internal data')
177 return completedTasks[questID].objectives[objectiveIndex], completedTasks[questID].objectiveType, true;
178 else
179 return GetQuestObjectiveInfo(questID, objectiveIndex, false);
180 end
181 end
182
183 --- end redundant copy of silliness
184 ------------------------------------------------------------------------------------------
185
186 Bonus.Completed = {}
187 Bonus.POI = {}
188 Bonus.Scenario = {}
189 Bonus.QuestBlock = {}
190 Bonus.WatchInfo = {}
191 function Bonus:GetNumWatched ()
192 print(self.name, self)
193
194 local tasks = InternalGetTasksTable()
195 local numWatched = 0
196 local numAll = 0
197 self.WatchInfo = {}
198 print('|cFFFFFF00Bonus.GetNumWatched()|r', #tasks)
199 print(' TasksTable pull:')
200 for i, questID in ipairs(tasks) do
201 local isInArea, isOnMap, numObjectives = InternalGetTaskInfo(questID)
202 local existingTask = self.QuestBlock[questID]
203 local displayObjectiveHeader = false;
204 local test = (isInArea or (isOnMap and existingTask))
205 --local test = true
206 if test then
207 self.Info[questID] = self.Info[questID] or {}
208
209 local t = self.Info[questID]
210 self.WatchInfo[i] = t
211 t.isInArea = isInArea
212 t.isOnMap = isOnMap
213 t.existingTask = existingTask
214 t.questID = questID
215 t.objectives = {}
216 t.taskIndex = i
217
218
219 DoQuestRewards(t, questID)
220
221 local taskTitle
222 local taskFinished = true;
223 for objectiveIndex = 1, numObjectives do
224 local text, objectiveType, finished, displayAsObjective = InternalGetQuestObjectiveInfo(questID, objectiveIndex, false);
225 displayObjectiveHeader = displayObjectiveHeader or displayAsObjective;
226 if not taskTitle then
227 if objectiveType == 'progressbar' and not text:match('^%d%+\\%d+') then
228 taskTitle = text
229 text = ''
230 end
231 end
232
233
234 print(' --', text, objectiveType, finished, displayAsObjective)
235 t.objectives[objectiveIndex] = t.objectives[objectiveIndex] or {}
236 local o = t.objectives[objectiveIndex]
237
238 o.objectiveIndex = objectiveIndex
239 o.text = text
240 o.objectiveType = objectiveType
241 o.finished = finished
242 o.displayAsObjective = displayAsObjective
243 print(' |cFF00FF88*', objectiveIndex, text)
244 end
245
246 -- didn't get a name from progress bar? what about area name
247 if not taskTitle then
248 if isInArea then
249 taskTitle = GetMapNameByID(GetCurrentMapAreaID())
250 end
251 end
252 t.title = taskTitle
253 end
254
255 print (' |cFF00FF88#', i, 'questID', questID, 'inArea', isInArea, 'onMap', isOnMap, 'existing', (existingTask and 'Y' or 'N'), (test and '|cFF00FF00show|r' or '|cFFFF0088hide|r'))
256 end
257
258
259 self.numAll = #tasks
260 self.numWatched = #self.WatchInfo
261 print(' stats:', self.numAll, 'active tasks,', self.numWatched, 'nearby or animating')
262 --return #tasks
263 return #self.WatchInfo
264 end
265
266 --- info cleanup done when turn-ins are detected
267 Bonus.OnTurnIn = function(self, questID, xp, money)
268 print('|cFFFF8800'..self.name..':OnTurnIn call', questID, xp, money)
269
270
271
272 end
273
274 Bonus.GetInfo = function(self, taskIndex)
275 print(self.name, self)
276 return self.WatchInfo[taskIndex]
277 end
278
279 Bonus.Store = function(questID)
280
281 if not questID then
282 print('|cFFFF4400invalid quest ID', questID)
283 return
284 end
285
286 Bonus.Info[questID] = Bonus.Info[questID] or {}
287 local t = Bonus.Info[questID]
288 local isInArea, isOnMap, numObjectives = GetTaskInfo(questID)
289 t.questID = questID
290 t.numObjectives = numObjectives
291 t.isInArea = isInArea
292 t.isOnMap = isOnMap
293
294 print(' isInArea', isInArea, 'isOnMap', isOnMap, 'numObj', numObjectives)
295 local displayObjectives = false
296 local isComplete = true
297 if numObjectives >= 1 then
298 print(' ', numObjectives,'objective rows')
299 t.objectives = {}
300 for i = 1, t.numObjectives do
301 t.objectives[i] = {}
302 local o = t.objectives[i]
303 o.index = i
304 --local text, objectiveType, finished, displayAsObjective =
305 o.text, o.objectiveType, o.finished, o.displayAsObjective = GetQuestObjectiveInfo(questID, i, false)
306
307 print(i, '==>', o.text, o.objectiveType, o.finished, o.displayAsObjective)
308 t.displayObjectives = t.displayObjectives or o.displayAsObjective
309 t.isComplete = t.isComplete and o.finished
310
311 end
312 end
313
314 t.displayObjectives = displayObjectives
315
316 DoQuestRewards(t, questID)
260 317
261 Bonus.TasksTable[questID] = t 318 Bonus.TasksTable[questID] = t
262 319
263 return t 320 return t
264 end 321 end
369 q.completionText= GetQuestLogCompletionText(questIndex) 426 q.completionText= GetQuestLogCompletionText(questIndex)
370 q.numObjectives = GetNumQuestLeaderBoards(questIndex) 427 q.numObjectives = GetNumQuestLeaderBoards(questIndex)
371 q.objectives = {} 428 q.objectives = {}
372 for i = 1, q.numObjectives do 429 for i = 1, q.numObjectives do
373 local text, type, finished = GetQuestLogLeaderBoard(i, questIndex) 430 local text, type, finished = GetQuestLogLeaderBoard(i, questIndex)
431 print(format(' #%d %s %s %s', i, tostring(type), tostring(text), tostring(finished)))
374 q.objectives[i] = { 432 q.objectives[i] = {
375 index = i, 433 index = i,
376 type = type, 434 type = type,
377 text = text, 435 text = text,
378 finished = finished 436 finished = finished
382 elseif type == 'object' then 440 elseif type == 'object' then
383 elseif type == 'reputation' then 441 elseif type == 'reputation' then
384 elseif type == 'item' then 442 elseif type == 'item' then
385 end 443 end
386 end 444 end
445
446 if requiredMoney >= 1 then
447 local money = GetMoney()
448 local moneyText = money
449 local requiredSilver, requiredCopper
450 local requiredGold = (requiredMoney > 10000) and (floor(requiredMoney/10000)) or nil
451 if mod(requiredMoney, 10000) ~= 0 then
452 requiredSilver = (requiredMoney > 100) and (mod(requiredMoney, 10000) / 100) or nil
453 if mod(requiredMoney, 100) ~= 0 then
454 requiredCopper = mod(requiredMoney, 100)
455 end
456 end
457
458 -- round the money value down
459 if requiredMoney > 9999 and not (requiredSilver or requiredCopper) then
460 moneyText = floor(money/10000)
461 elseif requiredMoney < 10000 and mod(requiredMoney,100) == 0 then
462 moneyText = floor(money/100)
463 end
464
465 local text = moneyText
466 local index = #q.objectives + 1
467 local finished = (GetMoney() >= requiredMoney)
468
469 if not finished then
470 text = text .. ' / ' .. GetCoinTextureString(requiredMoney, 15)
471 else
472 text = '' .. GetCoinTextureString(requiredMoney, 15)
473 end
474 q.objectives[index] = {
475 index = index,
476 type = 'progressbar',
477 quantity = money,
478 requiredQuantity = requiredMoney,
479 text = text,
480 finished = finished
481 }
482 print(format(' #%d %s %s %s', index, 'money', text, tostring(finished)))
483 end
484
387 485
388 local link, icon, charges = GetQuestLogSpecialItemInfo(questIndex) 486 local link, icon, charges = GetQuestLogSpecialItemInfo(questIndex)
389 local start, duration, enable = GetQuestLogSpecialItemCooldown(questIndex) 487 local start, duration, enable = GetQuestLogSpecialItemCooldown(questIndex)
390 if link or icon or charges then 488 if link or icon or charges then
391 q.specialItem = { 489 q.specialItem = {