Mercurial > wow > worldplan
comparison QuestPOI.lua @ 65:02f1d3bce558
Update for Legion Patch 7.2
- Massively improved performance footprint via 7.2 API changes and some major optimization of POI update triggers
- Removed AP token caching until reliable mechanisms for detecting AK shifts can be resolved.
| author | Nenue |
|---|---|
| date | Wed, 29 Mar 2017 13:45:41 -0400 |
| parents | 876c3f0bfd0e |
| children | e43e10c5576b |
comparison
equal
deleted
inserted
replaced
| 64:876c3f0bfd0e | 65:02f1d3bce558 |
|---|---|
| 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 -- Big TODOs: | |
| 6 -- -- generate frames using `WorldMap_GetOrCreateTaskPOI' to remove tainting issues | |
| 5 -- | 7 -- |
| 6 local _, db = ... | 8 local _, db = ... |
| 7 local TQ_GetQuestInfoByQuestID = C_TaskQuest.GetQuestInfoByQuestID | 9 local TQ_GetQuestInfoByQuestID = C_TaskQuest.GetQuestInfoByQuestID |
| 8 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation | 10 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation |
| 9 local TQ_GetQuestTimeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes | 11 local TQ_GetQuestTimeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes |
| 19 local GetQuestTagInfo, GetProfessionInfo = GetQuestTagInfo, GetProfessionInfo | 21 local GetQuestTagInfo, GetProfessionInfo = GetQuestTagInfo, GetProfessionInfo |
| 20 local GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData = GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData | 22 local GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData = GetNumQuestLogRewards, GetNumQuestLogRewardCurrencies, HaveQuestData |
| 21 local GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString = GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString | 23 local GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString = GetQuestLogRewardMoney, GetQuestLogRewardCurrencyInfo, GetMoneyString |
| 22 local SpellCanTargetQuest, GetCVarBool = SpellCanTargetQuest, GetCVarBool | 24 local SpellCanTargetQuest, GetCVarBool = SpellCanTargetQuest, GetCVarBool |
| 23 local SetSuperTrackedQuestID = SetSuperTrackedQuestID | 25 local SetSuperTrackedQuestID = SetSuperTrackedQuestID |
| 26 local HaveQuestRewardData = HaveQuestRewardData | |
| 27 | |
| 24 | 28 |
| 25 local pairs, ipairs, tinsert, unpack, select = pairs, ipairs, tinsert, unpack, select | 29 local pairs, ipairs, tinsert, unpack, select = pairs, ipairs, tinsert, unpack, select |
| 26 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID | 30 local floor, mod, tostring, tonumber, GetSuperTrackedQuestID = floor, mod, tostring, tonumber, GetSuperTrackedQuestID |
| 27 local GameTooltip = GameTooltip | 31 local GameTooltip = GameTooltip |
| 28 local GetItemIcon = GetItemIcon | 32 local GetItemIcon = GetItemIcon |
| 52 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD | 56 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD |
| 53 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER | 57 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER |
| 54 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT | 58 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT |
| 55 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES | 59 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES |
| 56 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS | 60 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS |
| 61 local REWARD_HONOR = WORLD_QUEST_REWARD_TYPE_FLAG_HONOR | |
| 57 | 62 |
| 58 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP | 63 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP |
| 59 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE | 64 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE |
| 60 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON | 65 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON |
| 61 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION | 66 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION |
| 64 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP | 69 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP |
| 65 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE | 70 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE |
| 66 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON | 71 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON |
| 67 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION | 72 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION |
| 68 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL | 73 local LE_QUEST_TAG_TYPE_NORMAL = LE_QUEST_TAG_TYPE_NORMAL |
| 74 | |
| 75 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 | |
| 76 | |
| 69 | 77 |
| 70 local STYLE_TYPE_PENDING = 768 | 78 local STYLE_TYPE_PENDING = 768 |
| 71 | 79 |
| 72 | 80 |
| 73 -- Pin color/display variables | 81 -- Pin color/display variables |
| 263 if info.questID then | 271 if info.questID then |
| 264 GetQuestTooltipExtras(info) | 272 GetQuestTooltipExtras(info) |
| 265 end | 273 end |
| 266 end | 274 end |
| 267 end | 275 end |
| 268 WorldMap_AddQuestRewardsToTooltip(questID) | 276 GameTooltip_AddQuestRewardsToTooltip(WorldMapTooltip, questID) |
| 269 | 277 |
| 270 WorldMapTooltip:Show() | 278 WorldMapTooltip:Show() |
| 271 --WorldMapTooltip.recalculatePadding = true; | 279 --WorldMapTooltip.recalculatePadding = true; |
| 272 --print(WorldMapTooltip:GetParent()) | 280 --print(WorldMapTooltip:GetParent()) |
| 273 --print(WorldMapTooltip:IsVisible()) | 281 --print(WorldMapTooltip:IsVisible()) |
| 290 end | 298 end |
| 291 | 299 |
| 292 local questTitle, factionID, capped = TQ_GetQuestInfoByQuestID(questID) | 300 local questTitle, factionID, capped = TQ_GetQuestInfoByQuestID(questID) |
| 293 -- if the title is nil, then wait and try later | 301 -- if the title is nil, then wait and try later |
| 294 if not questTitle then | 302 if not questTitle then |
| 295 if not self.isPending then | 303 dprint('|cFFBB8844dataLoaded|r = false|cFF00FFFF', self.questId) |
| 296 C_TaskQuest.RequestPreloadRewardData(questID) | 304 return false |
| 297 self.isPending = true | |
| 298 end | |
| 299 dprint('|cFFBB8844isPending=true|r|cFF00FFFF', self.questId) | |
| 300 else | 305 else |
| 301 self.title, self.factionID, self.capped = questTitle, factionID, capped | 306 self.title, self.factionID, self.capped = questTitle, factionID, capped |
| 302 dprint('|cFFBB8844 data|r|cFF00FFFF', (self.isPending and '|cFFFF4400delayed|r' or '|cFF00FF00success|r'), self.title, '|r', self.factionID) | 307 dprint(questTitle, factionID, capped) |
| 303 if self.dataLoaded then | |
| 304 dprint(' |cFFFF4400overwriting data|r') | |
| 305 end | |
| 306 | |
| 307 -- set tag details | 308 -- set tag details |
| 308 local worldQuestType | 309 local worldQuestType |
| 309 self.tagID, self.tagName, worldQuestType, self.rarity, self.isElite, self.tradeskillLineIndex = GetQuestTagInfo(questID); | 310 self.tagID, self.tagName, worldQuestType, self.rarity, self.isElite, self.tradeskillLineIndex = GetQuestTagInfo(questID); |
| 310 local tagAtlas | 311 local tagAtlas |
| 311 if worldQuestType == LE_QUEST_TAG_TYPE_PET_BATTLE then | 312 if worldQuestType == LE_QUEST_TAG_TYPE_PET_BATTLE then |
| 324 tagAtlas = "worldquest-icon-dungeon" | 325 tagAtlas = "worldquest-icon-dungeon" |
| 325 end | 326 end |
| 326 self.worldQuestType = worldQuestType | 327 self.worldQuestType = worldQuestType |
| 327 self.tagAtlas = tagAtlas | 328 self.tagAtlas = tagAtlas |
| 328 | 329 |
| 329 self:SetRewardInfo() | 330 local dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality = self:UpdateRewards() |
| 330 | 331 dprint('|cFFBB8844 dataLoaded|r =', dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality) |
| 331 -- force throttle on success | 332 if dataLoaded then |
| 332 --qprint(' |cFF00FFFF'..questID..'|r hasUpdate:', hasUpdate, 'isPending:', isPending, 'isShown', self:IsShown()) | 333 self.rewardType = rewardType |
| 333 --qprint(' ', 'rewardType:', self.rewardType, 'tag:', self.tagID) | 334 self.itemName = itemName |
| 334 qprint(' ', tostring(self.title), " |T"..tostring(self.itemTexture)..":12:12|t", tostring(self.itemName)) | 335 self.itemTexture = itemTexture |
| 335 | 336 self.itemNumber = itemNumber |
| 336 if self.itemTexture and self.itemName and self.title then | 337 self.itemQuality = quality |
| 337 self.dataLoaded = true | 338 self.dataLoaded = true |
| 338 self.isPending = nil | |
| 339 self.throttle = 1 | |
| 340 self.updateRate = PIN_REFRESH_DELAY | |
| 341 self.isStale = true | 339 self.isStale = true |
| 342 end | 340 end |
| 343 end | 341 end |
| 344 | 342 |
| 345 self.isCriteria = WorldMapFrame.UIElementsFrame.BountyBoard:IsWorldQuestCriteriaForSelectedBounty(questID) | 343 self.isCriteria = WorldMapFrame.UIElementsFrame.BountyBoard:IsWorldQuestCriteriaForSelectedBounty(questID) |
| 346 | 344 |
| 347 return self.isStale, self.isPending | 345 return self.dataLoaded |
| 348 end | 346 end |
| 349 | 347 |
| 350 function QuestPOI:SetRewardInfo() | 348 --- Returns true if data has changed (either from loading in or qualifications changed) |
| 349 function QuestPOI:UpdateRewards() | |
| 351 local questID = self.questID | 350 local questID = self.questID |
| 352 if not HaveQuestData(questID) then | 351 if not HaveQuestRewardData(questID) then |
| 353 self.isPending = true | 352 C_TaskQuest.RequestPreloadRewardData(questID); |
| 353 return false; | |
| 354 else | 354 else |
| 355 | 355 local rewardMoney, rewardAP, rewardHonor |
| 356 local rewardItems, rewardCurrency = {}, {} | |
| 356 local rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality | 357 local rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality |
| 357 -- set reward category | 358 local xpIcon, xpName, xpCount, xpType |
| 359 | |
| 360 if (GetNumQuestLogRewardCurrencies(questID) > 0 or GetNumQuestLogRewards(questID) > 0 or GetQuestLogRewardMoney(questID) > 0 or GetQuestLogRewardArtifactXP(questID) > 0 or GetQuestLogRewardHonor(questID)) then | |
| 361 local money = GetQuestLogRewardMoney(questID) | |
| 362 if money > 0 then | |
| 363 rewardMoney = money | |
| 364 rewardIcon = ICON_MONEY | |
| 365 rewardName = GetMoneyString(money) | |
| 366 rewardCount = floor(money/10000) | |
| 367 rewardType = REWARD_CASH | |
| 368 end | |
| 369 | |
| 370 local artifactXP = GetQuestLogRewardArtifactXP(questID); | |
| 371 if artifactXP > 0 then | |
| 372 rewardAP = artifactXP | |
| 373 rewardIcon = "Interface\\ICONS\\inv_7xp_inscription_talenttome01" | |
| 374 rewardCount = artifactXP | |
| 375 rewardType = REWARD_ARTIFACT_POWER | |
| 376 qprint(' artifactXP', artifactXP) | |
| 377 end | |
| 378 | |
| 379 local numQuestCurrencies = GetNumQuestLogRewardCurrencies(questID); | |
| 380 for i = 1, numQuestCurrencies do | |
| 381 local name, texture, numItems = GetQuestLogRewardCurrencyInfo(i, questID); | |
| 382 local text = BONUS_OBJECTIVE_REWARD_WITH_COUNT_FORMAT:format(texture, numItems, name); | |
| 383 tinsert(rewardCurrency, { | |
| 384 name = name, | |
| 385 texture = texture, | |
| 386 numItems = numItems, | |
| 387 text = text | |
| 388 }) | |
| 389 qprint(' currency', i, name, " |T"..tostring(texture)..":12:12|t") | |
| 390 rewardIcon = texture | |
| 391 rewardCount = numItems | |
| 392 rewardName = name | |
| 393 rewardType = REWARD_CURRENCY | |
| 394 end | |
| 395 local honorAmount = GetQuestLogRewardHonor(questID); | |
| 396 if honorAmount > 0 then | |
| 397 xpIcon = "Interface\\ICONS\\Achievement_LegionPVPTier4" | |
| 398 xpCount = honorAmount | |
| 399 xpName = HONOR | |
| 400 xpType = HONOR_CURRENCY | |
| 401 end | |
| 402 | |
| 403 local numQuestRewards = GetNumQuestLogRewards(questID); | |
| 404 if numQuestRewards > 0 then | |
| 405 local foundPrimary | |
| 406 for i = 1, numQuestRewards do | |
| 407 local name, texture, numItems, quality, isUsable, itemID = GetQuestLogRewardInfo(i, questID) | |
| 408 | |
| 409 if itemID then | |
| 410 local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemTexture, sellPrice, classID, subclassID = GetItemInfo(itemID); | |
| 411 | |
| 412 | |
| 413 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 | |
| 414 rewardType = REWARD_GEAR | |
| 415 rewardIcon = texture | |
| 416 rewardName = name | |
| 417 rewardCount = numItems | |
| 418 foundPrimary = true | |
| 419 elseif IsArtifactPowerItem(itemID) then | |
| 420 rewardType = REWARD_ARTIFACT_POWER | |
| 421 rewardIcon = texture | |
| 422 rewardName = name | |
| 423 rewardCount = 1 | |
| 424 foundPrimary = true | |
| 425 | |
| 426 WorldPlanTooltip:SetOwner(self, 'ANCHOR_NONE') | |
| 427 WorldPlanTooltip:SetHyperlink(itemLink) | |
| 428 for i = 1, WorldPlanTooltip:NumLines() do | |
| 429 local line = _G['WorldPlanTooltipTextLeft' .. i] | |
| 430 local text = line and line:GetText() | |
| 431 local ap = text and text:gsub(',', ''):match('(%d+) '..ARTIFACT_POWER) | |
| 432 if ap then | |
| 433 rewardCount = tonumber(ap) | |
| 434 print(ap) | |
| 435 end | |
| 436 | |
| 437 end | |
| 438 | |
| 439 if WorldPlanTooltipTextLeft2 then | |
| 440 local text = WorldPlanTooltipTextLeft2:GetText() | |
| 441 end | |
| 442 | |
| 443 print('is an AP token') | |
| 444 elseif classID == LE_ITEM_CLASS_TRADEGOODS then | |
| 445 rewardType = REWARD_REAGENT | |
| 446 rewardIcon = texture | |
| 447 rewardName = name | |
| 448 rewardCount = numItems | |
| 449 foundPrimary = true | |
| 450 end | |
| 451 | |
| 452 | |
| 453 qprint(' reward', i, name, " |T"..tostring(texture)..":12:12|t", quality, isUsable, itemID) | |
| 454 tinsert(rewardItems, { | |
| 455 name = name, | |
| 456 texture = texture, | |
| 457 numItems = numItems, | |
| 458 quality = quality, | |
| 459 isUsable = isUsable | |
| 460 }) | |
| 461 if not foundPrimary then | |
| 462 rewardType = REWARD_GEAR | |
| 463 | |
| 464 rewardIcon = texture | |
| 465 rewardName = name | |
| 466 rewardCount = numItems | |
| 467 end | |
| 468 | |
| 469 end | |
| 470 | |
| 471 end | |
| 472 end | |
| 473 | |
| 474 qprint(' '..self.questID..':|cFFFFFF00SetRewardInfo():', numQuestRewards, rewardType) | |
| 475 qprint(' ', tostring(self.title), " |T"..tostring(self.itemTexture)..":12:12|t", tostring(self.itemName)) | |
| 476 | |
| 477 if (self.itemNumber ~= rewardCount) or (self.rewardType ~= rewardType) or (self.itemName ~= rewardName) or (self.itemTexture ~= rewardIcon) then | |
| 478 return true, rewardType, rewardName, rewardIcon, rewardCount, quality | |
| 479 else | |
| 480 return false | |
| 481 end | |
| 482 end | |
| 483 | |
| 484 | |
| 485 | |
| 486 --[[ set reward category | |
| 358 local numRewards = GetNumQuestLogRewards(questID) | 487 local numRewards = GetNumQuestLogRewards(questID) |
| 359 local numCurrency = GetNumQuestLogRewardCurrencies(questID) | 488 local numCurrency = GetNumQuestLogRewardCurrencies(questID) |
| 360 local money = GetQuestLogRewardMoney(questID) | 489 local money = GetQuestLogRewardMoney(questID) |
| 361 if numRewards >= 1 then | 490 if numRewards >= 1 then |
| 362 rewardType, rewardIcon, rewardCount, rewardName, itemID, quality = WorldPlanQuests:GetRewardHeader(questID) | 491 rewardType, rewardIcon, rewardCount, rewardName, itemID, quality = WorldPlanQuests:GetRewardHeader(questID) |
| 363 elseif numCurrency >= 1 then | 492 elseif numCurrency >= 1 then |
| 364 rewardName, rewardIcon, rewardCount = GetQuestLogRewardCurrencyInfo(1, questID) | 493 rewardName, rewardIcon, rewardCount = GetQuestLogRewardCurrencyInfo(1, questID) |
| 365 rewardType = REWARD_CURRENCY | 494 rewardType = REWARD_CURRENCY |
| 366 elseif money >= 1 then | 495 elseif money >= 1 then |
| 367 rewardIcon = ICON_MONEY | |
| 368 rewardName = GetMoneyString(money) | 496 rewardName = GetMoneyString(money) |
| 369 rewardType = REWARD_CASH | 497 end |
| 370 end | 498 --]] |
| 371 | |
| 372 qprint(' '..self.questID..':|cFFFFFF00SetRewardInfo():', numRewards, rewardType) | |
| 373 self.itemNumber = tonumber(rewardCount or self.itemNumber) | |
| 374 self.rewardType = rewardType | |
| 375 self.quality = quality | |
| 376 | |
| 377 self.itemTexture = rewardIcon or self.itemTexture | |
| 378 self.itemName = rewardName or self.itemName | |
| 379 | |
| 380 -- flag unresolved info | |
| 381 if not (rewardIcon and rewardName) then | |
| 382 self.isPending = true | |
| 383 self.isStale = nil | |
| 384 --WorldPlan:print('|cFFFFFF00'..tostring(self.title)..'|r waiting on texture info') | |
| 385 else | |
| 386 if (rewardIcon and rewardName) and self.isPending then | |
| 387 --WorldPlan:print('|cFF00FF00'..tostring(self.title)..'|r has info', rewardIcon, rewardName) | |
| 388 self.isStale = true | |
| 389 end | |
| 390 self.isPending = nil | |
| 391 end | |
| 392 | 499 |
| 393 end | 500 end |
| 394 end | 501 end |
| 395 | 502 |
| 396 -- run from OnShow if .isNew is set | 503 -- run from OnShow if .isNew is set |
| 440 -- reset flags | 547 -- reset flags |
| 441 self:SetAlpha(db.PinAlpha) | 548 self:SetAlpha(db.PinAlpha) |
| 442 self.isAnimating = nil | 549 self.isAnimating = nil |
| 443 end | 550 end |
| 444 | 551 |
| 445 -- different from owningFrame | 552 -- Places the pin and triggers display |
| 446 function QuestPOI:SetAnchor(owner, dX, dY, mapWidth, mapHeight) | 553 function QuestPOI:SetAnchor(owner, dX, dY, mapWidth, mapHeight) |
| 447 wqprint(self:GetName()..':SetAnchor()', owner, dX, dY, self.filtered, self.used) | 554 wqprint(self:GetName()..':SetAnchor()', owner, dX, dY, self.filtered, self.used) |
| 448 if not self.used then | 555 if not self.used then |
| 449 self:HideFrames() | 556 self:HideFrames() |
| 450 return | 557 return |
| 458 self.Overlay:SetFrameLevel(overlayBaseIndex + self:GetID()) | 565 self.Overlay:SetFrameLevel(overlayBaseIndex + self:GetID()) |
| 459 if (dX and dY) then | 566 if (dX and dY) then |
| 460 if not (mapHeight and mapWidth) then | 567 if not (mapHeight and mapWidth) then |
| 461 mapWidth, mapHeight = owner:GetSize() | 568 mapWidth, mapHeight = owner:GetSize() |
| 462 end | 569 end |
| 463 local pX = (dX * mapWidth) | 570 if (self.x ~= dY) or (self.y ~= dY) then |
| 464 local pY = (-dY * mapHeight) | 571 self.x = dX |
| 465 self.x = dX | 572 self.y = dY |
| 466 self.y = dY | 573 local pX = (dX * mapWidth) |
| 467 self:SetPoint('CENTER', owner, 'TOPLEFT', pX, pY) | 574 local pY = (-dY * mapHeight) |
| 575 self:SetPoint('CENTER', owner, 'TOPLEFT', pX, pY) | |
| 576 end | |
| 468 else | 577 else |
| 469 self:SetPoint('CENTER') | 578 if self.x or self.y then |
| 579 self.x = nil | |
| 580 self.y = nil | |
| 581 self:SetPoint('CENTER') | |
| 582 end | |
| 470 end | 583 end |
| 471 | 584 |
| 472 self:ShowFrames() | 585 self:ShowFrames() |
| 473 end | 586 end |
| 474 | 587 |
| 497 self.used = nil | 610 self.used = nil |
| 498 end | 611 end |
| 499 | 612 |
| 500 function QuestPOI:OnLoad() | 613 function QuestPOI:OnLoad() |
| 501 qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config) | 614 qprint('|cFF00FF88'..self:GetName()..':OnLoad()|r',db.Config) |
| 502 self:RegisterEvent('SUPER_TRACKED_QUEST_CHANGED') | |
| 503 | 615 |
| 504 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r' | 616 self.title = '|cFF0088FF' .. RETRIEVING_DATA..'|r' |
| 505 self.isPending = true | 617 self.isPending = true |
| 506 self.count = self.Overlay.count | 618 self.count = self.Overlay.count |
| 507 self.timeLabel = self.Overlay.timeLabel | 619 self.timeLabel = self.Overlay.timeLabel |
| 519 else | 631 else |
| 520 TaskPOI_OnClick(self, button) | 632 TaskPOI_OnClick(self, button) |
| 521 end | 633 end |
| 522 end | 634 end |
| 523 | 635 |
| 524 | |
| 525 function QuestPOI:OnEvent(event, ...) | |
| 526 if event == 'SUPER_TRACKED_QUEST_CHANGED' then | |
| 527 self.isStale = true | |
| 528 end | |
| 529 end | |
| 530 | 636 |
| 531 function QuestPOI:OnUpdate (sinceLast) | 637 function QuestPOI:OnUpdate (sinceLast) |
| 532 -- control update check intervals | 638 -- control update check intervals |
| 533 self.throttle = (self.throttle or self.updateRate) + sinceLast | 639 self.throttle = (self.throttle or self.updateRate) + sinceLast |
| 534 if self.throttle >= self.updateRate then | 640 if self.throttle >= self.updateRate then |
| 546 return | 652 return |
| 547 end | 653 end |
| 548 | 654 |
| 549 -- query for reward data if it wasn't found in the original scan | 655 -- query for reward data if it wasn't found in the original scan |
| 550 local questID = self.questID | 656 local questID = self.questID |
| 551 if self.isPending then | 657 if not self.dataLoaded then |
| 552 --print('|cFFFF4400'..self:GetID()..':|r polling reward info') | 658 --print('|cFFFF4400'..self:GetID()..':|r polling reward info') |
| 553 if not (self.isAnimating) then | 659 if not (self.isAnimating) then |
| 554 self.PendingFade:Play() | 660 self.PendingFade:Play() |
| 555 end | 661 end |
| 556 self:GetData() | 662 self:GetData() |
| 606 | 712 |
| 607 rprint('|cFF00FF88'..self:GetID()..'|r:Refresh() type =', self.rewardType, 'title =', self.title) | 713 rprint('|cFF00FF88'..self:GetID()..'|r:Refresh() type =', self.rewardType, 'title =', self.title) |
| 608 | 714 |
| 609 | 715 |
| 610 | 716 |
| 611 local styleType = (self.isPending and STYLE_TYPE_PENDING) or self.rewardType | 717 local styleType = (self.dataLoaded and self.rewardType) or STYLE_TYPE_PENDING |
| 612 local style,subStyle = self:GetTypeInfo(self.rewardType) | 718 local style,subStyle = self:GetTypeInfo(self.rewardType) |
| 613 if (self.filtered or (not self.dataLoaded)) and (self.questID ~= GetSuperTrackedQuestID()) then | 719 if (self.filtered or (not self.dataLoaded)) and (self.questID ~= GetSuperTrackedQuestID()) then |
| 614 subStyle = style.minimized | 720 subStyle = style.minimized |
| 615 end | 721 end |
| 616 self.style = style | 722 self.style = style |
| 632 | 738 |
| 633 if self.itemName then | 739 if self.itemName then |
| 634 | 740 |
| 635 if self.itemNumber then | 741 if self.itemNumber then |
| 636 local numberString = self.itemNumber | 742 local numberString = self.itemNumber |
| 637 if self.itemNumber >= 1000 then | 743 if self.itemNumber >= 1000000 then |
| 744 numberString = (floor(self.itemNumber/100000)/10) .. 'M' | |
| 745 elseif self.itemNumber >= 10000 then | |
| 746 numberString = floor(self.itemNumber/1000) .. 'k' | |
| 747 elseif self.itemNumber >= 1000 then | |
| 638 local numeral = floor(self.itemNumber/1000) | 748 local numeral = floor(self.itemNumber/1000) |
| 639 local decimal = mod(self.itemNumber, 1000) | 749 local decimal = mod(self.itemNumber, 1000) |
| 640 numberString = numeral | 750 numberString = numeral |
| 641 if decimal > 100 then | 751 if decimal > 100 then |
| 642 numberString = numberString .. '.' .. tostring(floor(decimal/100)) | 752 numberString = numberString .. '.' .. tostring(floor(decimal/100)) |
| 738 end | 848 end |
| 739 if canShow and self.filtered ~= filtered then | 849 if canShow and self.filtered ~= filtered then |
| 740 self.isStale = true | 850 self.isStale = true |
| 741 print(' '..self.questID..':|cFFFFFF00CheckFilterRules()|r ', canShow, filtered, self.title) | 851 print(' '..self.questID..':|cFFFFFF00CheckFilterRules()|r ', canShow, filtered, self.title) |
| 742 end | 852 end |
| 743 | |
| 744 self.filtered = filtered | 853 self.filtered = filtered |
| 745 end | 854 end |
| 746 | 855 |
| 747 self.used = canShow | 856 self.used = canShow |
| 748 | 857 |
