comparison QuestPOI.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
31 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID 31 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID
32 local GameTooltip = GameTooltip 32 local GameTooltip = GameTooltip
33 local GetItemIcon = GetItemIcon 33 local GetItemIcon = GetItemIcon
34 34
35 local print = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop 35 local print = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop
36 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop
37 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or nop 36 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or nop
38 local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or nop 37 local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or nop
39 local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or nop 38 local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or nop
40 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or nop 39 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or nop
41 local dprint = DEVIAN_WORKSPACE and function(...) _G.print('WQData', ...) end or nop 40 local dprint = DEVIAN_WORKSPACE and function(...) _G.print('WQData', ...) end or nop
42 local QuestPOI = WorldPlanPOIMixin 41 local QuestPOI = WorldPlanPOIMixin
43 42
44 local pinBaseIndex = 1320 43 local pinBaseIndex = 1520
45 local overlayBaseIndex = 1380 44 local overlayBaseIndex = 1580
46 local previousHighlight 45 local previousHighlight
47 46
48 local FADE_TIMING_MULTIPLIER = 3 47 local FADE_TIMING_MULTIPLIER = 3
49 local DATA_DEBUG = false 48 local DATA_DEBUG = false
50 local PIN_REFRESH_DELAY = 1 49 local PIN_REFRESH_DELAY = 1
286 end 285 end
287 286
288 end 287 end
289 288
290 function QuestPOI:OnLoad() 289 function QuestPOI:OnLoad()
291 --qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config) 290 --print('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config)
292 self.debugTimer = 4 291 self.debugTimer = 4
293 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r' 292 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r'
294 self.count = self.Overlay.count 293 self.count = self.Overlay.count
295 self.timeLabel = self.Overlay.timeLabel 294 self.timeLabel = self.Overlay.timeLabel
296 self.Description = self.Overlay.Description 295 self.Description = self.Overlay.Description
297 self.updateRate = PIN_REQUEST_DELAY 296 self.updateRate = PIN_REQUEST_DELAY
298 self.itemName = '|cFF0088FF' .. RETRIEVING_DATA..'|r' 297 self.itemName = '|cFF0088FF' .. RETRIEVING_DATA..'|r'
299 298 self.checkFilters = true
299 self.checkCriteria = true
300 self.checkCursor = true
301 self.worldQuest = true
302 self.isNew = true
300 303
301 self.IconBackdrop:SetVertexColor(0,0,0,1) 304 self.IconBackdrop:SetVertexColor(0,0,0,1)
302 self.Overlay:SetPoint('TOPLEFT', self, 'TOPLEFT', 0, 4) 305 self.Overlay:SetPoint('TOPLEFT', self, 'TOPLEFT', 0, 4)
303 self.Overlay:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', 0, -4) 306 self.Overlay:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', 0, -4)
304 end 307 end
413 --print(WorldMapTooltip:GetParent()) 416 --print(WorldMapTooltip:GetParent())
414 --print(WorldMapTooltip:IsVisible()) 417 --print(WorldMapTooltip:IsVisible())
415 end 418 end
416 419
417 function QuestPOI:OnMouseDown(button) 420 function QuestPOI:OnMouseDown(button)
421
418 if button == 'RightButton' then 422 if button == 'RightButton' then
419 SetSuperTrackedQuestID(nil) 423
424 local timers = db.IgnoreTimers
425 if timers[self.questID] then
426 timers[self.questID] = nil
427 else
428 local tl = TQ_GetQuestTimeLeftMinutes(self.questID)
429 if tl and (tl ~= 0) then
430 timers[self.questID] = time() + (tl * 60)
431 else
432 timers[self.questID] = 0
433 end
434 end
435 self:Refresh()
420 else 436 else
421 TaskPOI_OnClick(self, button) 437 TaskPOI_OnClick(self, button)
422 end 438 end
423 end 439 end
424 440
563 elseif worldQuestType == LE_QUEST_TAG_TYPE_PROFESSION then 579 elseif worldQuestType == LE_QUEST_TAG_TYPE_PROFESSION then
564 self.isKnownProfession = nil 580 self.isKnownProfession = nil
565 local id = self.tradeskillLineIndex and select(7, GetProfessionInfo(self.tradeskillLineIndex)) 581 local id = self.tradeskillLineIndex and select(7, GetProfessionInfo(self.tradeskillLineIndex))
566 if id then 582 if id then
567 self.isKnownProfession = true 583 self.isKnownProfession = true
568 --qprint('profession' , self.title, id) 584 --print('profession' , self.title, id)
569 tagAtlas = WORLD_QUEST_ICONS_BY_PROFESSION[id] 585 tagAtlas = WORLD_QUEST_ICONS_BY_PROFESSION[id]
570 end 586 end
571 elseif worldQuestType == LE_QUEST_TAG_TYPE_DUNGEON then 587 elseif worldQuestType == LE_QUEST_TAG_TYPE_DUNGEON then
572 tagAtlas = "worldquest-icon-dungeon" 588 tagAtlas = "worldquest-icon-dungeon"
573 end 589 end
826 end 842 end
827 843
828 end 844 end
829 845
830 -- Non-hieriarchical display states, checked separately from used/filtered states 846 -- Non-hieriarchical display states, checked separately from used/filtered states
831 function QuestPOI:GetCriteriaState() 847 function QuestPOI:OnCriteria()
848 self.checkCriteria = nil
832 local isCriteria, isBounty, isSpellTarget 849 local isCriteria, isBounty, isSpellTarget
833 850
834 851 print(' ' ..self:GetID() .. ':|cFFFFFF00OnCriteria()' )
835 852
836 for index, bounty in pairs(db.Bounties) do 853 for index, bounty in pairs(db.Bounties) do
837 if (not IsQuestComplete(bounty.questID)) and IsQuestCriteriaForBounty(self.questID, bounty.questID) then 854 if (not IsQuestComplete(bounty.questID)) and IsQuestCriteriaForBounty(self.questID, bounty.questID) then
838 isCriteria = true 855 isCriteria = true
839 if db.selectedBounty == bounty then 856 if db.selectedBounty == bounty then
840 isBounty = true 857 isBounty = true
841 end 858 end
842 --dprint('|cFF00FF88Criteria:|r', self.questID, bounty.questID, isCriteria, isBounty) 859 --dprint('|cFF00FF88Criteria:|r', self.questID, bounty.questID, isCriteria, isBounty)
843 end 860 end
844 end 861 end
845 isSpellTarget = IsQuestIDValidSpellTarget(self.questID) 862
846 863 if (self.isBounty ~= isBounty) or (self.isCriteria ~= isCriteria) then
847 if (self.isBounty ~= isBounty) or (self.isCriteria ~= isCriteria) or (self.isSpellTarget ~= isSpellTarget) then
848 --wqprint('|cFF00FF00criteria state changed') 864 --wqprint('|cFF00FF00criteria state changed')
849 self.isBounty = isBounty 865 self.isBounty = isBounty
850 self.isCriteria = isCriteria 866 self.isCriteria = isCriteria
851 self.isSpellTarget = isSpellTarget 867 self.isSpellTarget = isSpellTarget
852 self.isStale = true 868 end
853 return true 869 end
854 end 870
871 function QuestPOI:OnCursor()
872 self.checkCursor = nil
873 self.isSpellTarget = IsQuestIDValidSpellTarget(self.questID)
855 end 874 end
856 875
857 local cvar_check = { 876 local cvar_check = {
858 [REWARD_CASH] = 'worldQuestFilterGold', 877 [REWARD_CASH] = 'worldQuestFilterGold',
859 [REWARD_ARTIFACT_POWER] = 'worldQuestFilterArtifactPower', 878 [REWARD_ARTIFACT_POWER] = 'worldQuestFilterArtifactPower',
861 [REWARD_REAGENT]= 'worldQuestFilterProfessionMaterials', 880 [REWARD_REAGENT]= 'worldQuestFilterProfessionMaterials',
862 [REWARD_GEAR] = 'worldQuestFilterEquipment', 881 [REWARD_GEAR] = 'worldQuestFilterEquipment',
863 } 882 }
864 883
865 884
866 function QuestPOI:CheckFilterRules () 885 function QuestPOI:OnFilters ()
867 local print = qprint
868 local qType = self.worldQuestType 886 local qType = self.worldQuestType
869 887
870 self.canShow = false 888 self.canShow = false
889 self.checkFilters = nil
871 890
872 if not TQ_IsActive(self.questID) then 891 if not TQ_IsActive(self.questID) then
873 self.hideReason = 'Filter check ended because quest is inactive.' 892 self.hideReason = 'Filter check ended because quest is inactive.'
874 self.used = nil 893 self.used = nil
875 self:SetShown(false) 894 self:SetShown(false)
898 if not GetCVarBool(cvar_check[self.rewardType]) then 917 if not GetCVarBool(cvar_check[self.rewardType]) then
899 filtered = true 918 filtered = true
900 end 919 end
901 end 920 end
902 921
903 print(' '..self.questID..':|cFFFFFF00CheckFilterRules()|r', filtered, self.title) 922 print(' '..self.questID..':|cFFFFFF00OnFilters()|r', filtered, self.title)
904 if self.filtered ~= filtered then 923 if self.filtered ~= filtered then
905 wqprint('|cFF00FF00filter changed') 924 wqprint('|cFF00FF00filter changed')
906 self.isStale = true 925 self.isStale = true
907 end 926 end
908 927
911 end 930 end
912 931
913 function QuestPOI:Refresh (event) 932 function QuestPOI:Refresh (event)
914 print('|cFF00FF88Refresh(|r'..self:GetID()..'|cFF00FF88)|r', event, self.title) 933 print('|cFF00FF88Refresh(|r'..self:GetID()..'|cFF00FF88)|r', event, self.title)
915 934
935 if not self:IsShown() then
936 print('queued for Refresh')
937 self.isStale = true
938 return nil
939 end
940
941 if self.checkCriteria then
942 self:OnCriteria()
943 end
944 if self.checkFilters then
945 self:OnFilters()
946 end
947 if self.checkCursor then
948 self:OnCursor()
949 end
916 950
917 local style = DEFAULT_STYLE 951 local style = DEFAULT_STYLE
918 if self.filtered then 952 if self.filtered or db.IgnoreTimers[self.questID] then
919 print('choose minimized') 953 print('choose minimized')
920 style = MINIMIZED_STYLE 954 style = MINIMIZED_STYLE
921 elseif self.dataLoaded then 955 elseif self.dataLoaded then
922 print('choose reward type') 956 print('choose reward type')
923 style = REWARD_TYPE_STYLES[self.rewardType] 957 style = REWARD_TYPE_STYLES[self.rewardType]
924 else 958 else
925 print('choose default') 959 print('choose default')
926 end 960 end
927 961
928 local currentWidth = style.iconWidth or DEFAULT_STYLE.iconWidth 962 local currentWidth = style.iconWidth or DEFAULT_STYLE.iconWidth
929
930
931
932 local borderWidth = style.borderWidth or DEFAULT_STYLE.borderWidth 963 local borderWidth = style.borderWidth or DEFAULT_STYLE.borderWidth
933 local highlightWidth = style.highlightWidth or DEFAULT_STYLE.highlightWidth 964 local highlightWidth = style.highlightWidth or DEFAULT_STYLE.highlightWidth
934 local tagSize = style.TagSize or DEFAULT_STYLE.TagSize 965 local tagSize = style.TagSize or DEFAULT_STYLE.TagSize
935 local hideIcon = style.hideIcon or DEFAULT_STYLE.hideIcon 966 local hideIcon = style.hideIcon or DEFAULT_STYLE.hideIcon
936 local borderColor = style.border or DEFAULT_STYLE.border 967 local borderColor = style.border or DEFAULT_STYLE.border
1055 iconBorder:SetVertexColor(unpack(borderColor)) 1086 iconBorder:SetVertexColor(unpack(borderColor))
1056 trackingBorder:SetVertexColor(0,0,0,.5) 1087 trackingBorder:SetVertexColor(0,0,0,.5)
1057 end 1088 end
1058 1089
1059 if SpellCanTargetQuest() then 1090 if SpellCanTargetQuest() then
1060 if IsQuestIDValidSpellTarget(self.questID) then 1091 if self.isSpellTarget then
1061 icon:SetVertexColor(1,1,1) 1092 icon:SetVertexColor(1,1,1)
1093 self:EnableMouse(false)
1062 else 1094 else
1063 icon:SetVertexColor(1,0,0,1) 1095 icon:SetVertexColor(0.5,0.5,0.5,1)
1064 end 1096 self:EnableMouse(true)
1065 self:EnableMouse(false) 1097 end
1066 else 1098 else
1099 icon:SetVertexColor(1,1,1)
1067 self:EnableMouse(true) 1100 self:EnableMouse(true)
1068 end 1101 end
1102
1069 self.isStale = nil 1103 self.isStale = nil
1070 1104
1071 -- signal filter info update 1105 -- signal filter info update
1072 WorldPlanSummary.isStale = true 1106 WorldPlanSummary.isStale = true
1107 return true
1073 end 1108 end
1074 1109
1075 -- Called at static intervals and with Refresh 1110 -- Called at static intervals and with Refresh
1076 function QuestPOI:UpdateStatus() 1111 function QuestPOI:UpdateStatus()
1077 -- update time elements 1112 -- update time elements
1078 self.isActive = TQ_IsActive(self.questID) 1113 self.isActive = TQ_IsActive(self.questID)
1079 --print(self.maxAlertLevel) 1114 --print(self.maxAlertLevel)
1080 local border = (self.isBounty or self.isCriteria) and self.RewardBorder or self.HighlightBorder 1115 local border = (self.isBounty or self.isCriteria) and self.RewardBorder or self.HighlightBorder
1081 1116
1082 if self.isActive then 1117 if self.isActive then
1118
1083 local tl = self.alertLevel 1119 local tl = self.alertLevel
1084 local timeLeft = TQ_GetQuestTimeLeftMinutes(self.questID) 1120 local timeLeft = TQ_GetQuestTimeLeftMinutes(self.questID)
1085 if timeLeft > 0 then 1121 if timeLeft > 0 then
1086 1122
1087 local text, timeState, style = self:GetTimeInfo(timeLeft, self.maxAlertLevel) 1123 local text, timeState, style = self:GetTimeInfo(timeLeft, self.maxAlertLevel)
1142 self.icon:SetAlpha(0) 1178 self.icon:SetAlpha(0)
1143 self.RewardBorder:SetAlpha(0) 1179 self.RewardBorder:SetAlpha(0)
1144 self:UnregisterEvent('QUEST_TURNED_IN') 1180 self:UnregisterEvent('QUEST_TURNED_IN')
1145 self:UnregisterEvent('QUEST_LOG_UPDATE') 1181 self:UnregisterEvent('QUEST_LOG_UPDATE')
1146 1182
1183 self.checkCursor = true
1184 self.checkFilters = true
1185 self.checkCriteria = true
1186
1147 for i, pin in ipairs(db.UsedPins) do 1187 for i, pin in ipairs(db.UsedPins) do
1148 if pin == self then 1188 if pin == self then
1149 print('|cFFFF4400cleared from UsedPins|r') 1189 print('|cFFFF4400cleared from UsedPins|r')
1150 tremove(db.UsedPins, i) 1190 tremove(db.UsedPins, i)
1151 break 1191 break