annotate ObjectiveTracker/Quests.lua @ 30:7583684becf4

- implement procedural block contents generation - redo anchor calculations to allow for transitional animation - attempt to sort out event handling quirks related to autopopup quest completion and turn-in - revise the data structures created by the different GetInfo's - start on trimming out redundant variables
author Nenue
date Thu, 14 Apr 2016 17:11:13 -0400
parents adcd7c328d07
children 48b3e3959a0a
rev   line source
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