annotate QuestPOI.lua @ 67:96183f981acb

Update for Legion Patch 7.2 - Pins for quests detected from the flight map should properly update as needed. - Fixed dropdown menu configurations not getting applied. - Added a toggle button to the world map display that performs the same function as the 'Enable' option in the dropdown menu. - Rewrote the majority of display update handlers for a significant performance improvements while interacting with the world map. - AP token info should now reflect artifact knowledge changes.
author Nenue
date Sat, 01 Apr 2017 08:17:30 -0400
parents e43e10c5576b
children 31de7e9e7849
rev   line source
Nenue@7 1 -- WorldPlan
Nenue@7 2 -- QuestPOI.lua
Nenue@7 3 -- Created: 10/1/2016 7:21 PM
Nenue@7 4 -- %file-revision%
Nenue@65 5 -- Big TODOs:
Nenue@65 6 -- -- generate frames using `WorldMap_GetOrCreateTaskPOI' to remove tainting issues
Nenue@7 7 --
Nenue@40 8 local _, db = ...
Nick@64 9 local TQ_GetQuestInfoByQuestID = C_TaskQuest.GetQuestInfoByQuestID
Nenue@7 10 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation
Nenue@7 11 local TQ_GetQuestTimeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes
Nenue@9 12 local TQ_IsActive = C_TaskQuest.IsActive
Nenue@29 13 local TQ_RequestPreloadRewardData = C_TaskQuest.RequestPreloadRewardData
Nenue@7 14 local QuestPOIGetIconInfo, WorldMapPOIFrame = QuestPOIGetIconInfo, WorldMapPOIFrame
Nenue@33 15 local WorldMap_DoesWorldQuestInfoPassFilters = WorldMap_DoesWorldQuestInfoPassFilters
Nenue@33 16 local QuestMapFrame_IsQuestWorldQuest = QuestMapFrame_IsQuestWorldQuest
Nenue@40 17 local GetAchievementNumCriteria, GetAchievementCriteriaInfo, GetAchievementInfo = GetAchievementNumCriteria, GetAchievementCriteriaInfo, GetAchievementInfo
Nick@64 18
Nick@64 19 local IsQuestFlaggedCompleted = IsQuestFlaggedCompleted
Nick@64 20 local GetFactionInfoByID, GetQuestObjectiveInfo = GetFactionInfoByID, GetQuestObjectiveInfo
Nick@64 21 local GetQuestTagInfo, GetProfessionInfo = GetQuestTagInfo, GetProfessionInfo
Nick@64 22 local GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData = GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData
Nick@64 23 local GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString = GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString
Nick@64 24 local SpellCanTargetQuest, GetCVarBool = SpellCanTargetQuest, GetCVarBool
Nick@64 25 local SetSuperTrackedQuestID = SetSuperTrackedQuestID
Nenue@65 26 local HaveQuestRewardData = HaveQuestRewardData
Nenue@65 27
Nick@64 28
Nenue@40 29 local pairs, ipairs, tinsert, unpack, select = pairs, ipairs, tinsert, unpack, select
Nenue@40 30 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID
Nenue@33 31 local GameTooltip = GameTooltip
Nenue@33 32 local GetItemIcon = GetItemIcon
Nenue@7 33
Nenue@67 34 local print = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop
Nenue@67 35 local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop
Nenue@67 36 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or nop
Nenue@67 37 local wqprint = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or nop
Nenue@67 38 local iprint = DEVIAN_WORKSPACE and function(...) _G.print('ItemScan', ...) end or nop
Nenue@67 39 local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or nop
Nenue@67 40 local dprint = DEVIAN_WORKSPACE and function(...) _G.print('WQData', ...) end or nop
Nenue@7 41 local QuestPOI = WorldPlanPOIMixin
Nenue@7 42
Nenue@56 43 local pinBaseIndex = 1300
Nenue@56 44 local overlayBaseIndex = 1350
Nenue@56 45 local previousHighlight
Nenue@40 46
Nenue@67 47 local DATA_DEBUG = false
Nenue@40 48 local PIN_REFRESH_DELAY = .5
Nenue@54 49 local PIN_REQUEST_DELAY = .1
Nenue@9 50 local ICON_UNKNOWN = "Interface\\ICONS\\inv_misc_questionmark"
Nenue@9 51 local ICON_MONEY = "Interface\\Buttons\\UI-GroupLoot-Coin-Up"
Nenue@9 52
Nenue@40 53 local WORLD_QUEST_BORDER = "Interface\\UNITPOWERBARALT\\Generic1Target_Circular_Frame"
Nenue@47 54 local PENDING_BORDER = "Interface\\BUTTONS\\YELLOWORANGE64"
Nenue@40 55 local PENDING_ICON = "Interface\\BUTTONS\\YELLOWORANGE64"
Nenue@9 56
Nenue@29 57 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD
Nenue@29 58 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER
Nenue@29 59 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT
Nenue@29 60 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES
Nenue@29 61 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS
Nenue@65 62 local REWARD_HONOR = WORLD_QUEST_REWARD_TYPE_FLAG_HONOR
Nenue@29 63
Nenue@29 64 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP
Nenue@29 65 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE
Nenue@29 66 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON
Nenue@29 67 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION
Nenue@29 68 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL
Nenue@29 69
Nenue@29 70 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP
Nenue@29 71 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE
Nenue@29 72 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON
Nenue@29 73 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION
Nenue@29 74 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL
Nenue@29 75
Nenue@66 76 local DEFAULT_STYLE = {
Nenue@66 77 border = {1,1,1},
Nenue@66 78 x = 0, y = 0,
Nenue@66 79 desaturated = true,
Nenue@66 80 iconMask = "Interface\\Minimap\\UI-Minimap-Background",
Nenue@66 81 borderMask = "Interface\\Minimap\\UI-Minimap-Background",
Nenue@66 82 rewardMark = "Interface\\Minimap\\UI-Minimap-Background",
Nenue@66 83 scaleFactors = {0.25, 0.7, 1},
Nenue@66 84 iconWidth = 18,
Nenue@66 85 borderWidth = 2,
Nenue@66 86 highlightWidth = 2,
Nenue@66 87 TagSize = 8,
Nenue@66 88 maxAlertLevel = 0,
Nenue@66 89 numberFontObject = 'WorldPlanFont'
Nenue@66 90 }
Nenue@66 91 local MINIMIZED_STYLE = {
Nenue@66 92 hideNumber = true,
Nenue@66 93 hideIcon = true,
Nenue@67 94 iconWidth = 3,
Nenue@66 95 }
Nenue@66 96 local REWARD_TYPE_STYLES = {
Nenue@66 97 [REWARD_CASH] = {
Nenue@66 98 border = {1,1,0},
Nenue@66 99 hideNumber = true,
Nenue@66 100 },
Nenue@66 101 [REWARD_ARTIFACT_POWER] = {},
Nenue@66 102 [REWARD_GEAR] = {
Nenue@66 103
Nenue@66 104 hideNumber = true,
Nenue@66 105 },
Nenue@66 106 [REWARD_CURRENCY] = {},
Nenue@66 107 [REWARD_REAGENT] = {
Nenue@66 108
Nenue@66 109 hideNumber = true,
Nenue@66 110 },
Nenue@66 111 }
Nenue@66 112
Nenue@65 113 local LE_ITEM_CLASS_WEAPON, LE_ITEM_CLASS_ARMOR, LE_ITEM_CLASS_GEM, LE_ITEM_GEM_ARTIFACTRELIC, LE_ITEM_CLASS_TRADEGOODS = LE_ITEM_CLASS_WEAPON, LE_ITEM_CLASS_ARMOR, LE_ITEM_CLASS_GEM, LE_ITEM_GEM_ARTIFACTRELIC, LE_ITEM_CLASS_TRADEGOODS
Nenue@65 114
Nenue@65 115
Nenue@40 116 local STYLE_TYPE_PENDING = 768
Nenue@40 117
Nenue@31 118
Nenue@29 119 -- Pin color/display variables
Nenue@40 120 db.TooltipExtras = db.TooltipExtras or {} -- idiot-proofing
Nenue@49 121 db.PinAlpha = 1
Nenue@29 122
Nenue@33 123 local familiars = {
Nenue@40 124 [42159] = 'Nightwatcher Merayl',
Nenue@40 125 [40277] = 'Tiffany Nelson',
Nenue@40 126 [40298] = 'Sir Galveston',
Nenue@40 127 [40282] = 'Grixis Tinypop',
Nenue@40 128 [40278] = 'Robert Craig',
Nenue@40 129 [48195] = 'Aulier',
Nenue@40 130 [41990] = 'Varenne',
Nenue@40 131 [41860] = 'Xorvasc',
Nenue@40 132 [40299] = 'Bodhi Sunwayver',
Nenue@40 133 [42442] = 'Amalia',
Nenue@40 134 [40280] = 'Bredda Tenderhide',
Nenue@40 135 [41687] = 'Odrogg',
Nenue@40 136 [41944] = 'Trapper Jarrun',
Nenue@40 137 [40337] = 'Master Tamer Flummox',
Nenue@40 138 [40279] = 'Durian Strongfruit'
Nenue@40 139 }
Nenue@40 140 local falcosaurs = {
Nenue@40 141 [44895] = {44881, 'Sharptalon Hatchling', 115786},
Nenue@40 142 [44894] = {44882, 'Bloodgazer Hatchling', 115787},
Nenue@40 143 [44893] = {44880, 'Direbeak Hatchling', 115785},
Nenue@40 144 [44892] = {44879, 'Snowfeather Hatchling', 115784},
Nenue@33 145 }
Nenue@33 146 local familiars_id = 9696
Nenue@40 147 for questID, name in pairs(familiars) do
Nenue@40 148 db.TooltipExtras[questID] = {{
Nenue@40 149 achievementID = familiars_id,
Nenue@40 150 name = name
Nenue@40 151 }}
Nenue@40 152 end
Nenue@40 153 for questID, info in pairs(falcosaurs) do
Nenue@40 154 local trackingQuestID, petName, petID = unpack(info)
Nenue@33 155
Nenue@40 156 db.TooltipExtras[questID] = {{
Nenue@40 157 questID = trackingQuestID,
Nenue@40 158 pet = petName,
Nenue@40 159 petID = petID
Nenue@40 160 }}
Nenue@9 161 end
Nenue@7 162
Nenue@40 163 local GetAchievementTooltipExtras = function(info)
Nenue@29 164
Nenue@40 165 local hasInfo
Nenue@40 166 local achievementID = info.achievementID
Nenue@40 167 local _, name, _, completed, _, _, _, _, _, icon = GetAchievementInfo(achievementID)
Nenue@40 168 if not completed then
Nenue@40 169
Nenue@40 170 local numItems = GetAchievementNumCriteria(achievementID)
Nenue@40 171 local numNeeded = 0
Nenue@40 172 local tooltipLines = {}
Nenue@40 173 for i =1, numItems do
Nenue@40 174 local criteriaName, criteriaType, completed, _, _, _, _, subAchievementID = GetAchievementCriteriaInfo(achievementID, i)
Nenue@49 175 --print(GetAchievementCriteriaInfo(achievementID, i))
Nenue@40 176
Nenue@40 177 if not completed then
Nenue@49 178 --print('::', criteriaName, completed, subAchievementID)
Nenue@40 179 if criteriaType == 8 then
Nenue@40 180 local _, _, _, completed, _, _, _, _, _, subIcon = GetAchievementInfo(subAchievementID)
Nenue@49 181 --print(' -', criteriaName, completed, subIcon)
Nenue@40 182 if not completed then
Nenue@40 183 local numCompleted = 0
Nenue@40 184 local numSubItems = GetAchievementNumCriteria(subAchievementID)
Nenue@40 185 local subCriteriaLine
Nenue@40 186 for j = 1, numSubItems do
Nenue@40 187 local subName, _, completed = GetAchievementCriteriaInfo(subAchievementID, j)
Nenue@40 188
Nenue@49 189 --print(' -',subName, completed)
Nenue@40 190 if completed then
Nenue@40 191 numCompleted = numCompleted + 1
Nenue@40 192 else
Nenue@40 193 numNeeded = numNeeded + 1
Nenue@40 194 if subName:match(info.name) then
Nenue@40 195 hasInfo = true
Nenue@40 196 subCriteriaLine = ' |T'..subIcon..':16:16|t ' .. criteriaName
Nenue@40 197 end
Nenue@40 198 end
Nenue@40 199
Nenue@40 200 end
Nenue@40 201 if subCriteriaLine then
Nenue@40 202 tinsert(tooltipLines, subCriteriaLine .. ' ('..numCompleted..'/'..numSubItems..')')
Nenue@40 203 end
Nenue@40 204 end
Nenue@40 205 elseif criteriaName:match(info.name) and (not completed) then
Nenue@40 206 numNeeded = numNeeded + 1
Nenue@40 207 tinsert(tooltipLines, criteriaName)
Nenue@40 208 end
Nenue@40 209 end
Nenue@40 210 end
Nenue@49 211 if hasInfo then
Nenue@49 212 WorldMapTooltip:AddLine(" ")
Nenue@49 213 WorldMapTooltip:AddLine("Achievements:")
Nenue@49 214 WorldMapTooltip:AddLine(' |T'..icon..':20:20|t '..name)
Nenue@40 215 for i, line in ipairs(tooltipLines) do
Nenue@40 216 WorldMapTooltip:AddLine(line)
Nenue@40 217 end
Nenue@40 218 end
Nenue@40 219 end
Nenue@40 220 return hasInfo
Nenue@40 221 end
Nenue@40 222
Nenue@40 223 local GetQuestTooltipExtras = function(info)
Nenue@40 224 local questID = info.questID
Nenue@40 225 local hasInfo
Nenue@40 226
Nenue@40 227 if info.pet then
Nenue@40 228 local index, guid = C_PetJournal.FindPetIDByName(info.pet)
Nenue@40 229 if not index then
Nenue@40 230 hasInfo = true
Nenue@40 231 WorldMapTooltip:AddLine('Pets:')
Nenue@40 232 WorldMapTooltip:AddLine(' - ' .. info.petName)
Nenue@40 233
Nenue@40 234 if not IsQuestFlaggedCompleted(questID) then
Nenue@40 235 WorldMapTooltip:AddLine(' Required Quest Flags', 1, 1, 0)
Nenue@40 236 else
Nenue@40 237 WorldMapTooltip:AddLine(' Quest Flags Complete!', 0, 1, 0)
Nenue@40 238 end
Nenue@40 239
Nenue@40 240 end
Nenue@29 241 end
Nenue@29 242
Nenue@29 243 end
Nenue@29 244
Nenue@40 245
Nenue@40 246 function QuestPOI:OnEnter()
Nenue@57 247 if self.filtered and (self.questID ~= GetSuperTrackedQuestID()) then
Nenue@49 248 return
Nenue@7 249 end
Nenue@57 250 WorldMap_HijackTooltip(self.owningFrame);
Nenue@56 251 self:SetFrameLevel(pinBaseIndex+100)
Nenue@56 252 self.Overlay:SetFrameLevel(pinBaseIndex+101)
Nenue@56 253
Nenue@56 254 if previousHighlight then
Nenue@56 255 previousHighlight:SetFrameLevel(pinBaseIndex+previousHighlight:GetID())
Nenue@56 256 previousHighlight.Overlay:SetFrameLevel(overlayBaseIndex+previousHighlight:GetID())
Nenue@56 257 end
Nenue@56 258
Nenue@56 259 previousHighlight = self
Nenue@56 260
Nenue@56 261
Nenue@40 262 WorldMapTooltip:SetOwner(self, "ANCHOR_RIGHT");
Nenue@49 263 --print('doing tooltip stuff')
Nenue@40 264
Nenue@40 265 -- Can't add stuff after, so most of the blizzard tooltip hook is simply copied over
Nenue@40 266 local questID = self.questID
Nenue@40 267 local color = WORLD_QUEST_QUALITY_COLORS[self.rarity] or NORMAL_FONT_COLOR;
Nenue@40 268
Nenue@40 269
Nenue@40 270 WorldMapTooltip:SetText(self.title, color.r, color.g, color.b);
Nenue@40 271 QuestUtils_AddQuestTypeToTooltip(WorldMapTooltip, questID, NORMAL_FONT_COLOR);
Nenue@40 272
Nenue@40 273 if ( self.factionID ) then
Nenue@40 274 local factionName = GetFactionInfoByID(self.factionID);
Nenue@40 275 if ( factionName ) then
Nenue@40 276 if (self.capped) then
Nenue@40 277 WorldMapTooltip:AddLine(factionName, GRAY_FONT_COLOR:GetRGB());
Nenue@40 278 else
Nenue@40 279 WorldMapTooltip:AddLine(factionName);
Nenue@40 280 end
Nenue@40 281 end
Nenue@40 282 end
Nenue@40 283
Nenue@40 284 if self.worldQuest then
Nenue@40 285 WorldMap_AddQuestTimeToTooltip(questID);
Nenue@40 286 end
Nenue@40 287
Nenue@40 288
Nenue@40 289 for objectiveIndex = 1, self.numObjectives do
Nenue@40 290 local objectiveText, objectiveType, finished = GetQuestObjectiveInfo(questID, objectiveIndex, false);
Nenue@40 291 if ( objectiveText and #objectiveText > 0 ) then
Nenue@40 292 local color = finished and GRAY_FONT_COLOR or HIGHLIGHT_FONT_COLOR;
Nenue@40 293 WorldMapTooltip:AddLine(QUEST_DASH .. objectiveText, color.r, color.g, color.b, true);
Nenue@40 294 end
Nenue@40 295 end
Nenue@40 296
Nenue@40 297 local percent = C_TaskQuest.GetQuestProgressBarInfo(self.questID);
Nenue@40 298 if ( percent ) then
Nenue@40 299 GameTooltip_InsertFrame(WorldMapTooltip, WorldMapTaskTooltipStatusBar);
Nenue@40 300 WorldMapTaskTooltipStatusBar.Bar:SetValue(percent);
Nenue@40 301 WorldMapTaskTooltipStatusBar.Bar.Label:SetFormattedText(PERCENTAGE_STRING, percent);
Nenue@40 302 end
Nenue@40 303
Nenue@40 304 if db.TooltipExtras[self.questID] then
Nenue@40 305 for index, info in pairs(db.TooltipExtras[questID]) do
Nenue@40 306 if info.achievementID then
Nenue@40 307 GetAchievementTooltipExtras(info)
Nenue@40 308 end
Nenue@40 309 if info.questID then
Nenue@40 310 GetQuestTooltipExtras(info)
Nenue@40 311 end
Nenue@40 312 end
Nenue@40 313 end
Nenue@65 314 GameTooltip_AddQuestRewardsToTooltip(WorldMapTooltip, questID)
Nenue@40 315
Nenue@40 316 WorldMapTooltip:Show()
Nenue@40 317 --WorldMapTooltip.recalculatePadding = true;
Nenue@40 318 --print(WorldMapTooltip:GetParent())
Nenue@40 319 --print(WorldMapTooltip:IsVisible())
Nenue@7 320 end
Nenue@40 321 function QuestPOI:OnLeave()
Nenue@57 322 if self.filtered and (self.questID ~= GetSuperTrackedQuestID()) then
Nenue@57 323 return
Nenue@57 324 end
Nenue@35 325 WorldMap_RestoreTooltip()
Nenue@40 326 WorldMapTooltip:Hide();
Nenue@7 327 end
Nenue@7 328
Nenue@40 329 -- attempt to pull pin data
Nenue@40 330 function QuestPOI:GetData ()
Nenue@49 331 dprint('|cFF00FF88'..self:GetID()..':GetData()|r')
Nenue@40 332 local questID = self.questID
Nenue@40 333 if not questID then
Nenue@49 334 dprint('|cFFFF4400bad pin|r', self:GetName())
Nenue@40 335 return nil
Nenue@29 336 end
Nenue@29 337
Nenue@40 338 local questTitle, factionID, capped = TQ_GetQuestInfoByQuestID(questID)
Nenue@40 339 -- if the title is nil, then wait and try later
Nenue@40 340 if not questTitle then
Nenue@65 341 dprint('|cFFBB8844dataLoaded|r = false|cFF00FFFF', self.questId)
Nenue@65 342 return false
Nenue@40 343 else
Nenue@40 344 self.title, self.factionID, self.capped = questTitle, factionID, capped
Nenue@65 345 dprint(questTitle, factionID, capped)
Nenue@40 346 -- set tag details
Nenue@40 347 local worldQuestType
Nenue@40 348 self.tagID, self.tagName, worldQuestType, self.rarity, self.isElite, self.tradeskillLineIndex = GetQuestTagInfo(questID);
Nenue@40 349 local tagAtlas
Nenue@40 350 if worldQuestType == LE_QUEST_TAG_TYPE_PET_BATTLE then
Nenue@40 351 tagAtlas = "worldquest-icon-petbattle"
Nenue@40 352 elseif worldQuestType == LE_QUEST_TAG_TYPE_PVP then
Nenue@40 353 tagAtlas = "worldquest-icon-pvp-ffa"
Nenue@40 354 elseif worldQuestType == LE_QUEST_TAG_TYPE_PROFESSION then
Nenue@40 355 self.isKnownProfession = nil
Nenue@40 356 local id = self.tradeskillLineIndex and select(7, GetProfessionInfo(self.tradeskillLineIndex))
Nenue@40 357 if id then
Nenue@40 358 self.isKnownProfession = true
Nenue@40 359 qprint('profession' , self.title, id)
Nenue@40 360 tagAtlas = WORLD_QUEST_ICONS_BY_PROFESSION[id]
Nenue@40 361 end
Nenue@40 362 elseif worldQuestType == LE_QUEST_TAG_TYPE_DUNGEON then
Nenue@40 363 tagAtlas = "worldquest-icon-dungeon"
Nenue@40 364 end
Nenue@40 365 self.worldQuestType = worldQuestType
Nenue@40 366 self.tagAtlas = tagAtlas
Nenue@29 367
Nenue@65 368 local dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality = self:UpdateRewards()
Nenue@65 369 dprint('|cFFBB8844 dataLoaded|r =', dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality)
Nenue@65 370 if dataLoaded then
Nenue@65 371 self.rewardType = rewardType
Nenue@65 372 self.itemName = itemName
Nenue@65 373 self.itemTexture = itemTexture
Nenue@65 374 self.itemNumber = itemNumber
Nenue@65 375 self.itemQuality = quality
Nenue@49 376 self.dataLoaded = true
Nenue@48 377 self.isStale = true
Nenue@40 378 end
Nenue@40 379 end
Nenue@40 380
Nenue@40 381
Nenue@65 382 return self.dataLoaded
Nenue@40 383 end
Nenue@40 384
Nenue@65 385 --- Returns true if data has changed (either from loading in or qualifications changed)
Nenue@65 386 function QuestPOI:UpdateRewards()
Nenue@40 387 local questID = self.questID
Nenue@65 388 if not HaveQuestRewardData(questID) then
Nenue@65 389 C_TaskQuest.RequestPreloadRewardData(questID);
Nenue@65 390 return false;
Nenue@29 391 else
Nenue@65 392 local rewardMoney, rewardAP, rewardHonor
Nenue@65 393 local rewardItems, rewardCurrency = {}, {}
Nenue@65 394 local rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality
Nenue@65 395 local xpIcon, xpName, xpCount, xpType
Nenue@29 396
Nenue@65 397 if (GetNumQuestLogRewardCurrencies(questID) > 0 or GetNumQuestLogRewards(questID) > 0 or GetQuestLogRewardMoney(questID) > 0 or GetQuestLogRewardArtifactXP(questID) > 0 or GetQuestLogRewardHonor(questID)) then
Nenue@65 398 local money = GetQuestLogRewardMoney(questID)
Nenue@65 399 if money > 0 then
Nenue@65 400 rewardMoney = money
Nenue@65 401 rewardIcon = ICON_MONEY
Nenue@65 402 rewardName = GetMoneyString(money)
Nenue@65 403 rewardCount = floor(money/10000)
Nenue@65 404 rewardType = REWARD_CASH
Nenue@65 405 end
Nenue@65 406
Nenue@65 407 local artifactXP = GetQuestLogRewardArtifactXP(questID);
Nenue@65 408 if artifactXP > 0 then
Nenue@65 409 rewardAP = artifactXP
Nenue@65 410 rewardIcon = "Interface\\ICONS\\inv_7xp_inscription_talenttome01"
Nenue@65 411 rewardCount = artifactXP
Nenue@65 412 rewardType = REWARD_ARTIFACT_POWER
Nenue@65 413 qprint(' artifactXP', artifactXP)
Nenue@65 414 end
Nenue@65 415
Nenue@65 416 local numQuestCurrencies = GetNumQuestLogRewardCurrencies(questID);
Nenue@65 417 for i = 1, numQuestCurrencies do
Nenue@65 418 local name, texture, numItems = GetQuestLogRewardCurrencyInfo(i, questID);
Nenue@65 419 local text = BONUS_OBJECTIVE_REWARD_WITH_COUNT_FORMAT:format(texture, numItems, name);
Nenue@65 420 tinsert(rewardCurrency, {
Nenue@65 421 name = name,
Nenue@65 422 texture = texture,
Nenue@65 423 numItems = numItems,
Nenue@65 424 text = text
Nenue@65 425 })
Nenue@65 426 qprint(' currency', i, name, " |T"..tostring(texture)..":12:12|t")
Nenue@65 427 rewardIcon = texture
Nenue@65 428 rewardCount = numItems
Nenue@65 429 rewardName = name
Nenue@65 430 rewardType = REWARD_CURRENCY
Nenue@65 431 end
Nenue@65 432 local honorAmount = GetQuestLogRewardHonor(questID);
Nenue@65 433 if honorAmount > 0 then
Nenue@65 434 xpIcon = "Interface\\ICONS\\Achievement_LegionPVPTier4"
Nenue@65 435 xpCount = honorAmount
Nenue@65 436 xpName = HONOR
Nenue@65 437 xpType = HONOR_CURRENCY
Nenue@65 438 end
Nenue@65 439
Nenue@65 440 local numQuestRewards = GetNumQuestLogRewards(questID);
Nenue@65 441 if numQuestRewards > 0 then
Nenue@65 442 local foundPrimary
Nenue@65 443 for i = 1, numQuestRewards do
Nenue@65 444 local name, texture, numItems, quality, isUsable, itemID = GetQuestLogRewardInfo(i, questID)
Nenue@65 445
Nenue@65 446 if itemID then
Nenue@65 447 local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemTexture, sellPrice, classID, subclassID = GetItemInfo(itemID);
Nenue@65 448
Nenue@65 449
Nenue@65 450 if ( classID == LE_ITEM_CLASS_WEAPON or classID == LE_ITEM_CLASS_ARMOR or (classID == LE_ITEM_CLASS_GEM and subclassID == LE_ITEM_GEM_ARTIFACTRELIC) ) then
Nenue@65 451 rewardType = REWARD_GEAR
Nenue@65 452 rewardIcon = texture
Nenue@65 453 rewardName = name
Nenue@65 454 rewardCount = numItems
Nenue@65 455 foundPrimary = true
Nenue@65 456 elseif IsArtifactPowerItem(itemID) then
Nenue@65 457 rewardType = REWARD_ARTIFACT_POWER
Nenue@65 458 rewardIcon = texture
Nenue@65 459 rewardName = name
Nenue@65 460 rewardCount = 1
Nenue@65 461 foundPrimary = true
Nenue@65 462
Nenue@65 463 WorldPlanTooltip:SetOwner(self, 'ANCHOR_NONE')
Nenue@65 464 WorldPlanTooltip:SetHyperlink(itemLink)
Nenue@65 465 for i = 1, WorldPlanTooltip:NumLines() do
Nenue@65 466 local line = _G['WorldPlanTooltipTextLeft' .. i]
Nenue@65 467 local text = line and line:GetText()
Nenue@65 468 local ap = text and text:gsub(',', ''):match('(%d+) '..ARTIFACT_POWER)
Nenue@65 469 if ap then
Nenue@65 470 rewardCount = tonumber(ap)
Nenue@65 471 print(ap)
Nenue@65 472 end
Nenue@65 473
Nenue@65 474 end
Nenue@65 475
Nenue@65 476 if WorldPlanTooltipTextLeft2 then
Nenue@65 477 local text = WorldPlanTooltipTextLeft2:GetText()
Nenue@65 478 end
Nenue@65 479
Nenue@65 480 print('is an AP token')
Nenue@65 481 elseif classID == LE_ITEM_CLASS_TRADEGOODS then
Nenue@65 482 rewardType = REWARD_REAGENT
Nenue@65 483 rewardIcon = texture
Nenue@65 484 rewardName = name
Nenue@65 485 rewardCount = numItems
Nenue@65 486 foundPrimary = true
Nenue@65 487 end
Nenue@65 488
Nenue@65 489
Nenue@65 490 qprint(' reward', i, name, " |T"..tostring(texture)..":12:12|t", quality, isUsable, itemID)
Nenue@65 491 tinsert(rewardItems, {
Nenue@65 492 name = name,
Nenue@65 493 texture = texture,
Nenue@65 494 numItems = numItems,
Nenue@65 495 quality = quality,
Nenue@65 496 isUsable = isUsable
Nenue@65 497 })
Nenue@65 498 if not foundPrimary then
Nenue@65 499 rewardType = REWARD_GEAR
Nenue@65 500
Nenue@65 501 rewardIcon = texture
Nenue@65 502 rewardName = name
Nenue@65 503 rewardCount = numItems
Nenue@65 504 end
Nenue@65 505
Nenue@65 506 end
Nenue@65 507
Nenue@65 508 end
Nenue@65 509 end
Nenue@65 510
Nenue@65 511 qprint(' '..self.questID..':|cFFFFFF00SetRewardInfo():', numQuestRewards, rewardType)
Nenue@65 512 qprint(' ', tostring(self.title), " |T"..tostring(self.itemTexture)..":12:12|t", tostring(self.itemName))
Nenue@65 513
Nenue@65 514 if (self.itemNumber ~= rewardCount) or (self.rewardType ~= rewardType) or (self.itemName ~= rewardName) or (self.itemTexture ~= rewardIcon) then
Nenue@67 515 if DATA_DEBUG and (self.debugTimer <= 0) then
Nenue@67 516 return false
Nenue@67 517 end
Nenue@67 518
Nenue@65 519 return true, rewardType, rewardName, rewardIcon, rewardCount, quality
Nenue@67 520
Nenue@65 521 else
Nenue@65 522 return false
Nenue@65 523 end
Nenue@65 524 end
Nenue@65 525
Nenue@65 526
Nenue@65 527
Nenue@65 528 --[[ set reward category
Nenue@29 529 local numRewards = GetNumQuestLogRewards(questID)
Nenue@29 530 local numCurrency = GetNumQuestLogRewardCurrencies(questID)
Nenue@29 531 local money = GetQuestLogRewardMoney(questID)
Nenue@29 532 if numRewards >= 1 then
Nenue@40 533 rewardType, rewardIcon, rewardCount, rewardName, itemID, quality = WorldPlanQuests:GetRewardHeader(questID)
Nenue@29 534 elseif numCurrency >= 1 then
Nenue@29 535 rewardName, rewardIcon, rewardCount = GetQuestLogRewardCurrencyInfo(1, questID)
Nenue@29 536 rewardType = REWARD_CURRENCY
Nenue@29 537 elseif money >= 1 then
Nenue@29 538 rewardName = GetMoneyString(money)
Nenue@29 539 end
Nenue@65 540 --]]
Nenue@29 541
Nenue@40 542 end
Nenue@7 543 end
Nenue@7 544
Nenue@34 545 -- run from OnShow if .isNew is set
Nenue@34 546
Nenue@49 547 function QuestPOI:StartFade()
Nenue@34 548 if not self.isAnimating then
Nenue@35 549 --qprint('|cFFFFFF00'.. self.title .. ' added to quest log.')
Nenue@35 550 self:SetAlpha(0)
Nenue@49 551 self.FadeIn.FadeIn:SetToAlpha(db.PinAlpha)
Nenue@49 552 self.PendingFade.FadeIn:SetToAlpha(db.PinAlpha)
Nenue@49 553 self.PendingFade.FadeOut:SetFromAlpha(db.PinAlpha)
Nenue@49 554
Nenue@34 555 self.isAnimating = true
Nenue@35 556 self.isNew = nil
Nenue@40 557 self.isStale = true
Nenue@35 558 self.FadeIn:Play()
Nenue@34 559 end
Nenue@7 560 end
Nenue@7 561
Nenue@49 562 function QuestPOI:EndFade()
Nenue@49 563 self.isAnimating = nil
Nenue@49 564 self:SetAlpha(db.PinAlpha)
Nenue@49 565 end
Nenue@49 566
Nenue@40 567 function QuestPOI:OnShow ()
Nenue@27 568
Nenue@49 569 if self.isStale then
Nenue@49 570 qprint('|cFF0088FFflagged for refresh')
Nenue@48 571 self:Refresh()
Nenue@48 572 end
Nenue@34 573
Nenue@67 574 if self.isNew then
Nenue@67 575 qprint('|cFFFFFF00popping new pin handler')
Nenue@49 576 self:StartFade()
Nenue@49 577 end
Nenue@49 578
Nenue@54 579 if not self.isAnimating then
Nenue@57 580 self:SetAlpha(db.PinAlpha) -- fix stuck alpha
Nenue@54 581 end
Nenue@59 582
Nick@62 583 self:ShowFrames()
Nenue@27 584 end
Nick@62 585
Nenue@40 586 function QuestPOI:OnHide()
Nick@60 587 --DEFAULT_CHAT_FRAME:AddMessage('|cFFFFFF00'..self:GetName()..'|r:OnHide()')
Nick@62 588 self:HideFrames()
Nenue@59 589 -- reset flags
Nenue@59 590 self:SetAlpha(db.PinAlpha)
Nenue@49 591 self.isAnimating = nil
Nenue@27 592 end
Nenue@27 593
Nenue@67 594 -- Applies position and sizing parameters to the pin data
Nenue@66 595 function QuestPOI:SetAnchor(owner, dX, dY, mapWidth, mapHeight, scaleFactor)
Nenue@67 596 dprint(self:GetName()..':SetAnchor()', owner, dX, dY, scaleFactor, self.filtered, self.used)
Nick@62 597 if not self.used then
Nick@62 598 self:HideFrames()
Nick@62 599 return
Nick@62 600 end
Nick@62 601
Nenue@67 602 if owner then
Nenue@67 603 local prevOwner = self:GetParent()
Nenue@67 604 if prevOwner ~= owner then
Nenue@67 605 self.isStale = true
Nenue@67 606 end
Nenue@67 607 self:SetParent(owner)
Nenue@67 608 self.Overlay:SetParent(owner)
Nenue@67 609 else
Nenue@67 610 owner = self:GetParent()
Nenue@67 611 end
Nenue@67 612
Nenue@49 613 self:ClearAllPoints()
Nenue@56 614 self:SetFrameLevel(pinBaseIndex + self:GetID())
Nenue@53 615 self.Overlay:SetFrameLevel(overlayBaseIndex + self:GetID())
Nenue@67 616
Nenue@67 617 local scaleChanged
Nenue@67 618 if scaleFactor and (self.scaleFactor ~= scaleFactor) then
Nenue@67 619 print('scaleFactor')
Nenue@67 620 self:SetScale(scaleFactor)
Nenue@67 621 self.Overlay:SetScale(scaleFactor)
Nenue@67 622 self.scaleFactor = scaleFactor
Nenue@67 623 scaleChanged = true
Nenue@67 624 end
Nenue@67 625
Nenue@53 626 if (dX and dY) then
Nenue@53 627 if not (mapHeight and mapWidth) then
Nenue@53 628 mapWidth, mapHeight = owner:GetSize()
Nenue@67 629 end
Nenue@67 630
Nenue@67 631 if (self.x ~= dY) or (self.y ~= dY) or scaleChanged then
Nenue@65 632 self.x = dX
Nenue@65 633 self.y = dY
Nenue@66 634 local pX = (dX * mapWidth) * (1 / scaleFactor)
Nenue@66 635 local pY = (-dY * mapHeight) * (1 / scaleFactor)
Nenue@65 636 self:SetPoint('CENTER', owner, 'TOPLEFT', pX, pY)
Nenue@65 637 end
Nenue@53 638 end
Nick@62 639
Nick@62 640 end
Nick@62 641
Nick@64 642 -- Show/Hide the text overlays associated with the quest pin; they aren't hierarchically linked
Nick@62 643 function QuestPOI:ShowFrames()
Nick@62 644 if not self:IsShown() then
Nick@62 645 print('|cFFFFFF00' ..self:GetName()..':ShowFrames()')
Nick@64 646 -- do not SetShown() here
Nick@64 647 end
Nick@62 648
Nick@62 649 self.count:SetShown(true)
Nick@62 650 self.Overlay:SetShown(true)
Nick@62 651 self.count:SetShown(true)
Nick@62 652 self.timeLabel:SetShown(true)
Nick@62 653 end
Nick@62 654
Nick@62 655 function QuestPOI:HideFrames()
Nick@62 656 if self:IsShown() then
Nick@62 657 print(self:GetName()..':HideFrames()')
Nick@62 658 self:SetShown(false)
Nick@62 659 end
Nick@62 660 self.count:SetShown(false)
Nick@62 661 self.Overlay:SetShown(false)
Nick@62 662 self.count:SetShown(false)
Nick@62 663 self.timeLabel:SetShown(false)
Nick@62 664 self.used = nil
Nenue@7 665 end
Nenue@7 666
Nenue@40 667 function QuestPOI:OnLoad()
Nenue@40 668 qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config)
Nenue@67 669 self.debugTimer = 4
Nenue@40 670 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r'
Nenue@40 671 self.isPending = true
Nenue@36 672 self.count = self.Overlay.count
Nick@62 673 self.timeLabel = self.Overlay.timeLabel
Nenue@54 674 self.Description = self.Overlay.Description
Nenue@40 675 self.updateRate = PIN_REQUEST_DELAY
Nenue@40 676 self.itemName = '|cFF0088FF' .. RETRIEVING_DATA..'|r'
Nenue@41 677
Nenue@53 678 self.Overlay:SetPoint('TOPLEFT', self, 'TOPLEFT', 0, 4)
Nenue@53 679 self.Overlay:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', 0, -4)
Nenue@7 680 end
Nick@64 681
Nenue@57 682 function QuestPOI:OnMouseDown(button)
Nenue@57 683 if button == 'RightButton' then
Nenue@57 684 SetSuperTrackedQuestID(nil)
Nenue@57 685 else
Nenue@57 686 TaskPOI_OnClick(self, button)
Nenue@57 687 end
Nenue@57 688 end
Nenue@57 689
Nenue@7 690
Nenue@40 691 function QuestPOI:OnUpdate (sinceLast)
Nenue@40 692 -- control update check intervals
Nenue@67 693
Nenue@67 694
Nenue@40 695 self.throttle = (self.throttle or self.updateRate) + sinceLast
Nenue@40 696 if self.throttle >= self.updateRate then
Nenue@40 697 -- factor overtime into the throttle timer
Nenue@40 698 self.throttle = self.throttle - self.updateRate
Nenue@40 699 else
Nenue@40 700 return
Nenue@40 701 end
Nenue@67 702 --@debug@
Nenue@67 703 if DATA_DEBUG then
Nenue@67 704 self.debugTimer = self.debugTimer - sinceLast
Nenue@67 705 if self.debugTimer >= 0 then
Nenue@67 706 print(self.debugTimer)
Nenue@67 707 end
Nenue@35 708 end
Nenue@67 709 --@end-debug@
Nenue@7 710
Nenue@7 711 -- query for reward data if it wasn't found in the original scan
Nenue@7 712 local questID = self.questID
Nenue@65 713 if not self.dataLoaded then
Nenue@67 714 print('|cFFFF4400'..self:GetID()..':|r polling reward info')
Nenue@49 715 if not (self.isAnimating) then
Nenue@7 716 self.PendingFade:Play()
Nenue@7 717 end
Nenue@66 718 local dataLoaded = self:GetData()
Nenue@67 719 if dataLoaded and not tContains(db.UpdatedPins, self) then
Nenue@67 720
Nenue@67 721 print('|cFF00FF88'..self:GetID()..':|r reward info loaded! queue it up')
Nenue@67 722
Nenue@67 723 tinsert(db.UpdatedPins, self)
Nenue@66 724 end
Nenue@7 725 return
Nenue@7 726 else
Nenue@7 727 if self.PendingFade:IsPlaying() then
Nenue@67 728 print('|cFFFF4400'..self:GetID()..':|r cancel fader')
Nenue@7 729 self.PendingFade:Stop()
Nenue@7 730 end
Nenue@67 731
Nenue@67 732 if self.isStale then
Nenue@67 733 print(self.questID, '|cFFFFFF00flagged for update')
Nenue@67 734 self:CheckFilterRules()
Nenue@67 735 self:Refresh()
Nenue@67 736 return
Nenue@67 737 end
Nenue@7 738 end
Nenue@7 739
Nenue@55 740 self:UpdateStatus()
Nenue@55 741 end
Nenue@7 742
Nenue@55 743 -- Called at static intervals and with Refresh
Nenue@55 744 function QuestPOI:UpdateStatus()
Nenue@7 745 -- update time elements
Nick@64 746 self.isActive = TQ_IsActive(self.questID)
Nick@64 747
Nick@64 748 if self.isActive then
Nenue@40 749 local tl = self.alertLevel
Nenue@55 750 local timeLeft = TQ_GetQuestTimeLeftMinutes(self.questID)
Nenue@40 751 if timeLeft > 0 then
Nenue@40 752
Nenue@40 753 local text, timeState = WorldPlan:GetTimeInfo(timeLeft, self.maxAlertLevel)
Nenue@40 754 if tl ~= timeState then
Nenue@40 755 tl = timeState
Nenue@40 756 self.timeLabel:SetText(text)
Nenue@40 757 end
Nenue@40 758 else
Nenue@9 759 if self.worldQuestType ~= LE_QUEST_TAG_TYPE_PROFESSION then
Nick@62 760 self:HideFrames()
Nenue@9 761 end
Nenue@7 762 end
Nenue@55 763
Nenue@57 764 if tl and (timeLeft < 120) then
Nenue@55 765 self.HighlightBorder:SetVertexColor(1,0,0,0.7)
Nenue@55 766 elseif self.isBounty then
Nenue@55 767 self.HighlightBorder:SetVertexColor(.25,.5,1,1)
Nenue@55 768 else
Nenue@55 769 self.HighlightBorder:SetVertexColor(0,0,0,0.7)
Nenue@55 770 end
Nenue@40 771 self.alertLevel = tl
Nick@60 772 self.timeLabel:SetShown(self.worldQuest and (self.maxAlertLevel >= 1))
Nenue@59 773 else
Nick@60 774 if not self.completed then
Nick@60 775 self.completed = true
Nick@62 776 self:HideFrames()
Nick@60 777 end
Nenue@7 778 end
Nenue@8 779 end
Nenue@8 780
Nenue@66 781
Nick@60 782 function QuestPOI:Refresh ()
Nenue@49 783
Nick@60 784 rprint('|cFF00FF88'..self:GetID()..'|r:Refresh() type =', self.rewardType, 'title =', self.title)
Nenue@49 785
Nenue@66 786 local style = DEFAULT_STYLE
Nenue@66 787 if self.dataLoaded and not self.filtered then
Nenue@66 788 style = REWARD_TYPE_STYLES[self.rewardType]
Nenue@66 789 else
Nenue@66 790 style = MINIMIZED_STYLE
Nenue@66 791 end
Nenue@49 792
Nenue@66 793 local currentWidth = style.iconWidth or DEFAULT_STYLE.iconWidth
Nenue@9 794
Nenue@9 795
Nenue@66 796
Nenue@66 797 local borderWidth = style.borderWidth or DEFAULT_STYLE.borderWidth
Nenue@66 798 local highlightWidth = style.highlightWidth or DEFAULT_STYLE.highlightWidth
Nenue@66 799 local tagSize = style.TagSize or DEFAULT_STYLE.TagSize
Nenue@66 800 local hideIcon = style.hideIcon or DEFAULT_STYLE.hideIcon
Nenue@66 801 local borderColor = style.border or DEFAULT_STYLE.border
Nenue@57 802 local questID = self.questID
Nenue@36 803 local iconBorder = self.RewardBorder
Nenue@36 804 local trackingBorder = self.HighlightBorder
Nenue@9 805 local icon = self.icon
Nenue@9 806 local count = self.count
Nenue@66 807 local hideNumbers = style.hideNumber or DEFAULT_STYLE.hideNumber
Nenue@66 808
Nenue@66 809 local tagIcon = self.tagIcon
Nenue@66 810 self.maxAlertLevel = style.maxAlertLevel or DEFAULT_STYLE.maxAlertLevel
Nenue@66 811
Nenue@66 812
Nenue@55 813 self.isBounty = WorldMapFrame.UIElementsFrame.BountyBoard:IsWorldQuestCriteriaForSelectedBounty(self.questID)
Nenue@36 814
Nenue@9 815 if self.itemName then
Nenue@45 816
Nenue@66 817 if self.itemNumber and (self.itemNumber > 1) and (not hideNumbers) then
Nenue@54 818 local numberString = self.itemNumber
Nenue@65 819 if self.itemNumber >= 1000000 then
Nenue@65 820 numberString = (floor(self.itemNumber/100000)/10) .. 'M'
Nenue@65 821 elseif self.itemNumber >= 10000 then
Nenue@65 822 numberString = floor(self.itemNumber/1000) .. 'k'
Nenue@65 823 elseif self.itemNumber >= 1000 then
Nenue@54 824 local numeral = floor(self.itemNumber/1000)
Nenue@54 825 local decimal = mod(self.itemNumber, 1000)
Nenue@54 826 numberString = numeral
Nenue@54 827 if decimal > 100 then
Nenue@54 828 numberString = numberString .. '.' .. tostring(floor(decimal/100))
Nenue@54 829 end
Nenue@54 830 numberString = numberString .. 'k'
Nenue@40 831 end
Nenue@45 832 self.count:SetText(numberString)
Nenue@66 833 self.count:Show()
Nenue@45 834 else
Nenue@54 835 self.count:SetText(nil)
Nenue@66 836 self.count:Hide()
Nenue@45 837 end
Nenue@66 838 else
Nenue@66 839 self.count:Hide()
Nenue@54 840 end
Nenue@30 841
Nenue@55 842 if db.Config.ShowVerboseInfo then
Nenue@55 843 self.Description:SetText(self.title .. "\n" .. floor(self.x*100+.5) .. "," .. floor(self.y*100+.5))
Nenue@55 844 end
Nenue@55 845
Nenue@40 846
Nenue@66 847 icon:SetSize(currentWidth, currentWidth)
Nenue@66 848 icon:SetMask(style.iconMask or DEFAULT_STYLE.iconMask)
Nenue@36 849 if self.itemTexture then
Nenue@47 850 --iconBorder:SetTexture(WORLD_QUEST_BORDER)
Nenue@40 851
Nenue@66 852 if hideIcon then
Nenue@40 853 icon:SetTexture(PENDING_ICON)
Nenue@40 854 icon:SetDesaturated(true)
Nenue@66 855 icon:SetVertexColor(unpack(borderColor))
Nenue@40 856 else
Nenue@40 857 icon:SetTexture(self.itemTexture)
Nenue@40 858 icon:SetDesaturated(false)
Nenue@40 859 icon:SetVertexColor(1, 1, 1)
Nenue@40 860 end
Nenue@40 861 else
Nenue@47 862 --
Nenue@40 863 icon:SetTexture(PENDING_ICON)
Nenue@40 864 icon:SetDesaturated(true)
Nenue@66 865 icon:SetVertexColor(unpack(borderColor))
Nenue@9 866 end
Nenue@66 867 local borderMask = style.borderMask or DEFAULT_STYLE.borderMask
Nenue@66 868 local borderSize = currentWidth + (borderWidth * 2)
Nenue@9 869
Nenue@66 870
Nenue@66 871 iconBorder:SetSize(borderSize, borderSize)
Nenue@66 872 iconBorder:SetMask(borderMask)
Nenue@47 873 iconBorder:SetTexture(PENDING_BORDER)
Nenue@66 874 iconBorder:SetVertexColor(unpack(borderColor))
Nenue@66 875 iconBorder:SetDesaturated(true)
Nenue@52 876
Nenue@66 877 local highlightSize = borderSize + (highlightWidth * 2)
Nenue@66 878 trackingBorder:SetSize(highlightSize, highlightSize)
Nenue@66 879 trackingBorder:SetMask(borderMask)
Nenue@66 880 trackingBorder:SetTexture(PENDING_BORDER)
Nenue@9 881
Nenue@66 882 self:SetSize(borderSize, borderSize)
Nenue@66 883
Nenue@66 884
Nenue@66 885
Nenue@66 886 iconBorder:SetPoint('CENTER', (style.x or 0), (style.y or 0))
Nenue@66 887 trackingBorder:SetPoint('CENTER', (style.x or 0), (style.y or 0))
Nenue@9 888
Nenue@49 889 self.tagIcon:SetShown((not self.filtered) and true or false)
Nenue@9 890 self.tagIcon:SetAtlas(self.tagAtlas)
Nenue@47 891 self.EliteBorder:SetShown(self.isElite and not self.filtered)
Nenue@36 892
Nenue@9 893 self:UpdateSize()
Nenue@55 894 self:UpdateStatus()
Nenue@33 895 self.isStale = nil
Nenue@57 896
Nenue@57 897 -- signal filter info update
Nenue@57 898 WorldPlanSummary.isStale = true
Nenue@9 899 end
Nenue@9 900
Nenue@35 901 local cvar_check = {
Nenue@35 902 [REWARD_CASH] = 'worldQuestFilterGold',
Nenue@35 903 [REWARD_ARTIFACT_POWER] = 'worldQuestFilterArtifactPower',
Nenue@35 904 [REWARD_CURRENCY] = 'worldQuestFilterOrderResources',
Nenue@35 905 [REWARD_REAGENT]= 'worldQuestFilterProfessionMaterials',
Nenue@35 906 [REWARD_GEAR] = 'worldQuestFilterEquipment',
Nenue@35 907 }
Nenue@8 908
Nick@64 909
Nick@64 910
Nenue@57 911 function QuestPOI:CheckFilterRules ()
Nenue@36 912 local print = qprint
Nenue@33 913 local qType = self.worldQuestType
Nenue@57 914 local filtered
Nenue@57 915 local canShow = TQ_IsActive(self.questID)
Nenue@52 916 if SpellCanTargetQuest() then
Nenue@52 917 -- hiding so player can click a valid target
Nenue@52 918 self.used = nil
Nenue@52 919 elseif qType == LE_QUEST_TAG_TYPE_PROFESSION then
Nenue@57 920 if not(self.isKnownProfession or db.Config.ShowAllProfessionQuests) then
Nenue@57 921 canShow = nil
Nenue@36 922 end
Nenue@36 923 end
Nenue@57 924 if canShow then
Nenue@57 925 for filterKey, value in pairs(db.UsedFilters) do
Nenue@57 926 if self[filterKey] ~= value then
Nenue@57 927 if not self.filtered then
Nenue@57 928 print('|cFFFF4400filtering', filterKey, value, '~=', self[filterKey], self.title)
Nenue@57 929 end
Nenue@57 930
Nenue@57 931 filtered = true
Nenue@57 932 end
Nenue@57 933 end
Nenue@57 934 if self.rewardType and cvar_check[self.rewardType] then
Nenue@57 935 if not GetCVarBool(cvar_check[self.rewardType]) then
Nenue@57 936 filtered = true
Nenue@57 937 end
Nenue@57 938 end
Nenue@57 939 if canShow and self.filtered ~= filtered then
Nenue@57 940 self.isStale = true
Nenue@57 941 print(' '..self.questID..':|cFFFFFF00CheckFilterRules()|r ', canShow, filtered, self.title)
Nenue@57 942 end
Nenue@57 943 self.filtered = filtered
Nenue@57 944 end
Nenue@57 945
Nenue@57 946 self.used = canShow
Nenue@57 947
Nenue@57 948
Nenue@33 949 end
Nenue@33 950
Nenue@33 951 --- Fixes icons upon size update
Nenue@36 952 function QuestPOI:UpdateSize ()
Nenue@33 953
Nenue@49 954 --qprint('|cFF00BB88'..self:GetID()..'|r:UpdateSize()', self.style, self.subStyle)
Nenue@66 955 return
Nenue@66 956 --[[
Nenue@40 957 local style = self.style
Nenue@40 958 local subStyle = self.subStyle
Nenue@36 959 local icon = self.icon
Nenue@36 960 local iconBorder = self.RewardBorder
Nenue@36 961 local trackingBorder = self.HighlightBorder
Nenue@36 962 local tag = self.tagIcon
Nenue@33 963
Nenue@36 964 local iconWidth = subStyle.iconWidth
Nenue@36 965 local borderWidth = iconWidth + (subStyle.borderWidth * 2)
Nenue@36 966 local highlightWidth = borderWidth + (subStyle.highlightWidth * 2)
Nenue@36 967 local iconTexture = self.itemTexture
Nenue@33 968
Nenue@47 969
Nenue@56 970 self:SetSize(highlightWidth, highlightWidth)
Nenue@47 971 if self.questID == GetSuperTrackedQuestID() then
Nenue@47 972 highlightWidth = highlightWidth + 2
Nenue@57 973 if self.filtered then
Nenue@57 974 self:SetAlpha(db.PinAlpha * 0.5)
Nenue@57 975 else
Nenue@57 976 self:SetAlpha(db.PinAlpha)
Nenue@57 977 end
Nenue@57 978
Nenue@47 979 end
Nenue@47 980
Nenue@47 981 if self.rarity and WORLD_QUEST_QUALITY_COLORS[self.rarity] then
Nenue@47 982 highlightWidth = highlightWidth + self.rarity
Nenue@47 983 end
Nenue@40 984 self.tagIcon:SetSize(self.tagSize, self.tagSize)
Nenue@36 985 icon:SetSize(iconWidth, iconWidth)
Nenue@36 986 iconBorder:SetSize(borderWidth, borderWidth)
Nenue@36 987 trackingBorder:SetSize(highlightWidth, highlightWidth)
Nenue@33 988
Nenue@36 989
Nenue@36 990 iconBorder:SetPoint('CENTER', (style.x or 0), (style.y or 0))
Nenue@36 991 trackingBorder:SetPoint('CENTER', (style.x or 0), (style.y or 0))
Nenue@36 992
Nenue@36 993
Nick@62 994 if (subStyle.showNumber and self.itemNumber) and style.hasNumeric then
Nenue@36 995 self.count:SetTextColor(unpack(style.numberRGB))
Nenue@36 996 if subStyle.numberFontObject then
Nenue@36 997 --wqprint('change font', _G[subStyle.numberFontObject]:GetName())
Nenue@36 998 self.count:SetFontObject(_G[subStyle.numberFontObject])
Nenue@36 999 end
Nick@62 1000 else
Nick@62 1001 self.count:SetText(nil)
Nenue@33 1002 end
Nenue@66 1003 --]]
Nenue@7 1004 end