Mercurial > wow > buffalo2
comparison ObjectiveTracker/QuestData.lua @ 43:9480bd904f4c
- file name organizing
author | Nenue |
---|---|
date | Mon, 25 Apr 2016 13:51:58 -0400 |
parents | ObjectiveTracker/Quests.lua@03ed70f846de |
children | 756e8aeb040b |
comparison
equal
deleted
inserted
replaced
42:c73051785f19 | 43:9480bd904f4c |
---|---|
1 local B = select(2,...).frame | |
2 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | |
3 local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band | |
4 local GetQuestWatchInfo, GetQuestLogCompletionText = GetQuestWatchInfo, GetQuestLogCompletionText | |
5 local GetQuestLogLeaderBoard, GetNumQuestLogEntries, GetQuestLogTitle = GetQuestLogLeaderBoard, GetNumQuestLogEntries, GetQuestLogTitle | |
6 local GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown = GetQuestLogSpecialItemInfo, GetQuestLogSpecialItemCooldown | |
7 local GetSuperTrackedQuestID, GetMoney, C_Scenario, GetCVarBool, GetNumQuestWatches = GetSuperTrackedQuestID, GetMoney, C_Scenario, GetCVarBool, GetNumQuestWatches | |
8 local GetQuestTagInfo, GetMoneyString, GetDistanceSqToQuest, GetQuestFactionGroup = GetQuestTagInfo, GetMoneyString, GetDistanceSqToQuest, GetQuestFactionGroup | |
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 | |
10 local QUEST_TAG_TCOORDS, IsQuestSequenced = QUEST_TAG_TCOORDS, IsQuestSequenced | |
11 local Default, Quest = T.DefaultHandler, T.Quest | |
12 local format, wipe, select = format, table.wipe, select | |
13 local wipeall = B.wipeall | |
14 local lprint, iprint, tprint = B.print('Line'), B.print('Info'), B.print('Tracker') | |
15 local print = tprint | |
16 local fprint = B.print('Frame') | |
17 | |
18 | |
19 local superTrackQuestID, playerMoney, inScenario, showPOIs | |
20 Quest.Update = function(self, reason, ...) | |
21 local print = self.print | |
22 print('QuestTracker:Update() received') | |
23 T.UpdateActionButtons() | |
24 Default.Update(self, reason, ...) | |
25 end | |
26 | |
27 T.Quest.numButtons = 0 | |
28 local usedButtons = T.Quest.itemButtons | |
29 local freeButtons = T.Quest.freeButtons | |
30 | |
31 Quest.UpdateObjectives = function(self, block) | |
32 local print = lprint | |
33 print('|cFF'..self.internalColor..'UpdateObjectives()') | |
34 local info = block.info | |
35 | |
36 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) | |
37 | |
38 local displayObjectives = true | |
39 local block_schema = 'default' | |
40 if info.isAccount then | |
41 if info.isFaction then | |
42 print(' faction', info.tagID) | |
43 block_schema = 'faction_'..info.tagID | |
44 else | |
45 print(' account', info.isAccount, info.isFaction) | |
46 block_schema = 'account' | |
47 end | |
48 elseif info.isDaily then | |
49 print(' daily', info.frequency) | |
50 block_schema = 'daily' | |
51 elseif info.isWeekly then | |
52 print(' weekly', info.frequency) | |
53 block_schema = 'weekly' | |
54 end | |
55 local completionText | |
56 if info.isComplete then | |
57 if info.isAutoComplete then | |
58 local questID, popupType = GetAutoQuestPopUp(info.logIndex) | |
59 if popupType == 'COMPLETE' then | |
60 print(' :: auto-complete quest :: set the message') | |
61 self:AddLine(block, T.strings.CLICK_TO_COMPLETE, nil, 'complete') | |
62 end | |
63 else | |
64 if not completionText or info.completionText then | |
65 info.completionText = GetQuestLogCompletionText(info.logIndex) | |
66 end | |
67 end | |
68 self:AddLine(block, info.completionText, nil, 'complete') | |
69 displayObjectives = false | |
70 print('|cFF'..self.internalColor..' :: complete quest :: show instruction: "'.. tostring(info.completionText) .. '"') | |
71 end | |
72 | |
73 Default.UpdateObjectives(self, block, block_schema, displayObjectives) | |
74 return 0, block_schema | |
75 end | |
76 | |
77 Quest.UpdateLine = function(handler, block, data) | |
78 local objectiveType = data.type | |
79 return data.text, nil, objectiveType | |
80 end | |
81 | |
82 ----------------------------- | |
83 --- QUEST | |
84 local tremove, tinsert = tremove, tinsert | |
85 local GetQuestLogIndexByID, IsQuestWatched = GetQuestLogIndexByID, IsQuestWatched | |
86 Quest.QuestBlock = {} | |
87 Quest.LogBlock = {} | |
88 Quest.LogInfo = {} | |
89 | |
90 Quest.OnRemoved = function(block) | |
91 | |
92 end | |
93 | |
94 Quest.GetBlock = function(self, index) | |
95 local block = Default.GetBlock(self, index) | |
96 block:SetScript('OnEvent', Quest.OnRemoved) | |
97 block:RegisterEvent('QUEST_REMOVED') | |
98 return block | |
99 end | |
100 | |
101 local GetQuestWatchIndex = GetQuestWatchIndex | |
102 local numAnimating = 0 | |
103 local blocksChecked = {} | |
104 | |
105 --- Get a total of things to show, and straighten out the index while we're at it | |
106 --- Return the number shown, total in log, and the info table to parse | |
107 Quest.GetNumWatched = function (self, id, added) | |
108 local print = self.print | |
109 B.print('Block')('########') | |
110 B.print('Block')('########') | |
111 superTrackQuestID = GetSuperTrackedQuestID() | |
112 playerMoney = GetMoney(); | |
113 inScenario = C_Scenario.IsInScenario(); | |
114 showPOIs = GetCVarBool("questPOI"); | |
115 local numAll = GetNumQuestLogEntries() | |
116 local numWatched = GetNumQuestWatches() | |
117 local bottomIndex = 1 | |
118 print('GetNumWatched', self.name, numWatched, 'of', numAll) | |
119 local start, limit = 1, numAll | |
120 | |
121 if id and not added then | |
122 -- if a particular id is supplied, add to checklist | |
123 if self.InfoBlock[id] then | |
124 blocksChecked[self.InfoBlock[id]] = self.InfoBlock[id] | |
125 end | |
126 end | |
127 | |
128 numAnimating = 0 | |
129 for logIndex = start, limit do | |
130 local reason1, reason2 = '', '' | |
131 local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(logIndex) | |
132 local watchIndex = GetQuestWatchIndex(logIndex) | |
133 | |
134 --- Start of crazy audit flagging | |
135 if watchIndex and watchIndex >= bottomIndex then | |
136 -- do watch data pointers match? | |
137 local watchInfo = self.WatchInfo[watchIndex] | |
138 local watchBlock = self.WatchBlock[watchIndex] | |
139 if watchInfo and watchInfo.questID ~= questID then | |
140 print('GetNumWatched', 'trimming WatchInfo ['..watchIndex..'] =/=', questID) | |
141 self.WatchInfo[watchIndex] = nil | |
142 end | |
143 if watchBlock and watchBlock.info.questID ~= questID then | |
144 print('GetNumWatched', 'trimming WatchBlock ['..watchIndex..'] =/=', watchBlock:GetName()) | |
145 self.WatchBlock[watchIndex] = nil | |
146 blocksChecked[watchBlock] = watchBlock | |
147 end | |
148 end | |
149 | |
150 -- check log-block pointer | |
151 local logBlock = self.LogBlock[logIndex] | |
152 if logBlock then | |
153 -- check later that the block isn't for a dropped quest | |
154 if logBlock.info.questID ~= questID then | |
155 print('GetQuests', 'replace info', logBlock.info.questID, '->', questID) | |
156 self.LogBlock[logIndex] = nil | |
157 blocksChecked[logBlock] = logBlock | |
158 end | |
159 end | |
160 --- end of crazy audit flagging | |
161 | |
162 -- add to watch index if: the questID is non-zero | |
163 if questID ~= 0 then | |
164 self.Info[questID] = self:GetInfo(logIndex, watchIndex) | |
165 print('GetQuests', format('request info |cFF00FF00%2d|r |cFFFFFF00%6d|r |cFFFF4400%3s|r', logIndex, questID, tostring(watchIndex or ''))) | |
166 end | |
167 end | |
168 | |
169 --- After GetInfo pass, look for any non-conformant blocks and deal with them | |
170 for _, block in pairs(blocksChecked) do | |
171 local logIndex = GetQuestLogIndexByID(block.info.questID, 'player') | |
172 -- animating blocks have been evaluated | |
173 if not block.isAnimating then | |
174 if not logIndex then | |
175 self:ClearBlock(block) | |
176 elseif not IsQuestWatched(block.info.logIndex) then | |
177 self:ClearBlock(block) | |
178 end | |
179 end | |
180 blocksChecked[block] = nil | |
181 end | |
182 | |
183 self.numWatched = numWatched | |
184 self.numAll = numAll | |
185 | |
186 return numWatched, numAll, self.WatchList | |
187 end | |
188 | |
189 | |
190 --- Returns an iterable table from which tracker blocks can be filled out. Data includes: | |
191 -- All entry-layer GetXInfo return values | |
192 -- Manifest of line data to be displayed in relation to the tracked object | |
193 Quest.GetInfo = function (self, logIndex, watchIndex) | |
194 local print = iprint | |
195 local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle(logIndex) | |
196 if ( not questID ) then | |
197 tprint('GetNumWatched', logIndex, watchIndex, '|cFFFF2299no data|r') | |
198 return | |
199 end | |
200 | |
201 Quest.Info[questID] = Quest.Info[questID] or {} | |
202 local q = Quest.Info[questID] | |
203 q.questID = questID | |
204 q.id = questID | |
205 q.logIndex = logIndex | |
206 q.watchIndex = watchIndex | |
207 | |
208 local numObjectives, requiredMoney, isAutoComplete, failureTime, timeElapsed, questType | |
209 = 0, 0, nil, false, false, 0 | |
210 if watchIndex then | |
211 local _ | |
212 _,_,_, numObjectives, requiredMoney, _, _, isAutoComplete, | |
213 failureTime, timeElapsed, questType = GetQuestWatchInfo(watchIndex) | |
214 | |
215 -- ensure that the entry being populated isn't animating | |
216 if self.WatchBlock[watchIndex] then | |
217 local checkIndex = watchIndex | |
218 while self.WatchBlock[checkIndex + numAnimating] and self.WatchBlock[checkIndex + numAnimating].isAnimating do | |
219 print(self.WatchBlock[checkIndex + numAnimating]:GetName(), 'is in an animation sequence') | |
220 numAnimating = numAnimating + 1 | |
221 end | |
222 end | |
223 | |
224 self.WatchList[watchIndex + numAnimating] = q | |
225 --tprint(' |cFF88FF00GetInfo:|r set watch entry', watchIndex) | |
226 print('GetInfo:', logIndex, watchIndex, '|cFFFF2299'..title..'|r') | |
227 end | |
228 self.LogInfo[logIndex] = q | |
229 | |
230 q.numObjectives = numObjectives | |
231 q.requiredMoney = requiredMoney | |
232 q.failureTime = failureTime | |
233 q.timeElapsed = timeElapsed | |
234 | |
235 | |
236 | |
237 q.type = 'Quest' | |
238 q.title = title | |
239 q.level = level | |
240 q.displayQuestID = displayQuestID | |
241 q.suggestedGroup = suggestedGroup | |
242 | |
243 -- re-use Blizzard logic for consistency | |
244 local showQuest = true | |
245 if isTask then showQuest = false end | |
246 local watchMoney = false; | |
247 local tagID, typeTag, frequencyTag, completionTag, completionText | |
248 local isAccount, isFaction, isWeekly, isDaily = false, false, false, false | |
249 local isBreadcrumb = false | |
250 local questFailed = false | |
251 local watchMoney = false | |
252 local timerInfo, moneyInfo = false, false | |
253 local objectives = q.objectives or {} | |
254 | |
255 | |
256 -- Case 1: completed quest or "go to thing" breadcrumb | |
257 -- * 1 line containing the completion text | |
258 if ( isComplete and isComplete < 0 ) then | |
259 isComplete = false | |
260 questFailed = true | |
261 elseif ( numObjectives == 0 and playerMoney >= requiredMoney and not startEvent ) then | |
262 isComplete = true; | |
263 questFailed = false | |
264 if ( requiredMoney == 0 ) then | |
265 isBreadcrumb = true; | |
266 end | |
267 end | |
268 print('QuestFlags', (isComplete and 'isComplete' or ''), (questFailed and 'questFailed' or ''), (isBreadcrumb and 'isBreadcrumb' or '')) | |
269 | |
270 -- completion message? | |
271 local isSequenced = IsQuestSequenced(questID) | |
272 local temp_status = '' | |
273 if ( isComplete ) then | |
274 temp_status = 'COMPLETED_OBJECTIVES' | |
275 objectives = Quest.GetObjectives(questLogIndex, numObjectives, true, isSequenced, isStory) | |
276 if ( isAutoComplete ) then | |
277 temp_status = 'AUTOCOMPLETE_OBJECTIVES' | |
278 completionText = _G.QUEST_WATCH_CLICK_TO_COMPLETE | |
279 else | |
280 if ( isBreadcrumb ) then | |
281 temp_status = 'COMPLETE_BREADCRUMB' | |
282 completionText = GetQuestLogCompletionText(questLogIndex) | |
283 else | |
284 temp_status = 'COMPLETE_READY_FOR_TURN_IN' | |
285 completionText = _G.QUEST_WATCH_QUEST_READY | |
286 end | |
287 end | |
288 elseif ( questFailed ) then | |
289 temp_status = 'FAILED' | |
290 -- Case 2: failed quest | |
291 -- * 1 status line; hide other info | |
292 completionText = _G.FAILED | |
293 else | |
294 | |
295 temp_status = 'PROGRESS_OBJECTIVES' | |
296 -- Case 3: quest in progress | |
297 -- * Multiple objective lines | |
298 -- * Possible extra lines for money and timer data respectively | |
299 self.print(' QuestInfo', title, questType, isAutoComplete) | |
300 objectives = Quest.GetObjectives(logIndex, numObjectives, false, isSequenced, isStory) | |
301 q.objectives = objectives | |
302 | |
303 --- anything past here gets appended to existing objectives | |
304 | |
305 -- money | |
306 if ( requiredMoney > playerMoney ) then | |
307 | |
308 temp_status = temp_status .. '_MONEY' | |
309 local text = GetMoneyString(playerMoney).." / "..GetMoneyString(requiredMoney); | |
310 moneyInfo = { | |
311 type = 'money', | |
312 text = text, | |
313 finished = false, | |
314 requiredMoney = requiredMoney, | |
315 playerMoney = playerMoney, | |
316 } | |
317 tinsert(objectives, moneyInfo) | |
318 end | |
319 | |
320 -- time limit | |
321 if ( failureTime ) then | |
322 temp_status = temp_status .. '_TIMED' | |
323 if ( timeElapsed and timeElapsed <= failureTime ) then | |
324 timerInfo = { | |
325 type = 'timer', | |
326 finished = false, | |
327 timeElapsed = timeElapsed, | |
328 failureTime = failureTime, | |
329 } | |
330 tinsert(objectives, timerInfo) | |
331 end | |
332 end | |
333 end | |
334 q.objectives = objectives | |
335 q.moneyInfo = moneyInfo | |
336 q.timerInfo = timerInfo | |
337 q.completionText = completionText | |
338 | |
339 -- POI data | |
340 local POI = false | |
341 if ( showPOIs ) then | |
342 POI = { | |
343 questID = questID, | |
344 logIndex = logIndex, | |
345 watchIndex = watchIndex | |
346 } | |
347 local poiButton; | |
348 if ( hasLocalPOI ) then | |
349 | |
350 if ( isComplete ) then | |
351 POI.type = 'normal' | |
352 else | |
353 POI.type = 'numeric' | |
354 end | |
355 elseif ( isComplete ) then | |
356 POI.type = 'remote' | |
357 end | |
358 | |
359 local distance, onContinent = GetDistanceSqToQuest(logIndex) | |
360 if distance ~= nil and distance > 0 then | |
361 POI.distance = distance | |
362 POI.onContinent = onContinent | |
363 end | |
364 end | |
365 q.POI = POI | |
366 | |
367 --- Block Tags | |
368 -- completionTag - in progres, complete, failed, autocomplete | |
369 -- typeTag - account, faction, pvp, dungeon, group | |
370 -- frequencyTag - daily/weekly | |
371 local schema = 'default' | |
372 local questTagID, tagName = GetQuestTagInfo(questID) | |
373 local tagInfo = {} | |
374 local tagCoords = {} | |
375 local factionGroup = GetQuestFactionGroup(questID); | |
376 if( questTagID and questTagID == QUEST_TAG_ACCOUNT ) then | |
377 if( factionGroup ) then | |
378 tagID = "ALLIANCE" | |
379 schema = 'alliance' | |
380 if ( factionGroup == LE_QUEST_FACTION_HORDE ) then | |
381 tagID = "HORDE" | |
382 schema = 'horde' | |
383 end | |
384 isFaction = true | |
385 else | |
386 tagID = QUEST_TAG_ACCOUNT | |
387 isAccount = true | |
388 end | |
389 tagInfo['typeTag'] = tagID | |
390 tagCoords['typeTag'] = QUEST_TAG_TCOORDS[tagID] | |
391 elseif ( factionGroup) then | |
392 tagID = "ALLIANCE" | |
393 if ( factionGroup == LE_QUEST_FACTION_HORDE ) then | |
394 tagID = "HORDE" | |
395 end | |
396 isFaction = true | |
397 tagInfo['typeTag'] = tagID | |
398 tagCoords['typeTag'] = QUEST_TAG_TCOORDS[tagID] | |
399 end | |
400 | |
401 if( frequency == LE_QUEST_FREQUENCY_DAILY and (not isComplete or isComplete == 0) ) then | |
402 tagID = 'DAILY' | |
403 tagInfo['frequencyTag'] = tagID | |
404 tagCoords['frequencyTag'] = QUEST_TAG_TCOORDS[tagID] | |
405 isDaily = true | |
406 schema = 'daily' | |
407 elseif( frequency == LE_QUEST_FREQUENCY_WEEKLY and (not isComplete or isComplete == 0) )then | |
408 tagID = 'WEEKLY' | |
409 tagInfo['frequencyTag'] = tagID | |
410 tagCoords['frequencyTag'] = QUEST_TAG_TCOORDS[tagID] | |
411 isWeekly = true | |
412 schema = 'weekly' | |
413 elseif( questTagID ) then | |
414 tagID = questTagID | |
415 end | |
416 | |
417 if( isComplete ) then | |
418 tagInfo['completionTag'] = 'COMPLETED' | |
419 elseif ( questFailed ) then | |
420 tagInfo['completionTag'] = 'FAILED' | |
421 end | |
422 tagCoords['completionTag'] = QUEST_TAG_TCOORDS[tagInfo['completionTag']] | |
423 | |
424 q.tagInfo = tagInfo | |
425 q.tagCoords = tagCoords | |
426 -- establishes the primary block tag for view compacting | |
427 q.tagID = tagID | |
428 q.tagName = tagName | |
429 | |
430 -- action button information | |
431 local link, icon, charges = GetQuestLogSpecialItemInfo(logIndex) | |
432 local start, duration, enable = GetQuestLogSpecialItemCooldown(logIndex) | |
433 if link or icon or charges then | |
434 q.specialItem = { | |
435 questID = questID, | |
436 logIndex = questLogIndex, | |
437 link = link, | |
438 charges = charges, | |
439 icon = icon, | |
440 start = start, | |
441 duration = duration, | |
442 enable = enable, | |
443 } | |
444 end | |
445 | |
446 if moneyInfo or timerInfo then | |
447 numObjectives = #objectives | |
448 end | |
449 | |
450 -- raw data | |
451 q.isComplete = isComplete | |
452 q.startEvent = startEvent | |
453 q.isAutoComplete = isAutoComplete | |
454 q.questType = questType | |
455 q.isTask = isTask | |
456 q.isStory = isStory | |
457 q.isOnMap = isOnMap | |
458 q.hasLocalPOI = hasLocalPOI | |
459 q.frequency = frequency | |
460 q.isComplete = isComplete | |
461 q.isStory = isStory | |
462 q.isTask = isTask | |
463 q.statusKey = temp_status | |
464 q.selected = (questID == superTrackQuestID) | |
465 | |
466 T.SetRewards(q, questID) | |
467 | |
468 q.questID = questID | |
469 q.logIndex = logIndex | |
470 q.watchIndex = watchIndex | |
471 q.id = questID | |
472 q.schema = schema | |
473 | |
474 if Devian and Devian.InWorkspace() then | |
475 print('QuestStatus', temp_status, '|cFF00FF00questLogIndex|r:', logIndex, title) | |
476 local temp ={} | |
477 local data_txt = '|cFF'..self.internalColor..'values:|r' | |
478 for k,v in pairs(q) do | |
479 if type(v) =='number' then | |
480 data_txt = data_txt .. ' |cFFFFFF00'..k..'|r: ' .. tostring(v) | |
481 elseif type(v) == 'table' then | |
482 tinsert(temp, k) | |
483 end | |
484 end | |
485 print('DataStatus',data_txt) | |
486 sort(temp, function(a,b) return a < b end) | |
487 for i, k in ipairs(temp) do | |
488 iprint('GetInfo', questID, ''..k..'|r') | |
489 for kk,v in pairs(q[k]) do | |
490 iprint('GetInfo', questID, kk, '=', v) | |
491 end | |
492 end | |
493 end | |
494 | |
495 return q | |
496 end | |
497 | |
498 Quest.GetObjectives = function(logIndex, numObjectives, isComplete, isSequenced, isStory) | |
499 local print = Quest.print | |
500 local objectives = {} | |
501 if not logIndex then | |
502 return | |
503 end | |
504 | |
505 for i = 1, numObjectives do | |
506 local text, type, finished = GetQuestLogLeaderBoard(i, logIndex) | |
507 | |
508 local progress = 0 | |
509 if finished then | |
510 progress = 1 | |
511 elseif text then | |
512 local quantity, maxQuantity = text:match('^(%d+)/(%d+)') | |
513 if quantity and maxQuantity then | |
514 progress = quantity / maxQuantity | |
515 --print('GetObjectives', 'calculated objective progress:', quantity, '/', maxQuantity, '=', progress) | |
516 end | |
517 end | |
518 | |
519 print('GetObjectives', format('|cFF88FF88#%d %s %s %s', i, tostring(type), tostring(text), tostring(finished)), '('.. tostring(progress)..')') | |
520 | |
521 | |
522 objectives[i] = { | |
523 index = i, | |
524 type = type, | |
525 text = text, | |
526 finished = finished, | |
527 progress = progress | |
528 } | |
529 end | |
530 return objectives | |
531 end | |
532 | |
533 local huge, sqrt = math.huge, math.sqrt | |
534 Quest.GetClosest = function() | |
535 local minID, minTitle | |
536 local minDist = huge | |
537 local numQuests = GetNumQuestLogEntries() | |
538 for questIndex = 1, numQuests do | |
539 local distance, onContinent = GetDistanceSqToQuest(questIndex) | |
540 local title, level, _, _, _, _, _, _, questID = GetQuestLogTitle(questIndex) | |
541 if onContinent and distance < minDist then | |
542 minDist = distance | |
543 minTitle = title | |
544 minID = questID | |
545 end | |
546 end | |
547 | |
548 print('nearest quest is', minTitle, 'by', sqrt(minDist)) | |
549 return minID, minTitle, minDist | |
550 end | |
551 | |
552 Quest.OnTurnIn = function(self, questID, xp, money) | |
553 end | |
554 | |
555 Quest.Select = function (handler, block) | |
556 if block.info.isAutoComplete and block.info.isComplete then | |
557 ShowQuestComplete(block.info.logIndex) | |
558 else | |
559 SetSuperTrackedQuestID(block.info.questID) | |
560 end | |
561 end | |
562 | |
563 Quest.Link = function(handler, block) | |
564 local questLink = GetQuestLink(block.info.logIndex); | |
565 if ( questLink ) then | |
566 ChatEdit_InsertLink(questLink); | |
567 end | |
568 end | |
569 | |
570 Quest.Open = function(handler, block) | |
571 QuestMapFrame_OpenToQuestDetails(block.info.questID) | |
572 end | |
573 | |
574 Quest.Remove = function(handler, block) | |
575 print('removing', block.info.logIndex, 'from watcher') | |
576 RemoveQuestWatch(block.info.logIndex) | |
577 end |