diff 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
line wrap: on
line diff
--- a/WorldQuests.lua	Mon May 15 00:15:44 2017 -0400
+++ b/WorldQuests.lua	Thu May 18 16:43:14 2017 -0400
@@ -68,8 +68,8 @@
 local numLoaded = 0
 local numOverlays = 1
 local scaleConstant = 1
-local pinBaseIndex = 1500
-local overlayBaseIndex = 1580
+local pinBaseIndex = 1550
+local overlayBaseIndex = 1600
 
 local artifactKnowldegeSpells = {
   [207856] = true,
@@ -205,19 +205,26 @@
 callbacks[BountyBoard] = {}
 callbacks[BountyBoard].SetSelectedBountyIndex = function(WorldQuests)
   WorldQuests:UpdateBounties('BOUNTY_SELECTED')
-  WorldQuests:Refresh('BOUNTY_SELECTED')
+  for questID, pin in pairs(db.QuestsByID) do
+    pin.checkCriteria = true
+    pin:Refresh()
+  end
 end
 
 callbacks[ActionButton] = {}
 callbacks[ActionButton].UpdateCastingState = function(WorldQuests)
-  WorldQuests:Refresh('CASTING_STATE_CHANGED')
+  for questID, pin in pairs(db.QuestsByID) do
+    pin.checkCursor = true
+    pin:Refresh()
+  end
 end
 
 callbacks.UseWorldMapActionButtonSpellOnQuest = function(questID)
   local pin = db.QuestsByID[questID]
   -- calling this implies that the pin is used in some way
   if pin then
-    pin:CheckFilterRules()
+    db.log(pin.title ..  ' completed by spell?', IsQuestComplete(pin.questID))
+    pin:OnFilters()
     pin.isStale = true
   end
 end
@@ -309,7 +316,7 @@
 function Module:UpdateNext()
   --print('|cFF00FF88UpdateNext()')
   local pin = tremove(db.UpdatedPins)
-  pin:CheckFilterRules()
+  pin:OnFilters()
 
   local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
   --print(pin.title, pin.dataLoaded  and not pin.filtered, scaleFactor)
@@ -437,6 +444,10 @@
         numLoaded = numLoaded + 1
       end
 
+      pin.checkCriteria = true
+      pin.checkFilters = true
+      pin:Refresh('WORLDMAP_REFRESH ' .. GetTime())
+
     else
       if pin:IsShown() then
         print('|cFFFF4400need to remove', pin.title)
@@ -540,23 +551,22 @@
   for index, info in pairs(taskInfo) do
     local questID, x, y = info.questId, info.x, info.y
     local pin = self:AcquirePin(info)
+    if pin then
+      if pin.canShow then
+        pin.used = true
+        print('using', pin.title, (pin.owningFrame ~= WorldMapFrame))
+        if layoutDirty or (pin.owningFrame ~= WorldMapFrame) then
+          local scaleFactor = SCALE_FACTORS[(not pin.filtered and scaleConstant) or 1]
+          pin.owningFrame = WorldMapFrame
+          pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor)
 
-    if pin.canShow then
-      pin.used = true
-      print('using', pin.title, (pin.owningFrame ~= WorldMapFrame))
-      if layoutDirty or (pin.owningFrame ~= WorldMapFrame) then
-        local scaleFactor = SCALE_FACTORS[(not pin.filtered and scaleConstant) or 1]
-        pin.owningFrame = WorldMapFrame
-        pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor)
-        if pin.isStale then
-          pin:Refresh('WORLDMAP_REFRESH ' .. GetTime())
         end
+        if db.QuestsByZone[mapID] then
+          db.QuestsByZone[mapID][questID] = pin
+        end
+      else
+        print('|cFFFF4400discarding|r', pin.title)
       end
-      if db.QuestsByZone[mapID] then
-        db.QuestsByZone[mapID][questID] = pin
-      end
-    else
-      print('|cFFFF4400discarding|r', pin.title)
     end
   end
 end
@@ -567,17 +577,21 @@
   if not (questID and QuestUtils_IsQuestWorldQuest(questID)) then
     return nil
   end
+  if IsQuestComplete(questID) then
+    return nil
+  end
+
 
   local pin = db.QuestsByID[questID]
   if not pin then
     local numFree = #db.FreePins
     if numFree >= 1 then
       pin = tremove(db.FreePins, numFree)
-      print('|cFF00FF00Re-using', pin:GetName())
+      print('|cFF00FF00Acquire()|r Re-using', pin:GetName())
     else
       totalPins = totalPins + 1
       local name = 'WorldPlanQuestMarker' .. numOverlays
-      print('|cFF00FF00Creating', name)
+      print('|cFF00FF00Acquire()|r Creating', name)
       pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin')
 
       pin:SetID(totalPins)
@@ -585,10 +599,9 @@
       --pin.iconBorder:SetVertexColor(0,0,0,1)
     end
     pin.questID = questID
-    pin.worldQuest = true
     pin.throttle = pin.updateRate
-    pin.isNew = true
     pin.currentWidth = nil
+
     db.QuestsByID[questID] = pin
     tinsert(db.UsedPins, pin)
   end
@@ -624,9 +637,8 @@
     end
   end
 
+  pin:OnFilters()
   pin.isActive = TQ_IsActive(questID)
-  pin:GetCriteriaState()
-  pin:CheckFilterRules()
   --rprint(pin:GetID(), pin.filtered, pin.used)
   return pin
 end