Mercurial > wow > worldplan
comparison WorldQuests.lua @ 100:fbd4ead2a19f v1.4.11
- More attempts to fix quest markers re-appearing when completed via the order hall spells. Hard to test due to cooldown.
| author | Nenue |
|---|---|
| date | Thu, 18 May 2017 16:43:14 -0400 |
| parents | d594c5c4a4a3 |
| children | 4d1520186ea4 8cdd62e7a224 |
comparison
equal
deleted
inserted
replaced
| 99:cffecc347e90 | 100:fbd4ead2a19f |
|---|---|
| 66 local totalPins = 0 | 66 local totalPins = 0 |
| 67 local numShown = 0 | 67 local numShown = 0 |
| 68 local numLoaded = 0 | 68 local numLoaded = 0 |
| 69 local numOverlays = 1 | 69 local numOverlays = 1 |
| 70 local scaleConstant = 1 | 70 local scaleConstant = 1 |
| 71 local pinBaseIndex = 1500 | 71 local pinBaseIndex = 1550 |
| 72 local overlayBaseIndex = 1580 | 72 local overlayBaseIndex = 1600 |
| 73 | 73 |
| 74 local artifactKnowldegeSpells = { | 74 local artifactKnowldegeSpells = { |
| 75 [207856] = true, | 75 [207856] = true, |
| 76 [209203] = true, | 76 [209203] = true, |
| 77 [209204] = true, | 77 [209204] = true, |
| 203 end | 203 end |
| 204 | 204 |
| 205 callbacks[BountyBoard] = {} | 205 callbacks[BountyBoard] = {} |
| 206 callbacks[BountyBoard].SetSelectedBountyIndex = function(WorldQuests) | 206 callbacks[BountyBoard].SetSelectedBountyIndex = function(WorldQuests) |
| 207 WorldQuests:UpdateBounties('BOUNTY_SELECTED') | 207 WorldQuests:UpdateBounties('BOUNTY_SELECTED') |
| 208 WorldQuests:Refresh('BOUNTY_SELECTED') | 208 for questID, pin in pairs(db.QuestsByID) do |
| 209 pin.checkCriteria = true | |
| 210 pin:Refresh() | |
| 211 end | |
| 209 end | 212 end |
| 210 | 213 |
| 211 callbacks[ActionButton] = {} | 214 callbacks[ActionButton] = {} |
| 212 callbacks[ActionButton].UpdateCastingState = function(WorldQuests) | 215 callbacks[ActionButton].UpdateCastingState = function(WorldQuests) |
| 213 WorldQuests:Refresh('CASTING_STATE_CHANGED') | 216 for questID, pin in pairs(db.QuestsByID) do |
| 217 pin.checkCursor = true | |
| 218 pin:Refresh() | |
| 219 end | |
| 214 end | 220 end |
| 215 | 221 |
| 216 callbacks.UseWorldMapActionButtonSpellOnQuest = function(questID) | 222 callbacks.UseWorldMapActionButtonSpellOnQuest = function(questID) |
| 217 local pin = db.QuestsByID[questID] | 223 local pin = db.QuestsByID[questID] |
| 218 -- calling this implies that the pin is used in some way | 224 -- calling this implies that the pin is used in some way |
| 219 if pin then | 225 if pin then |
| 220 pin:CheckFilterRules() | 226 db.log(pin.title .. ' completed by spell?', IsQuestComplete(pin.questID)) |
| 227 pin:OnFilters() | |
| 221 pin.isStale = true | 228 pin.isStale = true |
| 222 end | 229 end |
| 223 end | 230 end |
| 224 | 231 |
| 225 function Module:SetupCallbacks() | 232 function Module:SetupCallbacks() |
| 307 end | 314 end |
| 308 -- re-anchors and scales pins that have had either of these changed due to data loading delays | 315 -- re-anchors and scales pins that have had either of these changed due to data loading delays |
| 309 function Module:UpdateNext() | 316 function Module:UpdateNext() |
| 310 --print('|cFF00FF88UpdateNext()') | 317 --print('|cFF00FF88UpdateNext()') |
| 311 local pin = tremove(db.UpdatedPins) | 318 local pin = tremove(db.UpdatedPins) |
| 312 pin:CheckFilterRules() | 319 pin:OnFilters() |
| 313 | 320 |
| 314 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] | 321 local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] |
| 315 --print(pin.title, pin.dataLoaded and not pin.filtered, scaleFactor) | 322 --print(pin.title, pin.dataLoaded and not pin.filtered, scaleFactor) |
| 316 if pin.used then | 323 if pin.used then |
| 317 pin:SetShown(true) | 324 pin:SetShown(true) |
| 435 numShown = numShown + 1 | 442 numShown = numShown + 1 |
| 436 if pin.dataLoaded then | 443 if pin.dataLoaded then |
| 437 numLoaded = numLoaded + 1 | 444 numLoaded = numLoaded + 1 |
| 438 end | 445 end |
| 439 | 446 |
| 447 pin.checkCriteria = true | |
| 448 pin.checkFilters = true | |
| 449 pin:Refresh('WORLDMAP_REFRESH ' .. GetTime()) | |
| 450 | |
| 440 else | 451 else |
| 441 if pin:IsShown() then | 452 if pin:IsShown() then |
| 442 print('|cFFFF4400need to remove', pin.title) | 453 print('|cFFFF4400need to remove', pin.title) |
| 443 | 454 |
| 444 end | 455 end |
| 538 print('layoutDirty =',layoutDirty) | 549 print('layoutDirty =',layoutDirty) |
| 539 | 550 |
| 540 for index, info in pairs(taskInfo) do | 551 for index, info in pairs(taskInfo) do |
| 541 local questID, x, y = info.questId, info.x, info.y | 552 local questID, x, y = info.questId, info.x, info.y |
| 542 local pin = self:AcquirePin(info) | 553 local pin = self:AcquirePin(info) |
| 543 | 554 if pin then |
| 544 if pin.canShow then | 555 if pin.canShow then |
| 545 pin.used = true | 556 pin.used = true |
| 546 print('using', pin.title, (pin.owningFrame ~= WorldMapFrame)) | 557 print('using', pin.title, (pin.owningFrame ~= WorldMapFrame)) |
| 547 if layoutDirty or (pin.owningFrame ~= WorldMapFrame) then | 558 if layoutDirty or (pin.owningFrame ~= WorldMapFrame) then |
| 548 local scaleFactor = SCALE_FACTORS[(not pin.filtered and scaleConstant) or 1] | 559 local scaleFactor = SCALE_FACTORS[(not pin.filtered and scaleConstant) or 1] |
| 549 pin.owningFrame = WorldMapFrame | 560 pin.owningFrame = WorldMapFrame |
| 550 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor) | 561 pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor) |
| 551 if pin.isStale then | 562 |
| 552 pin:Refresh('WORLDMAP_REFRESH ' .. GetTime()) | |
| 553 end | 563 end |
| 554 end | 564 if db.QuestsByZone[mapID] then |
| 555 if db.QuestsByZone[mapID] then | 565 db.QuestsByZone[mapID][questID] = pin |
| 556 db.QuestsByZone[mapID][questID] = pin | 566 end |
| 557 end | 567 else |
| 558 else | 568 print('|cFFFF4400discarding|r', pin.title) |
| 559 print('|cFFFF4400discarding|r', pin.title) | 569 end |
| 560 end | 570 end |
| 561 end | 571 end |
| 562 end | 572 end |
| 563 | 573 |
| 564 -- locates or creates a corresponding pin frame for the provided TaskInfo data | 574 -- locates or creates a corresponding pin frame for the provided TaskInfo data |
| 565 function Module:AcquirePin (info) | 575 function Module:AcquirePin (info) |
| 566 local questID = info.questId | 576 local questID = info.questId |
| 567 if not (questID and QuestUtils_IsQuestWorldQuest(questID)) then | 577 if not (questID and QuestUtils_IsQuestWorldQuest(questID)) then |
| 568 return nil | 578 return nil |
| 569 end | 579 end |
| 580 if IsQuestComplete(questID) then | |
| 581 return nil | |
| 582 end | |
| 583 | |
| 570 | 584 |
| 571 local pin = db.QuestsByID[questID] | 585 local pin = db.QuestsByID[questID] |
| 572 if not pin then | 586 if not pin then |
| 573 local numFree = #db.FreePins | 587 local numFree = #db.FreePins |
| 574 if numFree >= 1 then | 588 if numFree >= 1 then |
| 575 pin = tremove(db.FreePins, numFree) | 589 pin = tremove(db.FreePins, numFree) |
| 576 print('|cFF00FF00Re-using', pin:GetName()) | 590 print('|cFF00FF00Acquire()|r Re-using', pin:GetName()) |
| 577 else | 591 else |
| 578 totalPins = totalPins + 1 | 592 totalPins = totalPins + 1 |
| 579 local name = 'WorldPlanQuestMarker' .. numOverlays | 593 local name = 'WorldPlanQuestMarker' .. numOverlays |
| 580 print('|cFF00FF00Creating', name) | 594 print('|cFF00FF00Acquire()|r Creating', name) |
| 581 pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin') | 595 pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin') |
| 582 | 596 |
| 583 pin:SetID(totalPins) | 597 pin:SetID(totalPins) |
| 584 numOverlays = numOverlays + 1 | 598 numOverlays = numOverlays + 1 |
| 585 --pin.iconBorder:SetVertexColor(0,0,0,1) | 599 --pin.iconBorder:SetVertexColor(0,0,0,1) |
| 586 end | 600 end |
| 587 pin.questID = questID | 601 pin.questID = questID |
| 588 pin.worldQuest = true | |
| 589 pin.throttle = pin.updateRate | 602 pin.throttle = pin.updateRate |
| 590 pin.isNew = true | |
| 591 pin.currentWidth = nil | 603 pin.currentWidth = nil |
| 604 | |
| 592 db.QuestsByID[questID] = pin | 605 db.QuestsByID[questID] = pin |
| 593 tinsert(db.UsedPins, pin) | 606 tinsert(db.UsedPins, pin) |
| 594 end | 607 end |
| 595 | 608 |
| 596 if IsQuestComplete(questID) then | 609 if IsQuestComplete(questID) then |
| 622 else | 635 else |
| 623 isDataLoaded = false | 636 isDataLoaded = false |
| 624 end | 637 end |
| 625 end | 638 end |
| 626 | 639 |
| 640 pin:OnFilters() | |
| 627 pin.isActive = TQ_IsActive(questID) | 641 pin.isActive = TQ_IsActive(questID) |
| 628 pin:GetCriteriaState() | |
| 629 pin:CheckFilterRules() | |
| 630 --rprint(pin:GetID(), pin.filtered, pin.used) | 642 --rprint(pin:GetID(), pin.filtered, pin.used) |
| 631 return pin | 643 return pin |
| 632 end | 644 end |
| 633 | 645 |
| 634 function Module:Debug(...) | 646 function Module:Debug(...) |
