comparison WorldQuests.lua @ 72:6db0b9696936

do bounty criteria checking in the QuestButtonUpdate segment
author Nenue
date Fri, 07 Apr 2017 01:07:48 -0400
parents d6c0bed32c51
children 25f7dbc20a72
comparison
equal deleted inserted replaced
71:d6c0bed32c51 72:6db0b9696936
1 -- WorldPlan 1 -- WorldPlan
2 -- WorldQuests.lua 2 -- WorldQuests.lua
3 -- Created: 11/2/2016 3:40 PM 3 -- Created: 11/2/2016 3:40 PM
4 -- %file-revision% 4 -- %file-revision%
5
6 local print = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or function() end
7 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or function() end
8 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end
9 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
10 local mprint = DEVIAN_WORKSPACE and function(...) _G.print('Canvas', ...) end or function() end
5 local _, db = ... 11 local _, db = ...
6 local Module = WorldPlanQuestsMixin 12 local Module = WorldPlanQuestsMixin
7 13
8 local _G = _G 14 local _G = _G
15 local type, tostring, tonumber, pairs, ipairs = type, tostring, tonumber, pairs, ipairs
9 local MC_GetNumZones, MC_GetZoneInfo = C_MapCanvas.GetNumZones, C_MapCanvas.GetZoneInfo 16 local MC_GetNumZones, MC_GetZoneInfo = C_MapCanvas.GetNumZones, C_MapCanvas.GetZoneInfo
10 local TQ_GetQuestsForPlayerByMapID = C_TaskQuest.GetQuestsForPlayerByMapID -- This function is not yet documented 17 local TQ_GetQuestsForPlayerByMapID = C_TaskQuest.GetQuestsForPlayerByMapID -- This function is not yet documented
11 local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID 18 local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID
12 local TQ_IsActive = C_TaskQuest.IsActive 19 local TQ_IsActive = C_TaskQuest.IsActive
13 local pairs, ipairs, tinsert, tremove, wipe = pairs, ipairs, tinsert, tremove, table.wipe 20 local pairs, ipairs, tinsert, tremove, wipe = pairs, ipairs, tinsert, tremove, table.wipe
15 local GetTime = GetTime 22 local GetTime = GetTime
16 local SpellCanTargetQuest, IsQuestIDValidSpellTarget = SpellCanTargetQuest, IsQuestIDValidSpellTarget 23 local SpellCanTargetQuest, IsQuestIDValidSpellTarget = SpellCanTargetQuest, IsQuestIDValidSpellTarget
17 local tonumber, abs = tonumber, math.abs 24 local tonumber, abs = tonumber, math.abs
18 local GetQuestLogRewardInfo = GetQuestLogRewardInfo 25 local GetQuestLogRewardInfo = GetQuestLogRewardInfo
19 local GetCurrentMapAreaID, GetMapInfo, GetMapNameByID = GetCurrentMapAreaID, GetMapInfo, GetMapNameByID 26 local GetCurrentMapAreaID, GetMapInfo, GetMapNameByID = GetCurrentMapAreaID, GetMapInfo, GetMapNameByID
20 27 local GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestComplete = GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestComplete
21 28 local IsQuestCriteriaForBounty = IsQuestCriteriaForBounty
22 local print = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or function() end
23 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or function() end
24 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end
25 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
26 local mprint = DEVIAN_WORKSPACE and function(...) _G.print('Canvas', ...) end or function() end
27 29
28 local ToggleButton = {} 30 local ToggleButton = {}
29 local callbacks = {} 31 local callbacks = {}
30 local PinBaseIndex = 1200 32 local PinBaseIndex = 1200
31 local BROKEN_ISLES_ID, DALARAN_ID, AZSUNA_ID, VALSHARAH_ID, HIGHMOUNTAIN_ID, STORMHEIM_ID, SURAMAR_ID, EOA_ID = 1007, 1014, 1015,1018, 1024, 1017, 1033, 1096 33 local BROKEN_ISLES_ID, DALARAN_ID, AZSUNA_ID, VALSHARAH_ID, HIGHMOUNTAIN_ID, STORMHEIM_ID, SURAMAR_ID, EOA_ID = 1007, 1014, 1015,1018, 1024, 1017, 1033, 1096
35 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD 37 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD
36 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER 38 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER
37 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT 39 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT
38 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES 40 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES
39 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS 41 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS
40 local SCALE_FACTORS = { 42 local SCALE_FACTORS = { 0.25, 0.7, 1 }
41 0.25, 0.7, 1 43
42 } 44 local BountyBoard = WorldMapFrame.UIElementsFrame.BountyBoard
43 45 local ActionButton = WorldMapFrame.UIElementsFrame.ActionButton
46
47 local layoutDirty = true
48 local bountiesDirty = true
44 local currentScale = WorldMapDetailFrame:GetScale() 49 local currentScale = WorldMapDetailFrame:GetScale()
45 local canTargetQuests 50 local canTargetQuests
46 local numShown = 0 51 local numShown = 0
47 local numLoaded = 0 52 local numLoaded = 0
48 local isDataLoaded = true 53 local isDataLoaded = true
64 if self.filtersDirty or self.isStale then 69 if self.filtersDirty or self.isStale then
65 self:Refresh() 70 self:Refresh()
66 end 71 end
67 if #db.UpdatedPins >= 1 then 72 if #db.UpdatedPins >= 1 then
68 print('|cFF00FF88pending updates', #db.UpdatedPins) 73 print('|cFF00FF88pending updates', #db.UpdatedPins)
69 self:UpdateQueuedPins() 74 self:RefreshIfQueued()
70 end 75 end
71 76
72 end 77 end
73 78
74 79
119 124
120 self:SetAllPoints(WorldMapPOIFrame) 125 self:SetAllPoints(WorldMapPOIFrame)
121 for k,v in pairs( ToggleButton) do 126 for k,v in pairs( ToggleButton) do
122 self.Toggle:SetScript(k,v) 127 self.Toggle:SetScript(k,v)
123 end 128 end
129
130 self:UpdateBounties('SETUP')
131
124 self:Show() 132 self:Show()
125 end 133 end
126 callbacks.ClickWorldMapActionButton = function(WorldQuests) 134 callbacks.ClickWorldMapActionButton = function(WorldQuests)
127 WorldQuests:GetUsedPOIs() 135 WorldQuests:GetUsedPOIs()
128 end 136 end
133 WorldQuests:RefreshIfChanged() 141 WorldQuests:RefreshIfChanged()
134 end 142 end
135 callbacks.WorldMapScrollFrame_ReanchorQuestPOIs = function (WorldQuests) 143 callbacks.WorldMapScrollFrame_ReanchorQuestPOIs = function (WorldQuests)
136 WorldQuests:RefreshIfChanged() 144 WorldQuests:RefreshIfChanged()
137 end 145 end
138 callbacks[WorldMapFrame.UIElementsFrame.BountyBoard] = { 146
139 SetSelectedBountyIndex = function(WorldQuests) 147 callbacks[BountyBoard] = {}
140 WorldQuests:UpdateBountyInfo() 148 callbacks[BountyBoard].SetSelectedBountyIndex = function(WorldQuests)
141 WorldQuests:Refresh(true) 149 WorldQuests:UpdateBounties('BOUNTY_SELECTED')
142 end 150 WorldQuests:RefreshIfChanged()
143 } 151 end
144 callbacks[WorldMapFrame.UIElementsFrame.ActionButton] = { 152
145 UpdateCastingState = function(WorldQuests) 153 callbacks[ActionButton] = {}
146 WorldQuests:Refresh(true) 154 callbacks[ActionButton].UpdateCastingState = function(WorldQuests)
147 end 155 WorldQuests:Refresh(true)
148 }
149
150
151 local GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted = GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted
152 function Module:UpdateBountyInfo()
153 print('|cFF00FF88BountyInfo()|r')
154 wipe(db.BountyInfo)
155 db.selectedBounty = nil
156
157 local selectedBounty = WorldMapFrame.UIElementsFrame.BountyBoard:GetSelectedBountyIndex()
158 local bounties, numBounties = GetQuestBountyInfoForMapID(db.currentMapID)
159
160 for index, data in ipairs(bounties) do
161 if data.factionID then
162 data.title = GetQuestLogTitle(GetQuestLogIndexByID(data.questID))
163 data.complete = IsQuestFlaggedCompleted(data.questID)
164 if not data.complete then
165 db.BountyInfo[data.factionID] = data
166 print('bounty', data.factionID, data.title, data.complete)
167 if index == selectedBounty then
168 db.selectedBounty = data
169 end
170 end
171
172 end
173 end
174
175 for questID, pin in pairs(db.QuestsByID) do
176 local doUpdate
177 if pin.factionID then
178 if db.BountyInfo[pin.factionID] then
179 print(pin.questID, pin.factionID, db.BountyInfo[pin.factionID], pin.isCriteria)
180 pin.isCriteria = true
181 doUpdate = true
182 else
183 doUpdate = true
184 pin.isCriteria = nil
185 end
186
187 end
188
189
190 if doUpdate then
191 if pin:IsVisible() then
192 pin:Refresh()
193 else
194 pin.isStale = true
195 end
196 end
197 end
198 db.BountyUpdate = nil
199 end 156 end
200 157
201 function Module:OnConfigUpdate() 158 function Module:OnConfigUpdate()
202 print('|cFFFFFF00OnConfigUpdate()|r') 159 print('|cFFFFFF00OnConfigUpdate()|r')
203 if db.Config.FadeWhileGrouped then 160 if db.Config.FadeWhileGrouped then
267 self:RegisterEvent('SKILL_LINES_CHANGED') 224 self:RegisterEvent('SKILL_LINES_CHANGED')
268 self:RegisterEvent('CURRENT_SPELL_CAST_CHANGED') 225 self:RegisterEvent('CURRENT_SPELL_CAST_CHANGED')
269 self:RegisterEvent('ARTIFACT_UPDATE') 226 self:RegisterEvent('ARTIFACT_UPDATE')
270 end 227 end
271 228
272 function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen) 229 local artifactKnowledgeMultiplier
273
274 print('|cFFFFFF00'..self:GetName()..':OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap)
275
276 if db.BountyUpdate then
277 self:UpdateBountyInfo()
278 end
279 if isNewMap then
280 print('|cFF00FF88refreshing for changed map')
281 if isMapOpen then
282 self:Refresh(true)
283 else
284 self.isStale = true
285 end
286 end
287
288 end
289 local superTrackedQuestID 230 local superTrackedQuestID
290 function Module:OnEvent (event, ...) 231 function Module:OnEvent (event, ...)
291 232
292 print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...) 233 print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...)
293 if (event == 'QUEST_LOG_UPDATE') then 234 if (event == 'QUEST_LOG_UPDATE') then
294 if self:IsVisible() then 235 if self:IsVisible() then
295 self:Refresh() 236 self:Refresh()
296 else 237 else
297 self.isStale = true 238 self.isStale = true
298 end 239 end
240
299 print('WorldMapFrame', WorldMapFrame:IsVisible(), 'hasUpdates:', self.isStale) 241 print('WorldMapFrame', WorldMapFrame:IsVisible(), 'hasUpdates:', self.isStale)
300 elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then 242 elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then
301 local questID = ... 243 local questID = ...
302 if questID and db.QuestsByID[questID] then 244 if questID and db.QuestsByID[questID] then
303 self:ReleasePin(db.QuestsByID[questID]) 245 self:ReleasePin(db.QuestsByID[questID])
304 rprint('|cFFFF4400release|r', questID) 246 rprint('|cFFFF4400release|r', questID)
305 end 247 end
306 elseif event == 'SKILL_LINES_CHANGED' or event == 'CURRENT_SPELL_CAST_CHANGED' then 248 elseif event == 'SKILL_LINES_CHANGED' or event == 'CURRENT_SPELL_CAST_CHANGED' then
307 self:Refresh() 249 self:Refresh(event)
308 elseif event == 'ARTIFACT_UPDATE' then 250 elseif event == 'ARTIFACT_UPDATE' then
309 local ak = C_ArtifactUI.GetArtifactKnowledgeMultiplier() 251 local akCheck = C_ArtifactUI.GetArtifactKnowledgeMultiplier()
310 if ak and (ak ~= self.akLevel) then 252 if akCheck and (akCheck ~= artifactKnowledgeMultiplier) then
311 print('push artifact knowledge update', self.akLevel, 'to', ak) 253 if artifactKnowledgeMultiplier then
312 self.akLevel = ak 254 print('push artifact knowledge update', artifactKnowledgeMultiplier, 'to', akCheck)
313 for index, pin in pairs( db.QuestsByID) do 255 for index, pin in pairs( db.QuestsByID) do
314 if pin.rewardType == REWARD_ARTIFACT_POWER then 256 if pin.rewardType == REWARD_ARTIFACT_POWER then
315 pin.dataLoaded = nil 257 db.log(pin.questID .. ' ' .. tostring(pin.title) .. ' Flagged for artifact power.')
258 pin.itemNumber = 0
259 pin.dataLoaded = nil
260 end
316 end 261 end
317 end 262 else
263
264 print('artifact knowledge multiplier is known', akCheck)
265 end
266 artifactKnowledgeMultiplier = akCheck
318 end 267 end
319 elseif event == 'SUPER_TRACKED_QUEST_CHANGED' then 268 elseif event == 'SUPER_TRACKED_QUEST_CHANGED' then
320 if superTrackedQuestID and db.QuestsByID[superTrackedQuestID] then 269 if superTrackedQuestID and db.QuestsByID[superTrackedQuestID] then
321 db.QuestsByID[superTrackedQuestID].isStale = true 270 db.QuestsByID[superTrackedQuestID].isStale = true
322 end 271 end
324 if newID and db.QuestsByID[newID] then 273 if newID and db.QuestsByID[newID] then
325 db.QuestsByID[newID].isStale = true 274 db.QuestsByID[newID].isStale = true
326 end 275 end
327 end 276 end
328 end 277 end
278
279
280
281
282 local bountyInfo = {}
283 local bountyDisplayLocation, bountyLockedQuestID, selectedBountyIndex, selectedBountyQuestID
284 function Module:UpdateBounties(...)
285 print('|cFF00FF88BountyInfo()|r', ...)
286 wipe(db.BountiesByFactionID)
287
288 bountiesDirty = nil
289 db.selectedBounty = nil
290 selectedBountyIndex = BountyBoard:GetSelectedBountyIndex()
291 bountyInfo, bountyDisplayLocation, bountyLockedQuestID = GetQuestBountyInfoForMapID(db.currentMapID, bountyInfo)
292 local numBounties = 0
293 for index, data in ipairs(bountyInfo) do
294 if data.factionID then
295 numBounties = numBounties + 1
296 data.index = index
297 data.complete = IsQuestComplete(data.questID)
298 if not data.complete then
299 db.BountiesByFactionID[data.factionID] = data
300 if index == selectedBountyIndex then
301 db.selectedBounty = data
302 selectedBountyQuestID = data.questID
303 end
304 print(' ', index, data.factionID, GetQuestLogTitle(GetQuestLogIndexByID(data.questID)), data.complete, (index == selectedBountyIndex) and 'SELECTED' or '')
305 end
306 end
307 end
308
309 local numUpdated = 0
310 local numHidden = 0
311 for questID, pin in pairs(db.QuestsByID) do
312 end
313 --print(numUpdated, 'changes from Bounty Board ('..tostring(numHidden)..' hidden)')
314 end
315
316 function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen)
317 if isNewMap then
318 print('|cFF00FF88'..self:GetName()..':OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap)
319 if isMapOpen then
320 self:Refresh(true)
321 else
322 self.isStale = true
323 end
324 else
325
326 rprint('|cFFFFFF00'..self:GetName()..':OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap)
327 end
328 end
329
329 330
330 local totalPins = 0 331 local totalPins = 0
331 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation 332 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation
332 function Module:AcquirePin (info) 333 function Module:AcquirePin (info)
333 local questID = info.questId 334 local questID = info.questId
414 415
415 WorldPlan.dataFlush = true 416 WorldPlan.dataFlush = true
416 print('|cFF00FF00-'.. (pin.mapID and GetMapNameByID(pin.mapID) or '???') ..'|r', id, pin.title) 417 print('|cFF00FF00-'.. (pin.mapID and GetMapNameByID(pin.mapID) or '???') ..'|r', id, pin.title)
417 end 418 end
418 419
419 420 -- re-anchors and scales pins that have had either of these changed due to data loading delays
420 function Module:GetBonusObjectives() 421 function Module:RefreshIfQueued()
421 422 print('|cFF00FF88RefreshIfQueued()')
422
423 local tasksTable = GetTasksTable()
424 if tasksTable ~= nil then
425 print('|cFF00FF88'..self:GetName()..':BonusObjectives()|r ')
426 self.numTasks = #tasksTable
427 for i, taskID in ipairs(tasksTable) do
428 if not QuestUtils_IsQuestWorldQuest(taskID) then
429 local info = db.TasksByID[taskID]
430 if not info then
431 local isInArea, isOnMap, numObjectives, taskName, displayAsObjective = GetTaskInfo(taskID)
432 if isOnMap then
433 print(' * '..i, taskID, GetTaskInfo(taskID))
434 info = {
435 questID = taskID,
436 numObjectives = numObjectives,
437 title = taskName,
438 isInArea = isInArea,
439 isOnMap = isOnMap,
440 displayAsObjective = displayAsObjective,
441 worldQuest = false,
442 isPending = false,
443 isNew = true,
444 }
445
446
447 db.TasksByID[taskID] = info
448
449 local pin = self:AcquirePin(taskID)
450 for k,v in pairs(info) do
451 pin[k] = v
452 end
453 pin:GetBonusObjectiveInfo(info)
454 end
455 end
456 end
457
458
459 end
460 end
461 end
462
463
464 -- use tooltip object to extract item details
465 function Module:GetRewardHeader(questID)
466 local name, icon, quantity, quality, _, itemID = GetQuestLogRewardInfo(1, questID)
467 local scanner = _G.WorldPlanTooltip
468 local print = qprint
469 if not itemID then
470 return
471 end
472 qprint('GetRewardHeader', questID)
473
474 scanner:SetOwner(WorldPlan, "ANCHOR_NONE")
475 scanner:SetItemByID(itemID)
476 scanner:Show()
477 local ttl1 = _G['WorldPlanTooltipTextLeft1']
478 local ttl2 = _G['WorldPlanTooltipTextLeft2']
479 local ttl3 = _G['WorldPlanTooltipTextLeft3']
480 local ttl4 = _G['WorldPlanTooltipTextLeft4']
481 --print(ttl2, ttl3, ttl4)
482 if ttl2 then
483 local text = ttl2:GetText()
484 -- Artifact Power
485 --print(text)
486 if text then
487 if text:match("|cFFE6CC80") then
488 --print('AP token!', text)
489 local power
490 if ttl4 then
491 local text = ttl4:GetText()
492 --print('tip line 4', text)
493 if text then
494 power = text:gsub("%p", ""):match("%d+")
495 power = tonumber(power)
496 end
497
498 end
499 return REWARD_ARTIFACT_POWER, "Interface\\ICONS\\inv_7xp_inscription_talenttome01", power, name, itemID, quality
500 elseif text:match("Item Level") then
501 --print('equipment!', text)
502 quantity = text:match("Item Level ([%d\+]+)")
503 return REWARD_GEAR, icon, quantity, name, itemID, quality
504 elseif text:match("Crafting Reagent") then
505 qprint('|cFFFF4400it is a reagent', text)
506 return REWARD_REAGENT, icon, quantity, name, itemID, quality
507 end
508 end
509 end
510
511 if ttl3 then
512 local text = ttl3:GetText()
513 if text and text:match("Crafting Reagent") then
514 qprint('|cFFFF4400it is a reagent', text)
515 return REWARD_REAGENT, icon, quantity, name, itemID, quality
516 end
517 end
518 return 128, icon, quantity, name, itemID, quality
519 end
520
521 -- pins are queued by their OnUpdate and are ostensibly already visible, we just need to fix the zoom and anchor
522 function Module:UpdateQueuedPins()
523 print('|cFF00FF88UpdateQueuedPins()')
524 local pin = tremove(db.UpdatedPins) 423 local pin = tremove(db.UpdatedPins)
525 while pin do 424 while pin do
526 pin:CheckFilterRules() 425 pin:CheckFilterRules()
527 426
528 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] 427 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
537 pin = tremove(db.UpdatedPins) 436 pin = tremove(db.UpdatedPins)
538 437
539 end 438 end
540 end 439 end
541 440
542 -- create of update quest pins for a map and its underlying zones 441
543 function Module:UpdateWorldQuests (mapID) 442 local msg = '|cFF00FF88WorldQuests:Refresh()|r|cFF00FFFF'
544
545 mapID = mapID or db.currentMapID
546 if not mapID then
547 -- info not available yet
548 return
549 end
550
551 local scalingConstant = 1
552 local style = DEFAULT_STYLE
553 if self.dataLoaded then
554 style = REWARD_TYPE_STYLES[self.rewardType]
555 scalingConstant = db.isContinentMap and 2 or 3
556 end
557
558 local pinScale = SCALE_FACTORS[scalingConstant]
559 print(pinScale)
560 self:SetScale(pinScale)
561 self.Overlay:SetScale(pinScale)
562
563 print('|cFF00FF88'..self:GetName()..':UpdateWorldQuests()|r', 'map:', mapID, 'realMap:', db.currentMapID)
564
565
566 self.isStale = nil
567 print('|cFF00FFFFContinent:|r', BROKEN_ISLES_ID, GetMapNameByID(BROKEN_ISLES_ID))
568 self.isRecursed = true
569 for i = 1, MC_GetNumZones(BROKEN_ISLES_ID) do
570 local submapID, name, depth = MC_GetZoneInfo(BROKEN_ISLES_ID, i)
571 local taskInfo = TQ_GetQuestsForPlayerByMapID(submapID, BROKEN_ISLES_ID)
572 if taskInfo then
573 local zoneName = GetMapNameByID(submapID)
574 print('|cFF00FFFF Zone:|r', submapID, zoneName, #taskInfo)
575 db.QuestsByZone[submapID] = db.QuestsByZone[submapID] or {}
576 for i, info in ipairs(taskInfo) do
577 if HaveQuestData(info.questId) then
578 rprint('|cFF44FF44update|r', info.questId, zoneName)
579 local questID = info.questId
580 local pin = self:AcquirePin(questID)
581 local pin = db.QuestsByID[questID]
582 if pin then
583 pin.isStale = true
584 if pin.isPending then
585 self.isPending = true
586 end
587 end
588 else
589 rprint('|cFFFF4400no data|r', info.questId, zoneName)
590 end
591 end
592 end
593 end
594
595 self:GetBonusObjectives()
596
597 print(' hasUpdate:', self.isStale, 'isPending:', self.isPending, 'timer:', (self.OnNext and 'waiting' or ''))
598 --WorldPlan.isStale = (self.isStale or WorldPlan.isStale)
599 if self.isStale and self:IsVisible() then
600 self:Refresh()
601 end
602
603 end
604
605 function Module:Report()
606 for i, pin in ipairs(db.UsedPins) do
607 db:print(i, pin.questID, pin.title)
608 end
609
610 for id, pin in pairs(db.QuestsByID) do
611 db:print(id, pin.worldQuestType, pin.rewardType, pin.title)
612 end
613 end
614
615 local bountiesInitialized
616 function Module:Refresh(...) 443 function Module:Refresh(...)
617 rprint('|cFF00FF88'..self:GetName()..':Refresh()|r', ...) 444
618 print('|cFF00FF88'..self:GetName()..':Refresh()|r', ...) 445 rprint(msg, ...)
446 print('|cFF00FF88WorldQuests:Refresh()|r', ...)
619 if not self:IsVisible() then 447 if not self:IsVisible() then
620 print(' not visible, flag for later') 448 print(' not visible, flag for later')
621 self.isStale = true 449 self.isStale = true
622 return self:MarkAllPins() 450 return self:MarkAllPins()
623 end 451 end
624 if not db.Config.EnablePins then 452 if not db.Config.EnablePins then
625 numShown = 0 453 numShown = 0
626 return 454 return
627 end 455 end
628 456 wprint(' '..msg)
629 457
630 wprint(' |cFF00FF88'..self:GetName()..':Refresh()|r') 458 layoutDirty = nil
631
632 scaleConstant = db.isContinentMap and 2 or 3 459 scaleConstant = db.isContinentMap and 2 or 3
460 canTargetQuests = SpellCanTargetQuest()
461
633 for index, pin in pairs(db.QuestsByID) do 462 for index, pin in pairs(db.QuestsByID) do
634 pin.used = nil 463 pin.used = nil
635 end 464 end
636 465
637 canTargetQuests = SpellCanTargetQuest()
638 self:UpdateAnchors() 466 self:UpdateAnchors()
467 if bountiesDirty then
468 print(' bounties dirty, pushing that')
469 self:UpdateBounties()
470 bountiesDirty = nil
471 end
472
639 473
640 -- calculate quests shown 474 -- calculate quests shown
641 numShown = 0 475 numShown = 0
642 numLoaded = 0 476 numLoaded = 0
643 for questID, pin in pairs(db.QuestsByID) do 477 for questID, pin in pairs(db.QuestsByID) do
661 pin:HideFrames() 495 pin:HideFrames()
662 end 496 end
663 end 497 end
664 498
665 499
666 self:UpdateBountyInfo() 500
667 501 print(numShown, 'shown,', numLoaded, 'with data')
668 print(numShown, 'shown', numLoaded, 'loaded')
669 if numShown > numLoaded then 502 if numShown > numLoaded then
670 self.Status:Show() 503 self.Status:Show()
671 end 504 end
672 505
673 506
677 end 510 end
678 511
679 function Module:RefreshIfChanged() 512 function Module:RefreshIfChanged()
680 local scaleCheck = WorldMapDetailFrame:GetScale() 513 local scaleCheck = WorldMapDetailFrame:GetScale()
681 if scaleCheck ~= currentScale then 514 if scaleCheck ~= currentScale then
682 print('|cFF00FF88scale changed from', currentScale, 'to', scaleCheck) 515 print('|cFF00FF88RefreshIfChanged()|r map scale updated')
683 self:Refresh() 516 self:Refresh('WORLD_MAP_SCALE_CHANGED')
684 currentScale = scaleCheck 517 currentScale = scaleCheck
685 elseif self.isStale then 518 elseif self.isStale or layoutDirty then
686 print('|cFF00FF88isStale flag was set') 519 print('|cFF00FF88RefreshIfChanged()|r layout is dirty')
687 self:Refresh() 520 self:Refresh()
688 end 521 end
689 end 522 end
690 523
691 -- update visibility states of all pins 524 -- update visibility states of all pins
713 pin.owningFrame = WorldMapFrame 546 pin.owningFrame = WorldMapFrame
714 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor) 547 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor)
715 --tinsert(self.UsedPositions, pin) 548 --tinsert(self.UsedPositions, pin)
716 end 549 end
717 550
551
552 local isCriteria, isBounty
553 if pin.factionID then
554 if db.BountiesByFactionID[pin.factionID] then
555 isCriteria = true
556 end
557 if selectedBountyQuestID then
558 isBounty = IsQuestCriteriaForBounty(pin.questID, selectedBountyQuestID) and true or nil
559 end
560 end
561
562 if (pin.isBounty ~= isBounty) or (pin.isCriteria ~= isCriteria) then
563 print(pin.isBounty, '~=', isBounty)
564 print(pin.isCriteria, '~=', isCriteria)
565 pin.isBounty = isBounty
566 pin.isCriteria = isCriteria
567 if pin:IsVisible() then
568 --print(' changed', pin.title)
569 --numUpdated = numUpdated + 1
570 pin:Refresh('BOUNTY_UPDATE')
571 else
572 --numHidden = numHidden + 1
573 pin.isStale = true
574 end
575 layoutDirty = true
576 end
577
718 if self:IsVisible() and (pin.isStale) then 578 if self:IsVisible() and (pin.isStale) then
719 pin:Refresh() 579 pin:Refresh()
720 end 580 end
721 581
722 if mapID then 582 if mapID then