Mercurial > wow > worldplan
comparison QuestPOI.lua @ 40:589c444d4837
WowAce/Curseforge migration push
| author | Nenue |
|---|---|
| date | Sun, 25 Dec 2016 13:04:57 -0500 |
| parents | 78cf1f19856a |
| children | 79e5e96e5f18 |
comparison
equal
deleted
inserted
replaced
| 39:89ddef0594bc | 40:589c444d4837 |
|---|---|
| 1 -- WorldPlan | 1 -- WorldPlan |
| 2 -- QuestPOI.lua | 2 -- QuestPOI.lua |
| 3 -- Created: 10/1/2016 7:21 PM | 3 -- Created: 10/1/2016 7:21 PM |
| 4 -- %file-revision% | 4 -- %file-revision% |
| 5 -- | 5 -- |
| 6 local _, db = ... | |
| 6 | 7 |
| 7 local TQ_GetQuestInfoByQuestID = C_TaskQuest.GetQuestInfoByQuestID -- Return the name of a quest with a given ID | 8 local TQ_GetQuestInfoByQuestID = C_TaskQuest.GetQuestInfoByQuestID -- Return the name of a quest with a given ID |
| 8 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation | 9 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation |
| 9 local TQ_GetQuestTimeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes | 10 local TQ_GetQuestTimeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes |
| 10 local TQ_IsActive = C_TaskQuest.IsActive | 11 local TQ_IsActive = C_TaskQuest.IsActive |
| 11 local TQ_RequestPreloadRewardData = C_TaskQuest.RequestPreloadRewardData | 12 local TQ_RequestPreloadRewardData = C_TaskQuest.RequestPreloadRewardData |
| 12 local QuestPOIGetIconInfo, WorldMapPOIFrame = QuestPOIGetIconInfo, WorldMapPOIFrame | 13 local QuestPOIGetIconInfo, WorldMapPOIFrame = QuestPOIGetIconInfo, WorldMapPOIFrame |
| 13 local WorldMap_DoesWorldQuestInfoPassFilters = WorldMap_DoesWorldQuestInfoPassFilters | 14 local WorldMap_DoesWorldQuestInfoPassFilters = WorldMap_DoesWorldQuestInfoPassFilters |
| 14 local QuestMapFrame_IsQuestWorldQuest = QuestMapFrame_IsQuestWorldQuest | 15 local QuestMapFrame_IsQuestWorldQuest = QuestMapFrame_IsQuestWorldQuest |
| 16 local GetAchievementNumCriteria, GetAchievementCriteriaInfo, GetAchievementInfo = GetAchievementNumCriteria, GetAchievementCriteriaInfo, GetAchievementInfo | |
| 17 local pairs, ipairs, tinsert, unpack, select = pairs, ipairs, tinsert, unpack, select | |
| 18 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID | |
| 15 local GameTooltip = GameTooltip | 19 local GameTooltip = GameTooltip |
| 16 local GetItemIcon = GetItemIcon | 20 local GetItemIcon = GetItemIcon |
| 17 | 21 |
| 18 local print = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end | 22 local print = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end |
| 19 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end | 23 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end |
| 20 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end | 24 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end |
| 21 local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or function() end | 25 local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or function() end |
| 22 local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or function() end | 26 local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or function() end |
| 27 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or function() end | |
| 23 local QuestPOI = WorldPlanPOIMixin | 28 local QuestPOI = WorldPlanPOIMixin |
| 24 | 29 |
| 30 | |
| 31 local PIN_REFRESH_DELAY = .5 | |
| 32 local PIN_REQUEST_DELAY = .2 | |
| 25 local ICON_UNKNOWN = "Interface\\ICONS\\inv_misc_questionmark" | 33 local ICON_UNKNOWN = "Interface\\ICONS\\inv_misc_questionmark" |
| 26 local ICON_MONEY = "Interface\\Buttons\\UI-GroupLoot-Coin-Up" | 34 local ICON_MONEY = "Interface\\Buttons\\UI-GroupLoot-Coin-Up" |
| 27 | 35 |
| 28 local POI_BORDER_MASK = "Interface\\Minimap\\UI-Minimap-Background" | 36 local WORLD_QUEST_BORDER = "Interface\\UNITPOWERBARALT\\Generic1Target_Circular_Frame" |
| 29 local POI_BORDER_FILL = "Interface\\BUTTONS\\YELLOWORANGE64" | 37 local PENDING_BORDER |
| 30 local POI_BORDER_BLUE = "Interface\\BUTTONS\\GRADBLUE" | 38 local PENDING_ICON = "Interface\\BUTTONS\\YELLOWORANGE64" |
| 31 local POI_BORDER_RED = "Interface\\BUTTONS\\RedGrad64" | |
| 32 local POI_BORDER_YELLOW = "Interface\\BUTTONS\\YELLOWORANGE64" | |
| 33 local POI_BORDER_GREEN = "Interface\\BUTTONS\\GREENGRAD64" | |
| 34 | 39 |
| 35 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD | 40 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD |
| 36 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER | 41 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER |
| 37 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT | 42 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT |
| 38 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES | 43 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES |
| 39 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS | 44 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS |
| 40 | 45 |
| 41 | |
| 42 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP | 46 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP |
| 43 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE | 47 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE |
| 44 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON | 48 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON |
| 45 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION | 49 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION |
| 46 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL | 50 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL |
| 49 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE | 53 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE |
| 50 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON | 54 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON |
| 51 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION | 55 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION |
| 52 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL | 56 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL |
| 53 | 57 |
| 54 local subStyles = { | 58 local STYLE_TYPE_PENDING = 768 |
| 55 continent = { | 59 |
| 56 iconWidth = 14, | 60 |
| 57 borderWidth = 2, | 61 -- Pin color/display variables |
| 58 highlightWidth = 1, | 62 db.TooltipExtras = db.TooltipExtras or {} -- idiot-proofing |
| 59 TagSize = 6, | 63 |
| 60 maxAlertLevel = 0, | 64 |
| 61 showNumber = false, | 65 local familiars = { |
| 62 numberFontObject = 'WorldPlanFont' | 66 [42159] = 'Nightwatcher Merayl', |
| 63 }, | 67 [40277] = 'Tiffany Nelson', |
| 64 zone = { | 68 [40298] = 'Sir Galveston', |
| 65 iconWidth = 22, | 69 [40282] = 'Grixis Tinypop', |
| 66 borderWidth = 3, | 70 [40278] = 'Robert Craig', |
| 67 highlightWidth = 2, | 71 [48195] = 'Aulier', |
| 68 TagSize = 12, | 72 [41990] = 'Varenne', |
| 69 maxAlertLevel = 3, | 73 [41860] = 'Xorvasc', |
| 70 showNumber = true, | 74 [40299] = 'Bodhi Sunwayver', |
| 71 numberFontObject = 'WorldPlanNumberFontThin' | 75 [42442] = 'Amalia', |
| 72 }, | 76 [40280] = 'Bredda Tenderhide', |
| 73 minimized = { | 77 [41687] = 'Odrogg', |
| 74 iconWidth = 4, | 78 [41944] = 'Trapper Jarrun', |
| 75 borderWidth = 0, | 79 [40337] = 'Master Tamer Flummox', |
| 76 highlightWidth = 1, | 80 [40279] = 'Durian Strongfruit' |
| 77 NoIcon = true, | |
| 78 maxAlertLevel = 1, | |
| 79 showNumber = false, | |
| 80 } | |
| 81 } | 81 } |
| 82 | 82 local falcosaurs = { |
| 83 -- Pin color/display variables | 83 [44895] = {44881, 'Sharptalon Hatchling', 115786}, |
| 84 | 84 [44894] = {44882, 'Bloodgazer Hatchling', 115787}, |
| 85 local familiars = { | 85 [44893] = {44880, 'Direbeak Hatchling', 115785}, |
| 86 [42159] = {npc = 106552, name = 'Nightwatcher Merayl'}, | 86 [44892] = {44879, 'Snowfeather Hatchling', 115784}, |
| 87 [40277] = {npc = 97804, name = 'Tiffany Nelson'}, | |
| 88 [40298] = {npc = 99182, name = 'Sir Galveston'}, | |
| 89 [40282] = {npc= 99150, name = 'Grixis Tinypop'}, | |
| 90 [40278] = {npc = 98270, name = 'Robert Craig'}, | |
| 91 [48195] = {npc = 105250, name = 'Aulier'}, | |
| 92 [41990] = {npc = 105674, name = 'Varenne'}, | |
| 93 [41860] = {npc = 104970, name = 'Xorvasc'}, | |
| 94 [40299] = {npc = 99210, name = 'Bodhi Sunwayver'}, | |
| 95 [42442] = {npc = 107489, name = 'Amalia'}, | |
| 96 [40280] = {npc = 99077, name = 'Bredda Tenderhide'}, | |
| 97 [41687] = {npc = 104553, name = 'Odrogg'}, | |
| 98 [41944] = {npc = 105455, name = 'Trapper Jarrun'}, | |
| 99 [40337] = {npc = 97709, name = 'Master Tamer Flummox'}, | |
| 100 [40279] = {npc = 99035, name = 'Durian Strongfruit'} | |
| 101 } | 87 } |
| 102 local familiars_id = 9696 | 88 local familiars_id = 9696 |
| 103 | 89 for questID, name in pairs(familiars) do |
| 104 | 90 db.TooltipExtras[questID] = {{ |
| 105 -- update a masked texture without messing up its blending mask | 91 achievementID = familiars_id, |
| 106 | 92 name = name |
| 107 | 93 }} |
| 108 -- update a masked texture without messing up its blending mask | 94 end |
| 109 local SetMaskedTexture = function(region, file, mask) | 95 for questID, info in pairs(falcosaurs) do |
| 110 mask = mask or "Interface\\Minimap\\UI-Minimap-Background" | 96 local trackingQuestID, petName, petID = unpack(info) |
| 111 region:SetMask(nil) | 97 |
| 112 region:SetTexture(file) | 98 db.TooltipExtras[questID] = {{ |
| 113 region:SetMask(mask) | 99 questID = trackingQuestID, |
| 114 end | 100 pet = petName, |
| 115 | 101 petID = petID |
| 116 | 102 }} |
| 117 -- use tooltip object to extract item details | 103 end |
| 118 local ParseItemReward = function(questID) | 104 |
| 119 local name, icon, quantity, quality, _, itemID = GetQuestLogRewardInfo(1, questID) | 105 local GetAchievementTooltipExtras = function(info) |
| 120 local scanner = _G.WorldPlanTooltip | 106 |
| 121 if not itemID then | 107 local hasInfo |
| 122 return | 108 local achievementID = info.achievementID |
| 123 end | 109 local _, name, _, completed, _, _, _, _, _, icon = GetAchievementInfo(achievementID) |
| 124 | |
| 125 scanner:SetOwner(WorldPlan, "ANCHOR_NONE") | |
| 126 scanner:SetItemByID(itemID) | |
| 127 scanner:Show() | |
| 128 local ttl1 = _G['WorldPlanTooltipTextLeft1'] | |
| 129 local ttl2 = _G['WorldPlanTooltipTextLeft2'] | |
| 130 local ttl3 = _G['WorldPlanTooltipTextLeft3'] | |
| 131 local ttl4 = _G['WorldPlanTooltipTextLeft4'] | |
| 132 if ttl2 then | |
| 133 local text = ttl2:GetText() | |
| 134 -- Artifact Power | |
| 135 if text then | |
| 136 if text:match("|cFFE6CC80") then | |
| 137 --print('AP token!', text) | |
| 138 local power | |
| 139 if ttl4 then | |
| 140 local text = ttl4:GetText() | |
| 141 --print('tip line 4', text) | |
| 142 if text then | |
| 143 power = text:gsub("%p", ""):match("%d+") | |
| 144 power = tonumber(power) | |
| 145 end | |
| 146 | |
| 147 end | |
| 148 return REWARD_ARTIFACT_POWER, "Interface\\ICONS\\inv_7xp_inscription_talenttome01", power, name, itemID, quality | |
| 149 elseif text:match("Item Level") then | |
| 150 --print('equipment!', text) | |
| 151 quantity = text:match("Item Level ([%d\+]+)") | |
| 152 return REWARD_GEAR, icon, quantity, name, itemID, quality | |
| 153 elseif text:match("Crafting Reagent") then | |
| 154 --print('|cFFFF4400it is a reagent', text) | |
| 155 return REWARD_REAGENT, icon, quantity, name, itemID, quality | |
| 156 end | |
| 157 end | |
| 158 | |
| 159 elseif ttl3 then | |
| 160 local text = ttl3:GetText() | |
| 161 if text:match("Crafting Reagent") then | |
| 162 --print('|cFFFF4400it is a reagent', text) | |
| 163 return REWARD_REAGENT, icon, quantity, name, itemID, quality | |
| 164 end | |
| 165 end | |
| 166 return 128, icon, quantity, name, itemID, quality | |
| 167 end | |
| 168 | |
| 169 function WorldPlanPOIMixin:OnEnter() | |
| 170 if WorldMapFrame:IsVisible() then | |
| 171 WorldMapTooltip:SetOwner(self, 'ANCHOR_RIGHT') | |
| 172 else | |
| 173 WorldMap_HijackTooltip(self.owningFrame) | |
| 174 end | |
| 175 | |
| 176 local completed = select(4,GetAchievementInfo(familiars_id)) | |
| 177 if not completed then | 110 if not completed then |
| 178 if self.worldQuestType == LE_QUEST_TAG_TYPE_PET_BATTLE and familiars[self.questID] then | 111 |
| 179 | 112 WorldMapTooltip:AddLine(" ") |
| 180 WorldMapTooltip:AddLine(self.title, 1, 1, 1) | 113 WorldMapTooltip:AddLine("Achievements:") |
| 181 if self.quality then | 114 WorldMapTooltip:AddLine(' |T'..icon..':20:20|t '..name) |
| 182 local c = ITEM_QUALITY_COLORS[self.quality] | 115 |
| 183 WorldMapTooltip:AddLine(" ") | 116 local numItems = GetAchievementNumCriteria(achievementID) |
| 184 WorldMapTooltip:AddLine('Rewards') | 117 local numNeeded = 0 |
| 185 WorldMapTooltip:AddLine(self.itemName .. (self.quantity and (' x'..self.quantity) or ''), c.r, c.g, c.b) | 118 local tooltipLines = {} |
| 186 WorldMapTooltip:AddTexture(self.itemTexture) | 119 for i =1, numItems do |
| 187 | 120 local criteriaName, criteriaType, completed, _, _, _, _, subAchievementID = GetAchievementCriteriaInfo(achievementID, i) |
| 188 local cLine = WorldMapTooltip:NumLines() | 121 print(GetAchievementCriteriaInfo(achievementID, i)) |
| 189 local line = _G['WorldMapTooltipTextLeft'..cLine] | 122 |
| 190 local pline = _G['WorldMapTooltipTextLeft'..(cLine-1)] | 123 if not completed then |
| 191 local icon = _G['WorldMapTooltipTexture'..(cLine-3)] | 124 print('::', criteriaName, completed, subAchievementID) |
| 192 icon:SetSize(24,24) | 125 if criteriaType == 8 then |
| 193 icon:ClearAllPoints() | 126 local _, _, _, completed, _, _, _, _, _, subIcon = GetAchievementInfo(subAchievementID) |
| 194 icon:SetPoint('TOPLEFT', pline, 'BOTTOMLEFT', 0, -2) | 127 print(' -', criteriaName, completed, subIcon) |
| 195 line:ClearAllPoints() | 128 if not completed then |
| 196 line:SetPoint('TOPLEFT', icon, 'TOPRIGHT', 7, 0) | 129 local numCompleted = 0 |
| 197 | 130 local numSubItems = GetAchievementNumCriteria(subAchievementID) |
| 198 --- voodoo workaround for IDs getting coerced to string | 131 local subCriteriaLine |
| 199 if type(self.itemTexture) == 'number' then | 132 for j = 1, numSubItems do |
| 200 icon:Show() | 133 local subName, _, completed = GetAchievementCriteriaInfo(subAchievementID, j) |
| 201 icon:SetTexture(self.itemTexture) | 134 |
| 202 end | 135 print(' -',subName, completed) |
| 203 end | 136 if completed then |
| 204 | 137 numCompleted = numCompleted + 1 |
| 205 | 138 else |
| 206 WorldMapTooltip:AddLine(" ") -- causes crash for some reason | 139 numNeeded = numNeeded + 1 |
| 207 WorldMapTooltip:AddLine('Family Familiars') | 140 if subName:match(info.name) then |
| 208 local trainer = familiars[self.questID].name | 141 hasInfo = true |
| 209 local numCheevs = GetAchievementNumCriteria(familiars_id) | 142 subCriteriaLine = ' |T'..subIcon..':16:16|t ' .. criteriaName |
| 210 for index = 1, numCheevs do | 143 end |
| 211 local cheevName, cType, cCompleted, quantity, requiredQuantity, charName, flags, cheevID, quantityString, criteriaID = GetAchievementCriteriaInfo(familiars_id, index) | 144 end |
| 212 local numTrainers = GetAchievementNumCriteria(cheevID) | 145 |
| 213 for subIndex = 1, numTrainers do | 146 end |
| 214 local desc, cType, partCompleted = GetAchievementCriteriaInfo(cheevID, subIndex) | 147 if subCriteriaLine then |
| 215 if desc == trainer then | 148 tinsert(tooltipLines, subCriteriaLine .. ' ('..numCompleted..'/'..numSubItems..')') |
| 216 if not partCompleted then | |
| 217 local iconPath = select(10, GetAchievementInfo(cheevID)) | |
| 218 WorldMapTooltip:AddLine(cheevName) | |
| 219 WorldMapTooltip:AddTexture(iconPath) | |
| 220 end | 149 end |
| 221 end | 150 end |
| 151 elseif criteriaName:match(info.name) and (not completed) then | |
| 152 numNeeded = numNeeded + 1 | |
| 153 tinsert(tooltipLines, criteriaName) | |
| 222 end | 154 end |
| 223 end | 155 end |
| 224 WorldMapTooltip:Show() | 156 end |
| 157 if numNeeded >= 1 then | |
| 158 for i, line in ipairs(tooltipLines) do | |
| 159 WorldMapTooltip:AddLine(line) | |
| 160 end | |
| 161 else | |
| 162 WorldMapTooltip:AddLine('Criteria completed!', 0, 1, 0) | |
| 163 end | |
| 164 | |
| 165 end | |
| 166 return hasInfo | |
| 167 end | |
| 168 | |
| 169 local GetQuestTooltipExtras = function(info) | |
| 170 local questID = info.questID | |
| 171 local hasInfo | |
| 172 | |
| 173 if info.pet then | |
| 174 local index, guid = C_PetJournal.FindPetIDByName(info.pet) | |
| 175 if not index then | |
| 176 hasInfo = true | |
| 177 WorldMapTooltip:AddLine('Pets:') | |
| 178 WorldMapTooltip:AddLine(' - ' .. info.petName) | |
| 179 | |
| 180 if not IsQuestFlaggedCompleted(questID) then | |
| 181 WorldMapTooltip:AddLine(' Required Quest Flags', 1, 1, 0) | |
| 182 else | |
| 183 WorldMapTooltip:AddLine(' Quest Flags Complete!', 0, 1, 0) | |
| 184 end | |
| 185 | |
| 186 end | |
| 187 end | |
| 188 | |
| 189 end | |
| 190 | |
| 191 local GetFactionInfoByID, GetQuestObjectiveInfo = GetFactionInfoByID, GetQuestObjectiveInfo | |
| 192 | |
| 193 function QuestPOI:OnEnter() | |
| 194 if not WorldMapFrame:IsVisible() then | |
| 195 WorldMap_HijackTooltip(self.owningFrame) | |
| 196 else | |
| 197 if self.filtered then | |
| 225 return | 198 return |
| 226 end | 199 end |
| 227 end | 200 end |
| 228 TaskPOI_OnEnter(self) | 201 WorldMapTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
| 229 end | 202 print('doing tooltip stuff') |
| 230 function WorldPlanPOIMixin:OnLeave() | 203 |
| 204 -- Can't add stuff after, so most of the blizzard tooltip hook is simply copied over | |
| 205 local questID = self.questID | |
| 206 local color = WORLD_QUEST_QUALITY_COLORS[self.rarity] or NORMAL_FONT_COLOR; | |
| 207 | |
| 208 | |
| 209 WorldMapTooltip:SetText(self.title, color.r, color.g, color.b); | |
| 210 QuestUtils_AddQuestTypeToTooltip(WorldMapTooltip, questID, NORMAL_FONT_COLOR); | |
| 211 | |
| 212 if ( self.factionID ) then | |
| 213 local factionName = GetFactionInfoByID(self.factionID); | |
| 214 if ( factionName ) then | |
| 215 if (self.capped) then | |
| 216 WorldMapTooltip:AddLine(factionName, GRAY_FONT_COLOR:GetRGB()); | |
| 217 else | |
| 218 WorldMapTooltip:AddLine(factionName); | |
| 219 end | |
| 220 end | |
| 221 end | |
| 222 | |
| 223 if self.worldQuest then | |
| 224 WorldMap_AddQuestTimeToTooltip(questID); | |
| 225 end | |
| 226 | |
| 227 | |
| 228 for objectiveIndex = 1, self.numObjectives do | |
| 229 local objectiveText, objectiveType, finished = GetQuestObjectiveInfo(questID, objectiveIndex, false); | |
| 230 if ( objectiveText and #objectiveText > 0 ) then | |
| 231 local color = finished and GRAY_FONT_COLOR or HIGHLIGHT_FONT_COLOR; | |
| 232 WorldMapTooltip:AddLine(QUEST_DASH .. objectiveText, color.r, color.g, color.b, true); | |
| 233 end | |
| 234 end | |
| 235 | |
| 236 local percent = C_TaskQuest.GetQuestProgressBarInfo(self.questID); | |
| 237 if ( percent ) then | |
| 238 GameTooltip_InsertFrame(WorldMapTooltip, WorldMapTaskTooltipStatusBar); | |
| 239 WorldMapTaskTooltipStatusBar.Bar:SetValue(percent); | |
| 240 WorldMapTaskTooltipStatusBar.Bar.Label:SetFormattedText(PERCENTAGE_STRING, percent); | |
| 241 end | |
| 242 | |
| 243 if db.TooltipExtras[self.questID] then | |
| 244 for index, info in pairs(db.TooltipExtras[questID]) do | |
| 245 if info.achievementID then | |
| 246 GetAchievementTooltipExtras(info) | |
| 247 end | |
| 248 if info.questID then | |
| 249 GetQuestTooltipExtras(info) | |
| 250 end | |
| 251 end | |
| 252 end | |
| 253 WorldMap_AddQuestRewardsToTooltip(questID) | |
| 254 | |
| 255 self.MouseGlow:Show() | |
| 256 WorldMapTooltip:Show() | |
| 257 --WorldMapTooltip.recalculatePadding = true; | |
| 258 --print(WorldMapTooltip:GetParent()) | |
| 259 --print(WorldMapTooltip:IsVisible()) | |
| 260 end | |
| 261 function QuestPOI:OnLeave() | |
| 231 WorldMap_RestoreTooltip() | 262 WorldMap_RestoreTooltip() |
| 232 TaskPOI_OnLeave(self) | 263 self.MouseGlow:Hide() |
| 233 end | 264 WorldMapTooltip:Hide(); |
| 234 function WorldPlanPOIMixin:OnMouseDown() | 265 end |
| 266 function QuestPOI:OnMouseDown() | |
| 235 TaskPOI_OnClick(self) | 267 TaskPOI_OnClick(self) |
| 236 end | 268 end |
| 237 | 269 |
| 238 | 270 -- attempt to pull pin data |
| 239 | 271 local GetQuestTagInfo, GetProfessionInfo = GetQuestTagInfo, GetProfessionInfo |
| 240 -- create or update the pin using the given questID and C_TaskQuest results | 272 function QuestPOI:GetData () |
| 241 function WorldPlanPOIMixin:RefreshData (info) | 273 qprint('|cFF00FF88'..self:GetName()..':GetWorldQuestInfo()|r') |
| 242 | 274 local questID = self.questID |
| 243 qprint('|cFF00FF88'..self:GetName()..':RefreshData()|r') | 275 if not questID then |
| 244 | 276 rprint('|cFFFF4400bad pin|r', self:GetName()) |
| 245 if info then | 277 return nil |
| 246 self.inProgress = info.inProgress | 278 end |
| 247 self.floor = info.floor | 279 |
| 248 self.numObjectives = info.numObjectives or 0 | 280 local questTitle, factionID, capped = TQ_GetQuestInfoByQuestID(questID) |
| 249 if info.x and info.y then | 281 -- if the title is nil, then wait and try later |
| 250 self.x = info.x or self.x | 282 if not questTitle then |
| 251 self.y = info.y or self.y | 283 self.isPending = true |
| 252 --qprint('|cFFFF4400applying taskInfo coords:', info.x, info.y) | 284 rprint('|cFFBB8844nodata|r|cFF00FFFF', self.questId) |
| 253 end | 285 else |
| 254 | 286 self.title, self.factionID, self.capped = questTitle, factionID, capped |
| 255 end | 287 rprint('|cFFBB8844 data|r|cFF00FFFF', (self.isPending and 'late|r' or 'jit|r'), self.title, '|r', self.factionID) |
| 256 | 288 -- set tag details |
| 257 | 289 local worldQuestType |
| 258 local questID = self:GetID() | 290 self.tagID, self.tagName, worldQuestType, self.rarity, self.isElite, self.tradeskillLineIndex = GetQuestTagInfo(questID); |
| 259 local questTitle, rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality, _ | 291 local tagAtlas |
| 260 local hasUpdate, isPending = (self.isStale or self.isNew), self.isPending | 292 if worldQuestType == LE_QUEST_TAG_TYPE_PET_BATTLE then |
| 261 | 293 tagAtlas = "worldquest-icon-petbattle" |
| 262 | 294 elseif worldQuestType == LE_QUEST_TAG_TYPE_PVP then |
| 295 tagAtlas = "worldquest-icon-pvp-ffa" | |
| 296 elseif worldQuestType == LE_QUEST_TAG_TYPE_PROFESSION then | |
| 297 self.isKnownProfession = nil | |
| 298 local id = self.tradeskillLineIndex and select(7, GetProfessionInfo(self.tradeskillLineIndex)) | |
| 299 if id then | |
| 300 self.isKnownProfession = true | |
| 301 qprint('profession' , self.title, id) | |
| 302 tagAtlas = WORLD_QUEST_ICONS_BY_PROFESSION[id] | |
| 303 end | |
| 304 elseif worldQuestType == LE_QUEST_TAG_TYPE_DUNGEON then | |
| 305 tagAtlas = "worldquest-icon-dungeon" | |
| 306 end | |
| 307 self.worldQuestType = worldQuestType | |
| 308 | |
| 309 self.tagAtlas = tagAtlas | |
| 310 | |
| 311 | |
| 312 self:SetRewardInfo() | |
| 313 | |
| 314 -- force throttle on success | |
| 315 --qprint(' |cFF00FFFF'..questID..'|r hasUpdate:', hasUpdate, 'isPending:', isPending, 'isShown', self:IsShown()) | |
| 316 --qprint(' ', 'rewardType:', self.rewardType, 'tag:', self.tagID) | |
| 317 qprint(' ', tostring(self.title), " |T"..tostring(self.itemTexture)..":12:12|t", tostring(self.itemName)) | |
| 318 | |
| 319 if self.itemTexture and self.itemName and self.title then | |
| 320 self.isPending = nil | |
| 321 self.throttle = 1 | |
| 322 self.updateRate = PIN_REFRESH_DELAY | |
| 323 end | |
| 324 end | |
| 325 | |
| 326 self.isCriteria = WorldMapFrame.UIElementsFrame.BountyBoard:IsWorldQuestCriteriaForSelectedBounty(questID) | |
| 327 | |
| 328 return self.isStale, self.isPending | |
| 329 end | |
| 330 | |
| 331 local GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData = GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData | |
| 332 local GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString = GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString | |
| 333 function QuestPOI:SetRewardInfo() | |
| 334 local questID = self.questID | |
| 263 if not HaveQuestData(questID) then | 335 if not HaveQuestData(questID) then |
| 264 TQ_RequestPreloadRewardData(questID) | 336 self.isPending = true |
| 265 isPending = true | |
| 266 else | 337 else |
| 267 | 338 |
| 339 local rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality | |
| 268 -- set reward category | 340 -- set reward category |
| 269 local numRewards = GetNumQuestLogRewards(questID) | 341 local numRewards = GetNumQuestLogRewards(questID) |
| 270 local numCurrency = GetNumQuestLogRewardCurrencies(questID) | 342 local numCurrency = GetNumQuestLogRewardCurrencies(questID) |
| 271 local money = GetQuestLogRewardMoney(questID) | 343 local money = GetQuestLogRewardMoney(questID) |
| 272 if numRewards >= 1 then | 344 if numRewards >= 1 then |
| 273 rewardType, rewardIcon, rewardCount, rewardName, itemID, quality = ParseItemReward(questID) | 345 rewardType, rewardIcon, rewardCount, rewardName, itemID, quality = WorldPlanQuests:GetRewardHeader(questID) |
| 274 elseif numCurrency >= 1 then | 346 elseif numCurrency >= 1 then |
| 275 rewardName, rewardIcon, rewardCount = GetQuestLogRewardCurrencyInfo(1, questID) | 347 rewardName, rewardIcon, rewardCount = GetQuestLogRewardCurrencyInfo(1, questID) |
| 276 rewardType = REWARD_CURRENCY | 348 rewardType = REWARD_CURRENCY |
| 277 elseif money >= 1 then | 349 elseif money >= 1 then |
| 278 rewardIcon = ICON_MONEY | 350 rewardIcon = ICON_MONEY |
| 279 rewardName = GetMoneyString(money) | 351 rewardName = GetMoneyString(money) |
| 280 rewardType = REWARD_CASH | 352 rewardType = REWARD_CASH |
| 281 end | 353 end |
| 282 rewardStyle = self:GetTypeInfo(rewardType) | 354 |
| 283 | 355 print(' '..self.questID..':|cFFFFFF00SetRewardInfo():', rewardType) |
| 284 self.itemNumber = rewardCount or self.itemNumber | 356 self.itemNumber = tonumber(rewardCount or self.itemNumber) |
| 285 self.rewardType = rewardType or REWARD_ITEM | 357 self.rewardType = rewardType or REWARD_GEAR |
| 286 self.style = rewardStyle | |
| 287 self.quality = quality | 358 self.quality = quality |
| 288 | 359 |
| 289 -- title, faction, capped state | 360 self.itemTexture = rewardIcon or self.itemTexture |
| 290 local questTitle, factionID, capped = TQ_GetQuestInfoByQuestID(questID) | 361 self.itemName = rewardName or self.itemName |
| 291 self.factionID = factionID | |
| 292 self.capped = capped | |
| 293 | |
| 294 -- set tag details | |
| 295 local tagID, tagName, worldQuestType, rarity, isElite, tradeskillLineIndex = GetQuestTagInfo(questID); | |
| 296 local tagAtlas | |
| 297 if worldQuestType == LE_QUEST_TAG_TYPE_PET_BATTLE then | |
| 298 tagAtlas = "worldquest-icon-petbattle" | |
| 299 elseif worldQuestType == LE_QUEST_TAG_TYPE_PVP then | |
| 300 tagAtlas = "worldquest-icon-pvp-ffa" | |
| 301 elseif worldQuestType == LE_QUEST_TAG_TYPE_PROFESSION then | |
| 302 local id = tradeskillLineIndex and select(7, GetProfessionInfo(tradeskillLineIndex)) | |
| 303 if id then | |
| 304 tagAtlas = WORLD_QUEST_ICONS_BY_PROFESSION[id] | |
| 305 end | |
| 306 elseif worldQuestType == LE_QUEST_TAG_TYPE_DUNGEON then | |
| 307 tagAtlas = "worldquest-icon-dungeon" | |
| 308 end | |
| 309 | |
| 310 self.tagID = tagID | |
| 311 self.tagName = tagName | |
| 312 self.worldQuestType = worldQuestType | |
| 313 self.isElite = isElite | |
| 314 self.tradeskillLineIndex = tradeskillLineIndex | |
| 315 self.rarity = rarity | |
| 316 self.tagAtlas = tagAtlas | |
| 317 | 362 |
| 318 -- flag unresolved info | 363 -- flag unresolved info |
| 319 if not (rewardIcon and rewardName) then | 364 if not (rewardIcon and rewardName) then |
| 320 isPending = true | 365 self.isPending = true |
| 321 qprint('because not have icon') | 366 return true, nil |
| 322 TQ_RequestPreloadRewardData (questID) | |
| 323 --WorldPlan:print('|cFFFFFF00'..tostring(self.title)..'|r waiting on texture info') | 367 --WorldPlan:print('|cFFFFFF00'..tostring(self.title)..'|r waiting on texture info') |
| 324 else | 368 else |
| 325 if (rewardIcon and rewardName) and isPending then | 369 if (rewardIcon and rewardName) and self.isPending then |
| 326 --WorldPlan:print('|cFF00FF00'..tostring(self.title)..'|r has info', rewardIcon, rewardName) | 370 --WorldPlan:print('|cFF00FF00'..tostring(self.title)..'|r has info', rewardIcon, rewardName) |
| 327 hasUpdate = true | 371 self.isStale = true |
| 328 end | 372 end |
| 329 isPending = false | 373 self.isPending = nil |
| 330 end | 374 end |
| 331 | 375 |
| 332 self.title = questTitle or "|cFFFF0000Retrieving..." | 376 end |
| 333 self.itemTexture = rewardIcon or self.itemTexture | 377 return self.isStale, self.isPending |
| 334 self.itemName = rewardName or self.itemName | 378 |
| 335 self.isStale = hasUpdate | |
| 336 self.isPending = isPending | |
| 337 | |
| 338 | |
| 339 --qprint(' |cFF00FFFF'..questID..'|r hasUpdate:', hasUpdate, 'isPending:', isPending, 'isShown', self:IsShown()) | |
| 340 --qprint(' ', 'rewardType:', self.rewardType, 'tag:', self.tagID) | |
| 341 --qprint(' ', tostring(self.title), " |T"..tostring(self.itemTexture)..":12:12|t", tostring(self.itemName)) | |
| 342 end | |
| 343 self.cheevos = familiars[self.questID] | |
| 344 | |
| 345 return hasUpdate, isPending | |
| 346 end | |
| 347 | |
| 348 | |
| 349 function WorldPlanPOIMixin:SetAchievementProgressTooltip() | |
| 350 print('cheevos') | |
| 351 end | 379 end |
| 352 | 380 |
| 353 -- run from OnShow if .isNew is set | 381 -- run from OnShow if .isNew is set |
| 354 function WorldPlanPOIMixin:OnNew() | 382 function QuestPOI:OnNew() |
| 355 | 383 |
| 356 if not self.isAnimating then | 384 if not self.isAnimating then |
| 357 --qprint('|cFFFFFF00'.. self.title .. ' added to quest log.') | 385 --qprint('|cFFFFFF00'.. self.title .. ' added to quest log.') |
| 358 self:SetAlpha(0) | 386 self:SetAlpha(0) |
| 359 if WorldPlan.db.FadeWhileGrouped then | 387 if db.Config.FadeWhileGrouped then |
| 360 self.FadeIn.FadeIn:SetToAlpha(0.15) | 388 self.FadeIn.FadeIn:SetToAlpha(0.15) |
| 361 self.PendingFade.FadeIn:SetToAlpha(0.15) | 389 self.PendingFade.FadeIn:SetToAlpha(0.15) |
| 362 self.PendingFade.FadeOut:SetFromAlpha(0.15) | 390 self.PendingFade.FadeOut:SetFromAlpha(0.15) |
| 363 else | 391 else |
| 364 self.FadeIn.FadeIn:SetToAlpha(1) | 392 self.FadeIn.FadeIn:SetToAlpha(1) |
| 365 self.PendingFade.FadeIn:SetToAlpha(1) | 393 self.PendingFade.FadeIn:SetToAlpha(1) |
| 366 self.PendingFade.FadeOut:SetFromAlpha(1) | 394 self.PendingFade.FadeOut:SetFromAlpha(1) |
| 367 end | 395 end |
| 368 self.isAnimating = true | 396 self.isAnimating = true |
| 369 self.isNew = nil | 397 self.isNew = nil |
| 398 self.isStale = true | |
| 370 self.FadeIn:Play() | 399 self.FadeIn:Play() |
| 371 end | 400 end |
| 372 end | 401 end |
| 373 | 402 |
| 374 function WorldPlanPOIMixin:OnShow () | 403 function QuestPOI:OnShow () |
| 375 -- pop this on principle | 404 -- pop this on principle |
| 376 | 405 |
| 377 if self.isNew or self.isStale then | 406 if self.isNew or self.isStale then |
| 378 self:Refresh() | 407 self:Refresh() |
| 379 end | 408 end |
| 390 | 419 |
| 391 self.Overlay:SetShown(true) | 420 self.Overlay:SetShown(true) |
| 392 --WorldPlan:print(self:GetAlpha()) | 421 --WorldPlan:print(self:GetAlpha()) |
| 393 | 422 |
| 394 end | 423 end |
| 395 function WorldPlanPOIMixin:OnHide() | 424 function QuestPOI:OnHide() |
| 396 --qprint('|cFFFFFF00["'..tostring(self.title)..'"]|r:OnHide()') | 425 --qprint('|cFFFFFF00["'..tostring(self.title)..'"]|r:OnHide()') |
| 397 if not self:IsShown() then | 426 if not self:IsShown() then |
| 398 self.isAnimating = nil | 427 self.isAnimating = nil |
| 399 self:SetAlpha(1) | 428 self:SetAlpha(1) |
| 400 end | 429 end |
| 401 | 430 |
| 402 self.Overlay:SetShown(false) | 431 self.Overlay:SetShown(false) |
| 403 end | 432 end |
| 404 | 433 |
| 405 function WorldPlanPOIMixin:SetAnchor(frame, mapID, mapWidth, mapHeight) | 434 function QuestPOI:SetAnchor(frame, mapID, mapWidth, mapHeight) |
| 406 --qprint(' |cFF00FF00'..self:GetName()..':SetAnchor()|r', self.questID, mapID, mapWidth) | 435 qprint(' |cFF00FF00'..self:GetName()..':SetAnchor()|r', self.questID, mapID) |
| 407 self:ClearAllPoints() | 436 self:ClearAllPoints() |
| 408 local dX, dY = TQ_GetQuestLocation(self.questID) | 437 local dX, dY = TQ_GetQuestLocation(self.questID) |
| 409 if not dX or dX == 0 then | 438 if not dX or dX == 0 then |
| 410 local _, x, y = QuestPOIGetIconInfo(self.questID) | 439 local _, x, y = QuestPOIGetIconInfo(self.questID) |
| 411 if x and floor(x) ~= 0 then | 440 if x and floor(x) ~= 0 then |
| 412 dX, dY = x, y | 441 dX, dY = x, y |
| 413 else | 442 else |
| 414 dX, dY = self.x, self.y | 443 dX, dY = self.x, self.y |
| 415 end | 444 end |
| 416 end | 445 end |
| 446 local oX, oY = self.x, self.y | |
| 417 self.x = dX | 447 self.x = dX |
| 418 self.y = dY | 448 self.y = dY |
| 419 | 449 |
| 420 --qprint(' |cFF00FF00'..self.questID..':|r', format("%0.2f %0.2f", dX, dY)) | |
| 421 | 450 |
| 422 local pX = (dX * mapWidth) | 451 local pX = (dX * mapWidth) |
| 423 local pY = (-dY * mapHeight) | 452 local pY = (-dY * mapHeight) |
| 424 | 453 |
| 454 if oX ~= dX then | |
| 455 wqprint(' |cFF00FF00'..self.questID..':|r', oX, dX, format("%0.2f %0.2f", pX, pY)) | |
| 456 end | |
| 457 | |
| 425 self:SetParent(WorldMapPOIFrame) | 458 self:SetParent(WorldMapPOIFrame) |
| 426 self:SetPoint('CENTER', frame, 'TOPLEFT', pX, pY) | 459 self:SetPoint('CENTER', frame, 'TOPLEFT', pX, pY) |
| 427 end | 460 end |
| 428 | 461 |
| 429 | 462 function QuestPOI:OnLoad() |
| 430 function WorldPlanPOIMixin:OnLoad() | 463 qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config) |
| 431 qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',WorldPlan.db) | |
| 432 self:RegisterEvent('SUPER_TRACKED_QUEST_CHANGED') | 464 self:RegisterEvent('SUPER_TRACKED_QUEST_CHANGED') |
| 433 | 465 |
| 466 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r' | |
| 467 self.isPending = true | |
| 434 self.count = self.Overlay.count | 468 self.count = self.Overlay.count |
| 435 self.timeLabel = self.Overlay.timeLabel | 469 self.timeLabel = self.Overlay.timeLabel |
| 436 end | 470 self.updateRate = PIN_REQUEST_DELAY |
| 437 | 471 self.itemName = '|cFF0088FF' .. RETRIEVING_DATA..'|r' |
| 438 function WorldPlanPOIMixin:OnEvent(event, ...) | 472 end |
| 473 | |
| 474 function QuestPOI:OnEvent(event, ...) | |
| 439 if event == 'SUPER_TRACKED_QUEST_CHANGED' then | 475 if event == 'SUPER_TRACKED_QUEST_CHANGED' then |
| 440 self.isStale = true | 476 self.isStale = true |
| 441 end | 477 end |
| 442 end | 478 end |
| 443 | 479 |
| 444 | 480 function QuestPOI:OnUpdate (sinceLast) |
| 445 local PIN_UPDATE_DELAY = .016 | 481 -- control update check intervals |
| 446 local TOP_PIN_ID | 482 self.throttle = (self.throttle or self.updateRate) + sinceLast |
| 447 function WorldPlanPOIMixin:OnUpdate (sinceLast) | 483 if self.throttle >= self.updateRate then |
| 484 -- factor overtime into the throttle timer | |
| 485 self.throttle = self.throttle - self.updateRate | |
| 486 else | |
| 487 return | |
| 488 end | |
| 448 if self.isNew then | 489 if self.isNew then |
| 449 print('|cFFFFFF00push new poi stuff') | 490 print('|cFFFFFF00push new poi stuff') |
| 450 self:OnNew() | 491 self:OnNew() |
| 451 end | 492 elseif (self.isStale or (not self.title)) and not self.isAnimating then |
| 452 -- control update check intervals | |
| 453 self.throttle = (self.throttle or PIN_UPDATE_DELAY) - sinceLast | |
| 454 if self.throttle <= 0 then | |
| 455 -- factor overtime into the throttle timer | |
| 456 self.throttle = PIN_UPDATE_DELAY - self.throttle | |
| 457 else | |
| 458 return | |
| 459 end | |
| 460 if self.isStale and not self.isAnimating then | |
| 461 wprint('|cFFFFFF00push poi update') | 493 wprint('|cFFFFFF00push poi update') |
| 462 self:Refresh() | 494 self:Refresh() |
| 463 return | 495 return |
| 464 end | 496 end |
| 465 | 497 |
| 466 -- query for reward data if it wasn't found in the original scan | 498 -- query for reward data if it wasn't found in the original scan |
| 467 local questID = self.questID | 499 local questID = self.questID |
| 468 if self.isPending then | 500 if self.isPending then |
| 469 self:RefreshData() | 501 self:GetData() |
| 470 if not (self.PendingFade:IsPlaying() or self.isAnimating) then | 502 if not (self.PendingFade:IsPlaying() or self.isAnimating) then |
| 471 self.PendingFade:Play() | 503 self.PendingFade:Play() |
| 472 end | 504 end |
| 473 return | 505 return |
| 474 else | 506 else |
| 477 end | 509 end |
| 478 end | 510 end |
| 479 | 511 |
| 480 | 512 |
| 481 -- update time elements | 513 -- update time elements |
| 482 local tl = self.alertLevel | 514 if TQ_IsActive(self.questID) then |
| 483 local timeLeft = TQ_GetQuestTimeLeftMinutes(questID) | 515 |
| 484 if timeLeft > 0 then | 516 local tl = self.alertLevel |
| 485 local text, timeState = WorldPlan:GetTimeInfo(timeLeft, self.maxAlertLevel) | 517 local timeLeft = TQ_GetQuestTimeLeftMinutes(questID) |
| 486 if tl ~= timeState then | 518 if timeLeft > 0 then |
| 487 tl = timeState | 519 |
| 488 self.timeLabel:SetText(text) | 520 local text, timeState = WorldPlan:GetTimeInfo(timeLeft, self.maxAlertLevel) |
| 489 end | 521 if tl ~= timeState then |
| 490 else | 522 tl = timeState |
| 491 -- remove self in a timely manner | 523 self.timeLabel:SetText(text) |
| 492 if not TQ_IsActive(self.questID) then | 524 end |
| 493 print('|cFFFF4400'..self:GetName()..' pin hard timeout') | 525 else |
| 494 if self.worldQuestType ~= LE_QUEST_TAG_TYPE_PROFESSION then | 526 if self.worldQuestType ~= LE_QUEST_TAG_TYPE_PROFESSION then |
| 495 self:Hide() | 527 self:SetShown(false) |
| 496 end | 528 end |
| 497 end | 529 end |
| 498 end | 530 self.alertLevel = tl |
| 499 self.alertLevel = tl | 531 end |
| 500 | 532 self.timeLabel:SetShown(self.worldQuest and (self.maxAlertLevel >= 1)) |
| 501 if self:IsMouseOver() then | 533 end |
| 502 self.MouseGlow:Show() | 534 |
| 503 else | 535 |
| 504 self.MouseGlow:Hide() | 536 |
| 505 end | 537 function QuestPOI:Refresh () |
| 506 end | |
| 507 | |
| 508 | |
| 509 | |
| 510 function WorldPlanPOIMixin:Refresh () | |
| 511 local db = WorldPlan.db | |
| 512 print('|cFF00FF88'..self:GetName()..'|r:Refresh()') | 538 print('|cFF00FF88'..self:GetName()..'|r:Refresh()') |
| 513 | 539 |
| 514 | 540 local styleType = (self.isPending and STYLE_TYPE_PENDING) or self.rewardType |
| 541 local style,subStyle = self:GetTypeInfo(self.rewardType) | |
| 542 if self.filtered then | |
| 543 subStyle = style.minimized | |
| 544 end | |
| 545 self.style = style | |
| 546 self.subStyle = subStyle | |
| 547 --print(style, subStyle) | |
| 548 self.currentWidth = subStyle.iconWidth | |
| 549 self.borderWidth = subStyle.borderWidth | |
| 550 self.highlightWidth = subStyle.highlightWidth | |
| 551 self.tagSize = subStyle.TagSize | |
| 552 self.maxAlertLevel = subStyle.maxAlertLevel | |
| 553 self.NoIcon = subStyle.NoIcon | |
| 515 | 554 |
| 516 local questID = self:GetID() | 555 local questID = self:GetID() |
| 517 local iconBorder = self.RewardBorder | 556 local iconBorder = self.RewardBorder |
| 518 local trackingBorder = self.HighlightBorder | 557 local trackingBorder = self.HighlightBorder |
| 519 local icon = self.icon | 558 local icon = self.icon |
| 520 local count = self.count | 559 local count = self.count |
| 521 | |
| 522 | |
| 523 | |
| 524 | |
| 525 --WorldPlan:print(tostring(self.title), "|T"..tostring(self.itemTexture)..":16:16|t", tostring(self.itemName)) | 560 --WorldPlan:print(tostring(self.title), "|T"..tostring(self.itemTexture)..":16:16|t", tostring(self.itemName)) |
| 526 | |
| 527 | |
| 528 | 561 |
| 529 if self.itemName then | 562 if self.itemName then |
| 530 --wqprint('filtered:', self.filtered, 'showNumber:', self.showNumber) | 563 --wqprint('filtered:', self.filtered, 'showNumber:', self.showNumber) |
| 531 | 564 if self.itemNumber and self.itemNumber >= 1000 then |
| 532 self.count:SetText(self.itemNumber) | 565 local numeral = floor(self.itemNumber/1000) |
| 533 end | 566 local decimal = mod(self.itemNumber, 1000) |
| 567 local numberString = numeral | |
| 568 if decimal > 100 then | |
| 569 numberString = numberString .. '.' .. tostring(floor(decimal/100)) | |
| 570 end | |
| 571 numberString = numberString .. 'k' | |
| 572 self.count:SetText(numberString) | |
| 573 else | |
| 574 self.count:SetText(self.itemNumber) | |
| 575 end | |
| 576 | |
| 577 | |
| 578 end | |
| 579 icon:SetMask("Interface\\Minimap\\UI-Minimap-Background") | |
| 534 if self.itemTexture then | 580 if self.itemTexture then |
| 535 icon:SetTexture(self.itemTexture) | 581 iconBorder:SetTexture(WORLD_QUEST_BORDER) |
| 536 icon:SetMask("Interface\\Minimap\\UI-Minimap-Background") | 582 |
| 537 end | 583 if self.NoIcon then |
| 538 | 584 icon:SetTexture(PENDING_ICON) |
| 539 local border = self:GetTypeInfo(self.rewardType) | 585 icon:SetDesaturated(true) |
| 540 iconBorder:SetVertexColor(border.r, border.g, border.b, border.a) | 586 icon:SetVertexColor(style.r, style.g, style.b, style.a) |
| 587 else | |
| 588 | |
| 589 icon:SetTexture(self.itemTexture) | |
| 590 icon:SetDesaturated(false) | |
| 591 icon:SetVertexColor(1, 1, 1) | |
| 592 end | |
| 593 else | |
| 594 iconBorder:SetTexture(PENDING_BORDER) | |
| 595 icon:SetTexture(PENDING_ICON) | |
| 596 icon:SetDesaturated(true) | |
| 597 icon:SetVertexColor(style.r, style.g, style.b, style.a) | |
| 598 end | |
| 599 | |
| 600 local borderStyle = style | |
| 601 if self.rarity and WORLD_QUEST_QUALITY_COLORS[self.rarity] then | |
| 602 borderStyle = WORLD_QUEST_QUALITY_COLORS[self.rarity] | |
| 603 end | |
| 604 | |
| 605 iconBorder:SetVertexColor(borderStyle.r, borderStyle.g, borderStyle.b, 1) | |
| 541 iconBorder:SetDesaturated(true) | 606 iconBorder:SetDesaturated(true) |
| 542 | 607 iconBorder:SetAlpha(subStyle.alpha or 1) |
| 543 | 608 |
| 544 if questID == GetSuperTrackedQuestID() then | 609 if questID == GetSuperTrackedQuestID() then |
| 545 trackingBorder:SetVertexColor(0,0,0,1) | 610 trackingBorder:SetVertexColor(0,0,0,1) |
| 546 else | 611 else |
| 547 trackingBorder:SetVertexColor(0,0,0,0.5) | 612 trackingBorder:SetVertexColor(0,0,0,0.5) |
| 548 end | 613 end |
| 549 | 614 |
| 615 self.tagIcon:SetShown(self.tagSize and true or false) | |
| 550 self.tagIcon:SetAtlas(self.tagAtlas) | 616 self.tagIcon:SetAtlas(self.tagAtlas) |
| 551 self.tagIcon:SetTexCoord(0,1,0,1) | 617 self.tagIcon:SetAlpha(subStyle.alpha or 1) |
| 552 self.EliteBorder:SetShown(self.isElite and not self.filtered) | 618 self.EliteBorder:SetShown(self.isElite and not self.filtered) |
| 553 --qprint('|cFF88FF00updated', questID, self.title, self.rewardType, (style.showNumber and self.itemNumber) or '') | |
| 554 --print(' - subStyle:', (self.filtered == true), self.subStyle) | |
| 555 | |
| 556 self.Overlay:SetShown(self:IsShown()) | 619 self.Overlay:SetShown(self:IsShown()) |
| 557 self.Overlay:SetParent(self:GetParent()) | 620 self.Overlay:SetParent(self:GetParent()) |
| 558 self.Overlay:SetFrameLevel(self:GetFrameLevel()+200) | 621 self.Overlay:SetFrameLevel(self:GetFrameLevel()+200) |
| 559 self.Overlay:SetAllPoints(self) | 622 self.Overlay:SetAllPoints(self) |
| 560 | 623 |
| 561 | 624 |
| 562 self:UpdateSize() | 625 self:UpdateSize() |
| 563 | |
| 564 self.isStale = nil | 626 self.isStale = nil |
| 565 | |
| 566 end | 627 end |
| 567 | 628 |
| 568 local cvar_check = { | 629 local cvar_check = { |
| 569 [REWARD_CASH] = 'worldQuestFilterGold', | 630 [REWARD_CASH] = 'worldQuestFilterGold', |
| 570 [REWARD_ARTIFACT_POWER] = 'worldQuestFilterArtifactPower', | 631 [REWARD_ARTIFACT_POWER] = 'worldQuestFilterArtifactPower', |
| 572 [REWARD_REAGENT]= 'worldQuestFilterProfessionMaterials', | 633 [REWARD_REAGENT]= 'worldQuestFilterProfessionMaterials', |
| 573 [REWARD_GEAR] = 'worldQuestFilterEquipment', | 634 [REWARD_GEAR] = 'worldQuestFilterEquipment', |
| 574 } | 635 } |
| 575 | 636 |
| 576 | 637 |
| 638 function QuestPOI:IsFiltered () | |
| 639 for filterKey, value in pairs(db.UsedFilters) do | |
| 640 print('|cFFFF4400', filterKey, self[filterKey]) | |
| 641 if self[filterKey] ~= value then | |
| 642 return true | |
| 643 end | |
| 644 end | |
| 645 if self.rewardType and cvar_check[self.rewardType] then | |
| 646 if self.rewardType == REWARD_CASH then | |
| 647 print('##', cvar_check[self.rewardType], GetCVarBool(cvar_check[self.rewardType])) | |
| 648 end | |
| 649 if not GetCVarBool(cvar_check[self.rewardType]) then | |
| 650 return true | |
| 651 end | |
| 652 end | |
| 653 print(' '..self.questID..':|cFFFFFF00IsFiltered()|r') | |
| 654 end | |
| 655 | |
| 577 function QuestPOI:IsShowable () | 656 function QuestPOI:IsShowable () |
| 578 local print = qprint | 657 local print = qprint |
| 579 local db = WorldPlan.db | |
| 580 local qType = self.worldQuestType | 658 local qType = self.worldQuestType |
| 581 local rType = self.rewardType | 659 |
| 582 self.filtered = nil | 660 if not self.worldQuest then |
| 583 self.used = true | 661 print('ignoring showable check') |
| 584 | 662 return self.used, self.filtered |
| 585 for filterKey, value in pairs(WorldPlan.UsedFilters) do | 663 end |
| 586 print('|cFFFF4400', filterKey, self[filterKey]) | 664 self.used = TQ_IsActive(self.questID) |
| 587 if self[filterKey] ~= value then | 665 |
| 588 self.filtered = true | 666 if qType == LE_QUEST_TAG_TYPE_PROFESSION then |
| 589 end | 667 qprint('hide flags:', (not self.isKnownProfession), (db.Config.ShowAllProfessionQuests == false)) |
| 590 end | 668 if (not self.isKnownProfession) and (db.Config.ShowAllProfessionQuests == false) then |
| 591 | 669 qprint(self.used) |
| 592 self.questId = self:GetID() | |
| 593 if self.rewardType then | |
| 594 if cvar_check[self.rewardType] then | |
| 595 if self.rewardType == REWARD_CASH then | |
| 596 print('##', cvar_check[self.rewardType], GetCVarBool(cvar_check[self.rewardType])) | |
| 597 end | |
| 598 if not GetCVarBool(cvar_check[self.rewardType]) then | |
| 599 self.filtered = true | |
| 600 | |
| 601 end | |
| 602 | |
| 603 end | |
| 604 end | |
| 605 | |
| 606 if not TQ_IsActive(self.questID) then | |
| 607 self.used = nil | |
| 608 elseif qType == LE_QUEST_TAG_TYPE_PROFESSION then | |
| 609 if not (db.ShowAllProfessionQuests or (self.tradeskillLineIndex and GetProfessionInfo(self.tradeskillLineIndex))) then | |
| 610 self.used = nil | 670 self.used = nil |
| 611 end | 671 qprint(self.used) |
| 612 end | 672 end |
| 613 print(' |cFF'.. (((self.rewardType == REWARD_CASH) and 'FFFF00') or '0088FF') ..'IsShowable()|r ', cvar_check[self.rewardType], 'used:', self.used, 'filtered:', self.filtered, self.title) | 673 end |
| 614 return self.used, self.filtered | 674 print(' '..self.questID..':|cFFFFFF00IsShowable()|r ', self.used, self.title) |
| 675 return self.used | |
| 615 end | 676 end |
| 616 | 677 |
| 617 function QuestPOI:UpdateTimer (timeLeft, timeType) | 678 function QuestPOI:UpdateTimer (timeLeft, timeType) |
| 618 print('|cFF0088FFUpdatePinTimer()|r') | 679 print('|cFF0088FFUpdatePinTimer()|r') |
| 619 end | 680 end |
| 620 | 681 |
| 621 --- Fixes icons upon size update | 682 --- Fixes icons upon size update |
| 622 function QuestPOI:UpdateSize () | 683 function QuestPOI:UpdateSize () |
| 623 | 684 |
| 624 local style,subStyle = self:GetTypeInfo(self.rewardType) | 685 qprint('|cFF00FF88'..self:GetName()..'|r:UpdateSize()', self.style, self.subStyle) |
| 625 if self.filtered then | 686 |
| 626 subStyle = style.minimized | 687 local style = self.style |
| 627 end | 688 local subStyle = self.subStyle |
| 628 --qprint('|cFF00FF88'..self:GetName()..'|r:UpdateSize()', style, subStyle) | |
| 629 | |
| 630 local icon = self.icon | 689 local icon = self.icon |
| 631 local iconBorder = self.RewardBorder | 690 local iconBorder = self.RewardBorder |
| 632 local trackingBorder = self.HighlightBorder | 691 local trackingBorder = self.HighlightBorder |
| 633 local tag = self.tagIcon | 692 local tag = self.tagIcon |
| 634 | 693 |
| 636 local borderWidth = iconWidth + (subStyle.borderWidth * 2) | 695 local borderWidth = iconWidth + (subStyle.borderWidth * 2) |
| 637 local highlightWidth = borderWidth + (subStyle.highlightWidth * 2) | 696 local highlightWidth = borderWidth + (subStyle.highlightWidth * 2) |
| 638 | 697 |
| 639 local iconTexture = self.itemTexture | 698 local iconTexture = self.itemTexture |
| 640 | 699 |
| 700 self.tagIcon:SetSize(self.tagSize, self.tagSize) | |
| 641 self:SetSize(iconWidth, iconWidth) | 701 self:SetSize(iconWidth, iconWidth) |
| 642 icon:SetSize(iconWidth, iconWidth) | 702 icon:SetSize(iconWidth, iconWidth) |
| 643 iconBorder:SetSize(borderWidth, borderWidth) | 703 iconBorder:SetSize(borderWidth, borderWidth) |
| 644 trackingBorder:SetSize(highlightWidth, highlightWidth) | 704 trackingBorder:SetSize(highlightWidth, highlightWidth) |
| 645 | 705 |
| 656 end | 716 end |
| 657 end | 717 end |
| 658 | 718 |
| 659 self.count:SetShown((subStyle.showNumber and self.itemNumber) and style.hasNumeric) | 719 self.count:SetShown((subStyle.showNumber and self.itemNumber) and style.hasNumeric) |
| 660 | 720 |
| 661 --[[ | 721 |
| 662 if self.tagSize then | 722 end |
| 663 tag:Show() | |
| 664 tag:ClearAllPoints() | |
| 665 tag:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', borderWidth, -borderWidth) | |
| 666 else | |
| 667 tag:Hide() | |
| 668 end | |
| 669 | |
| 670 if self.NoIcon then | |
| 671 self.icon:Hide() | |
| 672 else | |
| 673 self.icon:Show() | |
| 674 if style.rewardMask then | |
| 675 icon:SetMask(rewardMask) | |
| 676 else | |
| 677 icon:SetMask(iconTexture) | |
| 678 end | |
| 679 if style.pinMask then | |
| 680 iconBorder:Show() | |
| 681 trackingBorder:Show() | |
| 682 iconBorder:SetMask(pinMask) | |
| 683 trackingBorder:SetMask(pinMask) | |
| 684 else | |
| 685 iconBorder:Hide() | |
| 686 trackingBorder:Hide() | |
| 687 end | |
| 688 end | |
| 689 | |
| 690 | |
| 691 icon:SetTexture(iconTexture) | |
| 692 iconBorder:SetTexture(iconBorder:GetTexture()) | |
| 693 trackingBorder:SetTexture(trackingBorder:GetTexture()) | |
| 694 --]] | |
| 695 self.currentWidth = subStyle.iconWidth | |
| 696 self.borderWidth = subStyle.borderWidth | |
| 697 self.highlightWidth = subStyle.highlightWidth | |
| 698 self.tagSize = subStyle.TagSize | |
| 699 self.maxAlertLevel = subStyle.maxAlertLevel | |
| 700 self.NoIcon = subStyle.NoIcon | |
| 701 self.style = style | |
| 702 self.subStyle = subStyle | |
| 703 if self.rewardType == REWARD_CASH then | |
| 704 qprint('using mask:', pinMask or iconTexture, rewardMask or iconTexture, self.used, self.filtered) | |
| 705 end | |
| 706 | |
| 707 end |
