Nenue@28
|
1 local B = select(2,...).frame
|
Nenue@28
|
2 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
|
Nenue@28
|
3 local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band
|
Nenue@30
|
4 local GetQuestWatchInfo, GetQuestLogCompletionText = GetQuestWatchInfo, GetQuestLogCompletionText
|
Nenue@30
|
5 local GetQuestLogLeaderBoard, GetNumQuestLogEntries, GetQuestLogTitle = GetQuestLogLeaderBoard, GetNumQuestLogEntries, GetQuestLogTitle
|
Nenue@30
|
6 local GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown = GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown
|
Nenue@30
|
7 local GetSuperTrackedQuestID, GetMoney, C_Scenario, GetCVarBool, GetNumQuestWatches = GetSuperTrackedQuestID, GetMoney, C_Scenario, GetCVarBool, GetNumQuestWatches
|
Nenue@30
|
8 local GetQuestTagInfo, GetMoneyString, GetDistanceSqToQuest, GetQuestFactionGroup = GetQuestTagInfo, GetMoneyString, GetDistanceSqToQuest, GetQuestFactionGroup
|
Nenue@30
|
9 local QUEST_TAG_ACCOUNT, LE_QUEST_FACTION_HORDE, LE_QUEST_FREQUENCY_DAILY, LE_QUEST_FREQUENCY_WEEKLY = QUEST_TAG_ACCOUNT, LE_QUEST_FACTION_HORDE, LE_QUEST_FREQUENCY_DAILY, LE_QUEST_FREQUENCY_WEEKLY
|
Nenue@30
|
10 local QUEST_TAG_TCOORDS, IsQuestSequenced = QUEST_TAG_TCOORDS, IsQuestSequenced
|
Nenue@28
|
11 local Default, Quest = T.DefaultHandler, T.Quest
|
Nenue@28
|
12 local format = format
|
Nenue@28
|
13 local print = B.print('Tracker')
|
Nenue@28
|
14 local lprint = B.print('Line')
|
Nenue@28
|
15 local iprint = B.print('Info')
|
Nenue@29
|
16 local colors = T.colors
|
Nenue@29
|
17 local tprint = B.print('Tracker')
|
Nenue@28
|
18
|
Nenue@30
|
19 local superTrackQuestID, playerMoney, inScenario, showPOIs
|
Nenue@28
|
20 Quest.Update = function(self, reason, ...)
|
Nenue@28
|
21 local print = tprint
|
Nenue@28
|
22 print('QuestTracker:Update() received')
|
Nenue@28
|
23 T.UpdateActionButtons()
|
Nenue@28
|
24 Default.Update(self, reason, ...)
|
Nenue@28
|
25 end
|
Nenue@28
|
26
|
Nenue@28
|
27 T.Quest.numButtons = 0
|
Nenue@28
|
28 local usedButtons = T.Quest.itemButtons
|
Nenue@28
|
29 local freeButtons = T.Quest.freeButtons
|
Nenue@28
|
30
|
Nenue@28
|
31 Quest.UpdateObjectives = function(handler, block)
|
Nenue@28
|
32 local print = lprint
|
Nenue@28
|
33 print('|cFF00FFFFUpdateObjectives()')
|
Nenue@28
|
34 local info = block.info
|
Nenue@28
|
35
|
Nenue@28
|
36 local titlebg, textbg = colors.default.titlebg, colors.default.textbg
|
Nenue@28
|
37 print((info.isAccount and 'isAccount' or ''), (info.isFaction and 'isFaction' or ''), (info.isDaily and 'isDaily' or ''), (info.isWeekly and 'isWeekly' or ''), info.tagID, info.tagName)
|
Nenue@28
|
38
|
Nenue@28
|
39 if info.isAccount then
|
Nenue@28
|
40 if info.isFaction then
|
Nenue@28
|
41 print(' faction', info.tagID)
|
Nenue@28
|
42 titlebg, textbg = colors['faction_'..info.tagID].titlebg, colors.default.textbg
|
Nenue@28
|
43 else
|
Nenue@28
|
44 print(' account', info.isAccount, info.isFaction)
|
Nenue@28
|
45 titlebg, textbg = colors.account.titlebg, colors.account.textbg
|
Nenue@28
|
46 end
|
Nenue@28
|
47 elseif info.isDaily then
|
Nenue@28
|
48 print(' daily', info.frequency)
|
Nenue@28
|
49 titlebg, textbg = colors.daily.titlebg, colors.daily.textbg
|
Nenue@28
|
50 elseif info.isWeekly then
|
Nenue@28
|
51 print(' weekly', info.frequency)
|
Nenue@28
|
52 titlebg, textbg = colors.weekly.titlebg, colors.weekly.textbg
|
Nenue@28
|
53 end
|
Nenue@28
|
54
|
Nenue@28
|
55 block.titlebg:SetGradientAlpha(unpack(titlebg))
|
Nenue@28
|
56 block.statusbg:SetGradientAlpha(unpack(textbg))
|
Nenue@28
|
57
|
Nenue@28
|
58 local completionText
|
Nenue@28
|
59 if info.isComplete then
|
Nenue@28
|
60 if info.isAutoComplete then
|
Nenue@28
|
61 local questID, popupType = GetAutoQuestPopUp(info.questLogIndex)
|
Nenue@28
|
62 if popupType == 'COMPLETE' then
|
Nenue@28
|
63 print(' :: auto-complete quest :: set the message')
|
Nenue@28
|
64 info.completionText = T.strings.CLICK_TO_COMPLETE
|
Nenue@28
|
65 end
|
Nenue@28
|
66 else
|
Nenue@28
|
67 if not completionText or info.completionText then
|
Nenue@28
|
68 info.completionText = GetQuestLogCompletionText(info.questLogIndex)
|
Nenue@28
|
69 end
|
Nenue@28
|
70 end
|
Nenue@28
|
71 print(' :: complete quest :: show instruction: "'.. tostring(info.completionText) .. '"')
|
Nenue@28
|
72 end
|
Nenue@28
|
73
|
Nenue@28
|
74 Default.UpdateObjectives(handler, block)
|
Nenue@28
|
75 end
|
Nenue@28
|
76
|
Nenue@28
|
77 Quest.UpdateLine = function(handler, block, line, data)
|
Nenue@28
|
78 local print = lprint
|
Nenue@28
|
79 local objectiveType = data.type
|
Nenue@28
|
80 local r, g, b, a = 0, 1, 1, 1
|
Nenue@28
|
81
|
Nenue@28
|
82 line.progress = 0
|
Nenue@28
|
83 if data.finished then
|
Nenue@28
|
84 line.progress = 2
|
Nenue@28
|
85 r, g, b, a = 0, 1, 0, 1
|
Nenue@28
|
86 elseif objectiveType == 'monster' then
|
Nenue@28
|
87 r, g, b, a = 1, .55, .2, 1
|
Nenue@28
|
88 elseif objectiveType == 'item' then
|
Nenue@28
|
89 r, g, b, a = .8, .8, .8, 1
|
Nenue@28
|
90 elseif objectiveType == 'object' then
|
Nenue@28
|
91 r, g, b, a = 1, 1, 1, 1
|
Nenue@28
|
92 elseif objectiveType == 'player' then
|
Nenue@28
|
93 r, g, b, a = 0, 0.8, 1, 1
|
Nenue@28
|
94 end
|
Nenue@28
|
95 print(format(' |cFF%02X%02X%02X%0.1f, %0.1f, %0.1f|r', (r * 255), g * 255, b * 255, r, g, b))
|
Nenue@28
|
96
|
Nenue@28
|
97 line.displayColor = {r, g, b, a}
|
Nenue@28
|
98 line.status:SetTextColor(r, g, b, a)
|
Nenue@28
|
99 line.displayText = data.text
|
Nenue@28
|
100
|
Nenue@30
|
101 return data.text, nil
|
Nenue@28
|
102 end
|
Nenue@28
|
103
|
Nenue@28
|
104 -----------------------------
|
Nenue@28
|
105 --- QUEST
|
Nenue@28
|
106 Quest.QuestBlock = {}
|
Nenue@28
|
107 Quest.LogBlock = {}
|
Nenue@28
|
108 Quest.LogInfo = {}
|
Nenue@28
|
109
|
Nenue@28
|
110 function Quest:GetNumWatched ()
|
Nenue@28
|
111 print(self.name, self)
|
Nenue@30
|
112 superTrackQuestID = GetSuperTrackedQuestID()
|
Nenue@30
|
113 playerMoney = GetMoney();
|
Nenue@30
|
114 inScenario = C_Scenario.IsInScenario();
|
Nenue@30
|
115 showPOIs = GetCVarBool("questPOI");
|
Nenue@28
|
116 self.numAll = GetNumQuestLogEntries()
|
Nenue@28
|
117 self.numWatched = GetNumQuestWatches()
|
Nenue@28
|
118 return self.numWatched, self.numAll
|
Nenue@28
|
119 end
|
Nenue@30
|
120
|
Nenue@30
|
121 --- Returns an iterable table from which tracker blocks can be filled out. Data includes:
|
Nenue@30
|
122 -- All entry-layer GetXInfo return values
|
Nenue@30
|
123 -- Manifest of line data to be displayed in relation to the tracked object
|
Nenue@28
|
124 Quest.GetInfo = function (self, watchIndex)
|
Nenue@28
|
125 local print = iprint
|
Nenue@30
|
126 print('')
|
Nenue@30
|
127 print('|cFF00DDFFindex: |r'.. tostring(watchIndex))
|
Nenue@28
|
128
|
Nenue@30
|
129 local questID, title, questLogIndex, numObjectives, requiredMoney, isComplete, startEvent, isAutoComplete,
|
Nenue@30
|
130 failureTime, timeElapsed, questType, isTask, isStory, isOnMap, hasLocalPOI = GetQuestWatchInfo(watchIndex)
|
Nenue@30
|
131 if ( not questID ) then
|
Nenue@28
|
132 return
|
Nenue@28
|
133 end
|
Nenue@28
|
134
|
Nenue@30
|
135 local _, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, _, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(questLogIndex)
|
Nenue@28
|
136
|
Nenue@28
|
137 Quest.Info[questID] = Quest.Info[questID] or {}
|
Nenue@28
|
138
|
Nenue@30
|
139 local showQuest = true
|
Nenue@30
|
140 if isTask then
|
Nenue@30
|
141 showQuest = false
|
Nenue@30
|
142 end
|
Nenue@30
|
143
|
Nenue@28
|
144 local q = Quest.Info[questID]
|
Nenue@30
|
145 -- re-use Blizzard logic for consistency
|
Nenue@30
|
146 local watchMoney = false;
|
Nenue@30
|
147 local tagID, typeTag, frequencyTag, completionTag, completionText
|
Nenue@30
|
148 local isAccount, isFaction, isWeekly, isDaily = false, false, false, false
|
Nenue@30
|
149 local isBreadcrumb = false
|
Nenue@30
|
150 local questFailed = false
|
Nenue@30
|
151 local watchMoney = false
|
Nenue@30
|
152 local timerInfo, moneyInfo = false, false
|
Nenue@30
|
153 local objectives = q.objectives or {}
|
Nenue@30
|
154
|
Nenue@30
|
155
|
Nenue@30
|
156 -- Case 1: completed quest or "go to thing" breadcrumb
|
Nenue@30
|
157 -- * 1 line containing the completion text
|
Nenue@30
|
158 if ( isComplete and isComplete < 0 ) then
|
Nenue@30
|
159 isComplete = false
|
Nenue@30
|
160 questFailed = true
|
Nenue@30
|
161 elseif ( numObjectives == 0 and playerMoney >= requiredMoney and not startEvent ) then
|
Nenue@30
|
162 isComplete = true;
|
Nenue@30
|
163 questFailed = false
|
Nenue@30
|
164 if ( requiredMoney == 0 ) then
|
Nenue@30
|
165 isBreadcrumb = true;
|
Nenue@30
|
166 end
|
Nenue@30
|
167 end
|
Nenue@30
|
168 print('|cFF0088FFflags:|r', (isComplete and 'isComplete' or ''), (questFailed and 'questFailed' or ''), (isBreadcrumb and 'isBreadcrumb' or ''))
|
Nenue@30
|
169
|
Nenue@30
|
170 -- completion message?
|
Nenue@30
|
171 local isSequenced = IsQuestSequenced(questID)
|
Nenue@30
|
172 local temp_status = ''
|
Nenue@30
|
173 if ( isComplete ) then
|
Nenue@30
|
174 temp_status = 'COMPLETED_OBJECTIVES'
|
Nenue@30
|
175 objectives = Quest.GetObjectives(questLogIndex, numObjectives, true, isSequenced, isStory)
|
Nenue@30
|
176 if ( isAutoComplete ) then
|
Nenue@30
|
177 temp_status = 'AUTOCOMPLETE_OBJECTIVES'
|
Nenue@30
|
178 completionText = _G.QUEST_WATCH_CLICK_TO_COMPLETE
|
Nenue@30
|
179 else
|
Nenue@30
|
180 if ( isBreadcrumb ) then
|
Nenue@30
|
181 temp_status = 'COMPLETE_BREADCRUMB'
|
Nenue@30
|
182 completionText = GetQuestLogCompletionText(questLogIndex)
|
Nenue@30
|
183 else
|
Nenue@30
|
184 temp_status = 'COMPLETE_READY_FOR_TURN_IN'
|
Nenue@30
|
185 completionText = _G.QUEST_WATCH_QUEST_READY
|
Nenue@30
|
186 end
|
Nenue@30
|
187 end
|
Nenue@30
|
188 elseif ( questFailed ) then
|
Nenue@30
|
189 temp_status = 'FAILED'
|
Nenue@30
|
190 -- Case 2: failed quest
|
Nenue@30
|
191 -- * 1 status line; hide other info
|
Nenue@30
|
192 completionText = _G.FAILED
|
Nenue@30
|
193 else
|
Nenue@30
|
194
|
Nenue@30
|
195 temp_status = 'PROGRESS_OBJECTIVES'
|
Nenue@30
|
196 -- Case 3: quest in progress
|
Nenue@30
|
197 -- * Multiple objective lines
|
Nenue@30
|
198 -- * Possible extra lines for money and timer data respectively
|
Nenue@30
|
199 objectives = Quest.GetObjectives(questLogIndex, numObjectives, false, isSequenced, isStory)
|
Nenue@30
|
200 q.objectives = objectives
|
Nenue@30
|
201
|
Nenue@30
|
202 --- anything past here gets appended to existing objectives
|
Nenue@30
|
203
|
Nenue@30
|
204 -- money
|
Nenue@30
|
205 if ( requiredMoney > playerMoney ) then
|
Nenue@30
|
206
|
Nenue@30
|
207 temp_status = temp_status .. '_MONEY'
|
Nenue@30
|
208 local text = GetMoneyString(playerMoney).." / "..GetMoneyString(requiredMoney);
|
Nenue@30
|
209 moneyInfo = {
|
Nenue@30
|
210 type = 'money',
|
Nenue@30
|
211 text = text,
|
Nenue@30
|
212 finished = false,
|
Nenue@30
|
213 requiredMoney = requiredMoney,
|
Nenue@30
|
214 playerMoney = playerMoney,
|
Nenue@30
|
215 }
|
Nenue@30
|
216 end
|
Nenue@30
|
217
|
Nenue@30
|
218 -- time limit
|
Nenue@30
|
219 if ( failureTime ) then
|
Nenue@30
|
220 temp_status = temp_status .. '_TIMED'
|
Nenue@30
|
221 if ( timeElapsed and timeElapsed <= failureTime ) then
|
Nenue@30
|
222 timerInfo = {
|
Nenue@30
|
223 type = 'timer',
|
Nenue@30
|
224 finished = false,
|
Nenue@30
|
225 timeElapsed = timeElapsed,
|
Nenue@30
|
226 failureTime = failureTime,
|
Nenue@30
|
227 }
|
Nenue@30
|
228 end
|
Nenue@30
|
229 end
|
Nenue@30
|
230 end
|
Nenue@30
|
231 q.numObjectives = numObjectives
|
Nenue@30
|
232 q.objectives = objectives
|
Nenue@30
|
233 q.moneyInfo = moneyInfo
|
Nenue@30
|
234 q.timerInfo = timerInfo
|
Nenue@30
|
235 q.completionText = completionText
|
Nenue@30
|
236
|
Nenue@30
|
237 -- POI data
|
Nenue@30
|
238 local POI = false
|
Nenue@30
|
239 if ( showPOIs ) then
|
Nenue@30
|
240 POI = {
|
Nenue@30
|
241 questID = questID,
|
Nenue@30
|
242 questLogIndex = questLogIndex,
|
Nenue@30
|
243 }
|
Nenue@30
|
244 local poiButton;
|
Nenue@30
|
245 if ( hasLocalPOI ) then
|
Nenue@30
|
246
|
Nenue@30
|
247 if ( isComplete ) then
|
Nenue@30
|
248 POI.type = 'normal'
|
Nenue@30
|
249 else
|
Nenue@30
|
250 POI.type = 'numeric'
|
Nenue@30
|
251 end
|
Nenue@30
|
252 elseif ( isComplete ) then
|
Nenue@30
|
253 POI.type = 'remote'
|
Nenue@30
|
254 end
|
Nenue@30
|
255
|
Nenue@30
|
256 local distance, onContinent = GetDistanceSqToQuest(questLogIndex)
|
Nenue@30
|
257 if distance ~= nil and distance > 0 then
|
Nenue@30
|
258 POI.distance = distance
|
Nenue@30
|
259 POI.onContinent = onContinent
|
Nenue@30
|
260 end
|
Nenue@30
|
261 end
|
Nenue@30
|
262 q.POI = POI
|
Nenue@30
|
263
|
Nenue@30
|
264 --- Block Tags
|
Nenue@30
|
265 -- completionTag - in progres, complete, failed, autocomplete
|
Nenue@30
|
266 -- typeTag - account, faction, pvp, dungeon, group
|
Nenue@30
|
267 -- frequencyTag - daily/weekly
|
Nenue@30
|
268 local questTagID, tagName = GetQuestTagInfo(questID)
|
Nenue@30
|
269 local tagInfo = {}
|
Nenue@30
|
270 local tagCoords = {}
|
Nenue@30
|
271 local factionGroup = GetQuestFactionGroup(questID);
|
Nenue@30
|
272 if( questTagID and questTagID == QUEST_TAG_ACCOUNT ) then
|
Nenue@30
|
273 if( factionGroup ) then
|
Nenue@30
|
274 tagID = "ALLIANCE"
|
Nenue@30
|
275 if ( factionGroup == LE_QUEST_FACTION_HORDE ) then
|
Nenue@30
|
276 tagID = "HORDE"
|
Nenue@30
|
277 end
|
Nenue@30
|
278 isFaction = true
|
Nenue@30
|
279 else
|
Nenue@30
|
280 tagID = QUEST_TAG_ACCOUNT
|
Nenue@30
|
281 isAccount = true
|
Nenue@30
|
282 end
|
Nenue@30
|
283 tagInfo['typeTag'] = tagID
|
Nenue@30
|
284 tagCoords['typeTag'] = QUEST_TAG_TCOORDS[tagID]
|
Nenue@30
|
285 elseif ( factionGroup) then
|
Nenue@30
|
286 tagID = "ALLIANCE"
|
Nenue@30
|
287 if ( factionGroup == LE_QUEST_FACTION_HORDE ) then
|
Nenue@30
|
288 tagID = "HORDE"
|
Nenue@30
|
289 end
|
Nenue@30
|
290 isFaction = true
|
Nenue@30
|
291 tagInfo['typeTag'] = tagID
|
Nenue@30
|
292 tagCoords['typeTag'] = QUEST_TAG_TCOORDS[tagID]
|
Nenue@30
|
293 end
|
Nenue@30
|
294
|
Nenue@30
|
295 if( frequency == LE_QUEST_FREQUENCY_DAILY and (not isComplete or isComplete == 0) ) then
|
Nenue@30
|
296 tagID = 'DAILY'
|
Nenue@30
|
297 tagInfo['frequencyTag'] = tagID
|
Nenue@30
|
298 tagCoords['frequencyTag'] = QUEST_TAG_TCOORDS[tagID]
|
Nenue@30
|
299 isDaily = true
|
Nenue@30
|
300 elseif( frequency == LE_QUEST_FREQUENCY_WEEKLY and (not isComplete or isComplete == 0) )then
|
Nenue@30
|
301 tagID = 'WEEKLY'
|
Nenue@30
|
302 tagInfo['frequencyTag'] = tagID
|
Nenue@30
|
303 tagCoords['frequencyTag'] = QUEST_TAG_TCOORDS[tagID]
|
Nenue@30
|
304 isWeekly = true
|
Nenue@30
|
305 elseif( questTagID ) then
|
Nenue@30
|
306 tagID = questTagID
|
Nenue@30
|
307 end
|
Nenue@30
|
308
|
Nenue@30
|
309 if( isComplete ) then
|
Nenue@30
|
310 tagInfo['completionTag'] = 'COMPLETED'
|
Nenue@30
|
311 elseif ( questFailed ) then
|
Nenue@30
|
312 tagInfo['completionTag'] = 'FAILED'
|
Nenue@30
|
313 end
|
Nenue@30
|
314 tagCoords['completionTag'] = QUEST_TAG_TCOORDS[tagInfo['completionTag']]
|
Nenue@30
|
315
|
Nenue@30
|
316 q.tagInfo = tagInfo
|
Nenue@30
|
317 q.tagCoords = tagCoords
|
Nenue@30
|
318 -- establishes the primary block tag for view compacting
|
Nenue@30
|
319 q.tagID = tagID
|
Nenue@30
|
320 q.tagName = tagName
|
Nenue@30
|
321
|
Nenue@30
|
322 -- action button information
|
Nenue@30
|
323 local link, icon, charges = GetQuestLogSpecialItemInfo(questLogIndex)
|
Nenue@30
|
324 local start, duration, enable = GetQuestLogSpecialItemCooldown(questLogIndex)
|
Nenue@30
|
325 if link or icon or charges then
|
Nenue@30
|
326 q.specialItem = {
|
Nenue@30
|
327 questID = questID,
|
Nenue@30
|
328 questLogIndex = questLogIndex,
|
Nenue@30
|
329 link = link,
|
Nenue@30
|
330 charges = charges,
|
Nenue@30
|
331 icon = icon,
|
Nenue@30
|
332 start = start,
|
Nenue@30
|
333 duration = duration,
|
Nenue@30
|
334 enable = enable,
|
Nenue@30
|
335 }
|
Nenue@30
|
336 end
|
Nenue@30
|
337
|
Nenue@30
|
338 -- resolved data
|
Nenue@30
|
339
|
Nenue@30
|
340 -- raw data
|
Nenue@28
|
341 q.watchIndex = watchIndex
|
Nenue@28
|
342 q.type = 'Quest'
|
Nenue@30
|
343 q.id = questID
|
Nenue@28
|
344 q.questID = questID
|
Nenue@28
|
345 q.title = title
|
Nenue@28
|
346 q.level = level
|
Nenue@28
|
347 q.displayQuestID = displayQuestID
|
Nenue@28
|
348 q.suggestedGroup = suggestedGroup
|
Nenue@30
|
349 q.questLogIndex = questLogIndex
|
Nenue@28
|
350 q.numObjectives = numObjectives
|
Nenue@28
|
351 q.requiredMoney = requiredMoney
|
Nenue@28
|
352 q.isComplete = isComplete
|
Nenue@28
|
353 q.startEvent = startEvent
|
Nenue@28
|
354 q.isAutoComplete = isAutoComplete
|
Nenue@28
|
355 q.failureTime = failureTime
|
Nenue@28
|
356 q.timeElapsed = timeElapsed
|
Nenue@28
|
357 q.questType = questType
|
Nenue@28
|
358 q.isTask = isTask
|
Nenue@28
|
359 q.isStory = isStory
|
Nenue@28
|
360 q.isOnMap = isOnMap
|
Nenue@28
|
361 q.hasLocalPOI = hasLocalPOI
|
Nenue@28
|
362 q.frequency = frequency
|
Nenue@28
|
363 q.isComplete = isComplete
|
Nenue@28
|
364 q.isStory = isStory
|
Nenue@28
|
365 q.isTask = isTask
|
Nenue@28
|
366
|
Nenue@30
|
367 q.selected = (questID == superTrackQuestID) -- call directly so artifact data doesn't become an issue
|
Nenue@30
|
368 self.WatchInfo[watchIndex] = q
|
Nenue@30
|
369 self.LogInfo[questLogIndex] = q
|
Nenue@28
|
370
|
Nenue@30
|
371 if Devian and Devian.InWorkspace() then
|
Nenue@30
|
372 print('|cFF00DDFFstatus:|r', temp_status, '|cFF00FF00questLogIndex|r:', title)
|
Nenue@30
|
373 local temp ={}
|
Nenue@30
|
374 local data_txt = '|cFFFF4400values:|r'
|
Nenue@30
|
375 for k,v in pairs(q) do
|
Nenue@30
|
376 if type(v) =='number' then
|
Nenue@30
|
377 data_txt = data_txt .. ' |cFFFFFF00'..k..'|r: ' .. tostring(v)
|
Nenue@30
|
378 elseif type(v) == 'table' then
|
Nenue@30
|
379 tinsert(temp, k)
|
Nenue@28
|
380 end
|
Nenue@28
|
381 end
|
Nenue@30
|
382 print(data_txt)
|
Nenue@30
|
383 sort(temp, function(a,b) return a < b end)
|
Nenue@30
|
384 for i, k in ipairs(temp) do
|
Nenue@30
|
385 print('|cFF00FF00'..k..'|r')
|
Nenue@30
|
386 for kk,v in pairs(q[k]) do
|
Nenue@30
|
387 print(' ', kk, '=', v)
|
Nenue@30
|
388 end
|
Nenue@28
|
389 end
|
Nenue@28
|
390 end
|
Nenue@28
|
391
|
Nenue@30
|
392 return q
|
Nenue@30
|
393 end
|
Nenue@28
|
394
|
Nenue@30
|
395 Quest.GetObjectives = function(questLogIndex, numObjectives, isComplete, isSequenced, isStory)
|
Nenue@30
|
396 local objectives = {}
|
Nenue@30
|
397 for i = 1, numObjectives do
|
Nenue@30
|
398 local text, type, finished = GetQuestLogLeaderBoard(i, questLogIndex)
|
Nenue@28
|
399 print(format(' #%d %s %s %s', i, tostring(type), tostring(text), tostring(finished)))
|
Nenue@30
|
400 objectives[i] = {
|
Nenue@28
|
401 index = i,
|
Nenue@28
|
402 type = type,
|
Nenue@28
|
403 text = text,
|
Nenue@28
|
404 finished = finished
|
Nenue@28
|
405 }
|
Nenue@28
|
406 end
|
Nenue@30
|
407 return objectives
|
Nenue@28
|
408 end
|
Nenue@28
|
409
|
Nenue@30
|
410 local huge, sqrt = math.huge, math.sqrt
|
Nenue@28
|
411 Quest.GetClosest = function()
|
Nenue@28
|
412 local minID, minTitle
|
Nenue@30
|
413 local minDist = huge
|
Nenue@28
|
414 local numQuests = GetNumQuestLogEntries()
|
Nenue@28
|
415 for questIndex = 1, numQuests do
|
Nenue@28
|
416 local distance, onContinent = GetDistanceSqToQuest(questIndex)
|
Nenue@28
|
417 local title, level, _, _, _, _, _, _, questID = GetQuestLogTitle(questIndex)
|
Nenue@28
|
418 if onContinent and distance < minDist then
|
Nenue@28
|
419 minDist = distance
|
Nenue@28
|
420 minTitle = title
|
Nenue@28
|
421 minID = questID
|
Nenue@28
|
422 end
|
Nenue@28
|
423 end
|
Nenue@28
|
424
|
Nenue@30
|
425 print('nearest quest is', minTitle, 'by', sqrt(minDist))
|
Nenue@28
|
426 return minID, minTitle, minDist
|
Nenue@28
|
427 end
|
Nenue@28
|
428
|
Nenue@28
|
429 Quest.OnTurnIn = function(self, questID, xp, money)
|
Nenue@28
|
430
|
Nenue@28
|
431 end
|
Nenue@28
|
432
|
Nenue@28
|
433
|
Nenue@29
|
434 Quest.Select = function (handler, block)
|
Nenue@29
|
435 if block.info.isAutoComplete and block.info.isComplete then
|
Nenue@29
|
436 ShowQuestComplete(block.info.questLogIndex)
|
Nenue@28
|
437 else
|
Nenue@29
|
438 SetSuperTrackedQuestID(block.info.questID)
|
Nenue@28
|
439 end
|
Nenue@28
|
440 end
|
Nenue@28
|
441
|
Nenue@29
|
442 Quest.Link = function(handler, block)
|
Nenue@28
|
443
|
Nenue@29
|
444 local questLink = GetQuestLink(block.info.questLogIndex);
|
Nenue@28
|
445 if ( questLink ) then
|
Nenue@28
|
446 ChatEdit_InsertLink(questLink);
|
Nenue@28
|
447 end
|
Nenue@28
|
448 end
|
Nenue@28
|
449
|
Nenue@29
|
450 Quest.Open = function(handler, block)
|
Nenue@28
|
451
|
Nenue@29
|
452 QuestMapFrame_OpenToQuestDetails(block.info.questID)
|
Nenue@28
|
453 end
|
Nenue@28
|
454
|
Nenue@29
|
455 Quest.Remove = function(handler, block)
|
Nenue@28
|
456
|
Nenue@29
|
457 print('removing', block.info.questLogIndex, 'from watcher')
|
Nenue@29
|
458 RemoveQuestWatch(block.info.questLogIndex)
|
Nenue@29
|
459 end
|