comparison Modules/ArtifactPower.lua @ 98:dadddb8a551f

- bag scan intervals - progress visualization - artifact xp updates
author Nenue
date Tue, 17 Jan 2017 09:49:15 -0500
parents 5476337198ec
children 74d6d97a2d24
comparison
equal deleted inserted replaced
97:5476337198ec 98:dadddb8a551f
11 anchorFrom = 'TOP', 11 anchorFrom = 'TOP',
12 } 12 }
13 local ap = VeneerArtifactPowerMixin 13 local ap = VeneerArtifactPowerMixin
14 local BAGS_TO_SCAN = {BACKPACK_CONTAINER } 14 local BAGS_TO_SCAN = {BACKPACK_CONTAINER }
15 local TOOLTIP_NAME = 'VeneerAPScanner' 15 local TOOLTIP_NAME = 'VeneerAPScanner'
16 local POINT_COSTS = {
17 100, 300, 325, 350, 375,
18 400, 425, 450, 525, 625,
19 750, 875, 1000, 6840, 8830,
20 11280, 14400, 18620, 24000, 30600,
21 39520, 50880, 64800, 82500, 105280,
22 138650, 182780, 240870, 325520, 417560,
23 546000, 718200, 946660, 1245840, 1635200,
24 191500, 2010000, 2110000, 2215000, 2325000,
25 2440000, 2560000, 2690000, 2825000, 2965000,
26 3115000, 3270000, 3435000, 3605000, 3785000,
27 3975000, 4175000, 4385000, 4605000
28 }
16 29
17 function ap:OnLoad() 30 function ap:OnLoad()
18 self:RegisterEvent('BAG_UPDATE') -- use to obtain bag IDs to scan 31 self:RegisterEvent('BAG_UPDATE') -- use to obtain bag IDs to scan
19 self:RegisterEvent('BAG_UPDATE_DELAYED') -- use to trigger actual scan activity 32 self:RegisterEvent('BAG_UPDATE_DELAYED') -- use to trigger actual scan activity
20 self:RegisterEvent('BANKFRAME_OPENED') -- determine when bank info is available 33 self:RegisterEvent('BANKFRAME_OPENED') -- determine when bank info is available
21 self:RegisterEvent('BANKFRAME_CLOSED') -- " " " 34 self:RegisterEvent('BANKFRAME_CLOSED') -- " " "
22 self:RegisterEvent('ARTIFACT_UPDATE') -- when artifact data has changed 35 self:RegisterEvent('ARTIFACT_UPDATE') -- when artifact data has changed
23 self:RegisterEvent('ARTIFACT_UPDATE_XP') -- when artifact xp has changed (but not necessarily data) 36 self:RegisterEvent('ARTIFACT_XP_UPDATE') -- when artifact xp has changed (but not necessarily data)
24 self:RegisterEvent('MODIFIER_STATE_CHANGED') 37 self:RegisterEvent('MODIFIER_STATE_CHANGED')
25 self:RegisterEvent('PLAYER_REGEN_ENABLED') 38 self:RegisterEvent('PLAYER_REGEN_ENABLED')
26 self:RegisterEvent('PLAYER_REGEN_DISABLED') 39 self:RegisterEvent('PLAYER_REGEN_DISABLED')
27 Veneer:AddHandler(self, self.anchorPoint, true) 40 Veneer:AddHandler(self, self.anchorPoint, true)
28 SLASH_VENEER_AP1 = "/vap" 41 SLASH_VENEER_AP1 = "/vap"
29 SLASH_VENEER_AP2 = "/veneerap" 42 SLASH_VENEER_AP2 = "/veneerap"
30 SlashCmdList.VENEER_AP = function() 43 SlashCmdList.VENEER_AP = function(arg)
31 self:Show() 44 if arg == 'fishing' then
45 if VeneerData.ArtifactPower.EnableFishing then
46 VeneerData.ArtifactPower.EnableFishing = nil
47 else
48 VeneerData.ArtifactPower.EnableFishing = true
49 end
50 self:Print('Show Underlight Angler:', (VeneerData.ArtifactPower.EnableFishing and 'ON' or 'OFF'))
51 self:Update()
52
53 else
54 self:Show()
55 end
32 end 56 end
33 57
34 self.tooltip = CreateFrame('GameTooltip', TOOLTIP_NAME, self, 'GameTooltipTemplate') 58 self.tooltip = CreateFrame('GameTooltip', TOOLTIP_NAME, self, 'GameTooltipTemplate')
35 59
36 end 60 end
44 VeneerData.ArtifactPower = VeneerData.ArtifactPower or defaultSettings 68 VeneerData.ArtifactPower = VeneerData.ArtifactPower or defaultSettings
45 VeneerData.ArtifactPower[guid] = VeneerData.ArtifactPower[guid] or {} 69 VeneerData.ArtifactPower[guid] = VeneerData.ArtifactPower[guid] or {}
46 self.profile = VeneerData.ArtifactPower[guid] 70 self.profile = VeneerData.ArtifactPower[guid]
47 self.profile.bagslots = self.profile.bagslots or {} 71 self.profile.bagslots = self.profile.bagslots or {}
48 self.profile.artifacts = self.profile.artifacts or {} 72 self.profile.artifacts = self.profile.artifacts or {}
49 self:GetCurrentArtifact(true)
50 self.updateSummary = true 73 self.updateSummary = true
51 74
52 -- Bagnon compatibility 75 -- Bagnon compatibility
53 -- todo: ArkInventory, Elv, etc 76 -- todo: ArkInventory, Elv, etc
54 if IsAddOnLoaded('Bagnon') then 77 if IsAddOnLoaded('Bagnon') then
74 end 97 end
75 98
76 99
77 end 100 end
78 local UNDERLIGHT_ANGLER_ID = 133755 101 local UNDERLIGHT_ANGLER_ID = 133755
79 function ap:GetCurrentArtifact(newItem) 102 function ap:SetArtifact(itemID, name, texture, currentXP, pointsSpent)
103 print('|cFF00FF00SetArtifact()|r')
80 if not self.profile then 104 if not self.profile then
81 return 105 return
82 end 106 end
83 local artifacts = self.profile.artifacts 107 local artifacts = self.profile.artifacts
84 local itemID, altItemID, name, texture, currentXP, pointsSpent, _, _, artifactAppearanceID, appearanceModID, itemAppearanceID, altItemAppearanceID, altOnTop = C_ArtifactUI:GetArtifactInfo()
85 108
86 109
87 if itemID then 110 if itemID then
88 111 artifacts[itemID] = artifacts[itemID] or {}
89
90
91
92 print('updating', itemID, name, currentXP, pointsSpent, pointsAvailable, adjustedXP)
93 table.wipe(artifacts[itemID]) 112 table.wipe(artifacts[itemID])
94 artifacts[itemID] = artifacts[itemID] or {} 113 local artifact = artifacts[itemID]
95 artifacts[itemID].name = name 114
96 artifacts[itemID].texture = texture 115 artifact.name = name
97 artifacts[itemID].currentXP = currentXP 116 artifact.texture = texture
98 artifacts[itemID].level = pointsSpent 117 artifact.currentXP = currentXP
99 end 118 artifact.level = pointsSpent
100 119 local cost = C_ArtifactUI.GetCostForPointAtRank(pointsSpent)
101 120 artifact.cost = cost
102 self:Update() 121
122 local pointsAvailable = pointsSpent
123 local actualCost = cost
124 local actualXP = currentXP
125 while actualXP >= actualCost do
126 pointsAvailable = pointsAvailable + 1
127 actualXP = actualXP - actualCost
128 print(pointsAvailable, '-', actualCost, '=', actualXP)
129 actualCost = C_ArtifactUI.GetCostForPointAtRank(pointsAvailable)
130 end
131 print('updating', itemID, name, currentXP, pointsSpent, pointsAvailable, actualXP)
132 artifact.actualXP = actualXP
133 artifact.actualLevel = pointsAvailable
134 artifact.actualCost = actualCost
135
136 end
103 end 137 end
104 function ap:QueueBag(containerID) 138 function ap:QueueBag(containerID)
105 containerID = tonumber(containerID) 139 containerID = tonumber(containerID)
106 if not containerID then 140 if not containerID then
107 return 141 return
135 print(self:GetName()..':OnEvent()', event, ...) 169 print(self:GetName()..':OnEvent()', event, ...)
136 if event == 'BAG_UPDATE' then 170 if event == 'BAG_UPDATE' then
137 local containerID = ... 171 local containerID = ...
138 self:QueueBag(containerID) 172 self:QueueBag(containerID)
139 elseif event == 'PLAYER_BANKSLOTS_CHANGED' then 173 elseif event == 'PLAYER_BANKSLOTS_CHANGED' then
140 self:QueueBag(BANK_CONTAINER) 174 self:ScanAllBags(true)
175 self:Update()
141 elseif event == 'BAG_UPDATE_DELAYED' then 176 elseif event == 'BAG_UPDATE_DELAYED' then
142 self:ScanAllBags() 177 self:ScanAllBags(self.bankAccess)
143 elseif event == 'BANKFRAME_OPENED' then 178 elseif event == 'BANKFRAME_OPENED' then
144 self.bankAccess = true 179 self.bankAccess = true
145 self:QueueBag(BANK_CONTAINER) 180 self:ScanAllBags(true)
146 for i = 1, GetNumBankSlots() do
147 self:QueueBag(i+NUM_BAG_SLOTS)
148 end
149 self:ScanAllBags()
150 elseif event == 'BANKFRAME_CLOSED' then 181 elseif event == 'BANKFRAME_CLOSED' then
151 self.bankAccess = false 182 self.bankAccess = false
152 self:Update()
153 elseif event == 'ARTIFACT_UPDATE' then 183 elseif event == 'ARTIFACT_UPDATE' then
154 self:GetCurrentArtifact(...) 184 local newItem = ...
155 elseif event == 'ARTIFACT_UPDATE_XP' then 185 if newItem then
156 self:GetCurrentArtifact(...) 186 local itemID, _, name, texture, currentXP, pointsSpent = C_ArtifactUI:GetArtifactInfo()
157 self:Update() 187 self:SetArtifact(itemID, name, texture, currentXP, pointsSpent)
158 elseif event == 'MODIFIER_STATE_CHANGED' then 188 self:ScanAllBags(self.bankAccess)
159 self:Update() 189 end
190 elseif event == 'ARTIFACT_XP_UPDATE' then
191 local itemID, _, name, texture, currentXP, pointsSpent = C_ArtifactUI:GetEquippedArtifactInfo()
192 self:SetArtifact(itemID, name, texture, currentXP, pointsSpent)
193 self:ScanAllBags(self.bankAccess)
160 elseif event == 'PLAYER_REGEN_ENABLED' then 194 elseif event == 'PLAYER_REGEN_ENABLED' then
161 if self.enabled then 195 if self.enabled then
162 self:Show() 196 self:Show()
163 end 197 end
164 198
180 214
181 local bankText, bagText 215 local bankText, bagText
182 if not (self.bankAP and self.bagAP) then 216 if not (self.bankAP and self.bagAP) then
183 bankText = '|cFFFF0000Open bank frame to count all AP|r ' 217 bankText = '|cFFFF0000Open bank frame to count all AP|r '
184 else 218 else
185 bankText = '|cFFFFFFFFAP:|r' .. tostring(self.bagAP + self.bankAP) .. ' |cFFFFFF00('..tostring(self.bankAP)..' banked)|r' 219 if (self.bagAP + self.bankAP) == 0 then
220 bankText = '|cFF00FFFFNo Items|r'
221 else
222 if self.bagAP and (self.bagAP > 0) then
223 bankText = '|cFFFFFFFF' .. tostring(self.bagAP) .. '|r'
224 end
225 if self.bankAP and (self.bankAP > 0) then
226 bankText = (bankText and (bankText .. ' | ') or '') .. '|cFFFFFF00'..tostring(self.bankAP)..'|r'
227 end
228 end
186 end 229 end
187 self.SummaryHeader:SetText(bankText) 230 self.SummaryHeader:SetText(bankText)
188 231
189 -- Artifact icons, in no particular order 232 -- Artifact icons, in no particular order
190 local equippedID = C_ArtifactUI.GetEquippedArtifactInfo() 233 local equippedID = C_ArtifactUI.GetEquippedArtifactInfo()
191 local numButtons = 0 234 local numButtons = 0
192 local lastFrame 235 local lastFrame
236 local fishingRod, fishingID, fishingData
237 local index, button
193 for itemID, artifact in pairs(self.profile.artifacts) do 238 for itemID, artifact in pairs(self.profile.artifacts) do
194 print(artifact.name, artifact.texture, artifact.currentXP) 239 local isFishingRod = (itemID == UNDERLIGHT_ANGLER_ID)
240 if isFishingRod then
241 if VeneerData.ArtifactPower.EnableFishing then
242 fishingID = itemID
243 fishingData = artifact
244 end
245
246 else
247 numButtons = numButtons + 1
248 button = self.Artifact[numButtons]
249 lastFrame = button:SetButton(itemID, artifact, lastFrame)
250 end
251
252 end
253
254 if fishingData then
195 numButtons = numButtons + 1 255 numButtons = numButtons + 1
196 local button = self.Artifact[numButtons] 256 local button = self.Artifact[GetNumSpecializations()+1]
197 257 button:SetButton(fishingID, fishingData, lastFrame)
198 button:SetID(itemID) 258 end
199 for k,v in pairs(artifact) do 259
200 --print('::',k,v) 260 for i = numButtons+ (fishingRod and 2 or 1), #self.Artifact do
201 button[k] = v
202 end
203
204
205 local pointsAvailable = button.level
206 local cost = C_ArtifactUI.GetCostForPointAtRank(pointsAvailable)
207 local adjustedXP = button.currentXP
208 if itemID ~= UNDERLIGHT_ANGLER_ID then
209 adjustedXP = adjustedXP + (self.bankAP or 0) + (self.bagAP or 0)
210 print('not UL angler', adjustedXP)
211 else
212 print('UL angler', adjustedXP)
213 end
214
215 while adjustedXP >= cost do
216 pointsAvailable = pointsAvailable + 1
217 adjustedXP = adjustedXP - cost
218 print(pointsAvailable, '-', cost, '=', adjustedXP)
219 cost = C_ArtifactUI.GetCostForPointAtRank(pointsAvailable)
220 end
221 button.adjustedXP = adjustedXP
222 button.actualLevel = pointsAvailable
223
224 button.isEquipped = (equippedID == itemID)
225 button.relativeFrame = lastFrame
226 button:Update()
227 lastFrame = button
228 button:Show()
229 end
230 for i = numButtons+1, #self.Artifact do
231 print('hide', i) 261 print('hide', i)
232 self.Artifact[i]:Hide() 262 self.Artifact[i]:Hide()
233 end 263 end
234 264
235 265
236 266
237 self:SetWidth(64*3+ 16) 267 self:SetWidth(64*numButtons + 4 * (numButtons+1))
238 self:SetHeight(8 + self.SummaryHeader:GetHeight() + 64) 268 self:SetHeight(12 + self.SummaryHeader:GetHeight() + 64)
239 self:Reanchor() 269 self:Reanchor()
240 270
241 end 271 end
242 272
243 function ap:ScanBag(id) 273 function ap:ScanBag(id)
270 if text and text:match(ARTIFACT_POWER) then 300 if text and text:match(ARTIFACT_POWER) then
271 text = text:gsub('[,%D]', '') 301 text = text:gsub('[,%D]', '')
272 print(link, '-', tonumber(text)) 302 print(link, '-', tonumber(text))
273 local itemAP = tonumber(text) 303 local itemAP = tonumber(text)
274 if itemAP then 304 if itemAP then
305 requiresUpdate = true
275 bagData.numItems = (bagData.numItems or 0) + 1 306 bagData.numItems = (bagData.numItems or 0) + 1
276 bagData.totalAP = (bagData.totalAP or 0) + itemAP 307 bagData.totalAP = (bagData.totalAP or 0) + itemAP
277 bagData.items = bagData.items or {} 308 bagData.items = bagData.items or {}
278 if not bagData.items[itemID] then 309 if not bagData.items[itemID] then
279 requiresUpdate = true
280 bagData.numUnique = (bagData.numUnique or 0) + 1 310 bagData.numUnique = (bagData.numUnique or 0) + 1
281 end 311 end
282 bagData.items[itemID] = (bagData.items[itemAP] or 0) + 1 312 bagData.items[itemID] = (bagData.items[itemAP] or 0) + 1
283 end 313 end
284 end 314 end
293 self.profile.artifacts[itemID].slotID = slotID 323 self.profile.artifacts[itemID].slotID = slotID
294 end 324 end
295 325
296 end 326 end
297 327
298 return requiresUpdate 328 end
299 end 329
300 330 local BAG_SLOTS = {0, 1, 2, 3, 4 }
301 function ap:ScanAllBags() 331 local BANK_SLOTS = {-1, 5, 6,7, 8, 9, 10, 11, 12}
332
333 function ap:ScanAllBags(checkBank)
302 print('|cFFFF0088ScanAllBags()|r') 334 print('|cFFFF0088ScanAllBags()|r')
303 335
304 local bagID = tremove(BAGS_TO_SCAN, 1) 336 for _, bagID in ipairs(BAG_SLOTS) do
305 while bagID do 337 self:ScanBag(bagID)
306 self.updateSummary = self:ScanBag(bagID) or self.updateSummary 338 end
307 bagID = tremove(BAGS_TO_SCAN, 1) 339
308 end 340 if checkBank then
309 341 for _, bagID in ipairs(BANK_SLOTS) do
310 if self.updateSummary then 342 self:ScanBag(bagID)
311 print('tripped updater') 343 end
312 self.bankAP = 0 344 end
313 self.bagAP = 0 345
314 for id, bagData in pairs(self.profile.bagslots) do 346 self.bankAP = 0
315 print(id, GetBagName(id), bagData.totalAP) 347 self.bagAP = 0
316 id = tonumber(id) 348 for id, bagData in pairs(self.profile.bagslots) do
317 if bagData.totalAP then 349 print(id, GetBagName(id), bagData.totalAP)
318 if (id == BANK_CONTAINER) or (id >= 5) then 350 id = tonumber(id)
319 self.bankAP = self.bankAP + bagData.totalAP 351 if bagData.totalAP then
320 else 352 if (id == BANK_CONTAINER) or (id >= 5) then
321 self.bagAP = self.bagAP + bagData.totalAP 353 self.bankAP = self.bankAP + bagData.totalAP
322 end 354 else
323 end 355 self.bagAP = self.bagAP + bagData.totalAP
324 356 end
325 end 357 end
326 self.lastUpdate = GetTime() 358
327 self:Update() 359 end
328 end 360 self.lastUpdate = GetTime()
361 self:Update()
329 self.updateSummary = nil 362 self.updateSummary = nil
330 end 363 end
331 364
332 VeneerArtifactButtonMixin = {} 365 VeneerArtifactButtonMixin = {}
366
367 function VeneerArtifactButtonMixin:SetButton(itemID, artifact, lastFrame)
368 print(artifact.name, artifact.texture, artifact.currentXP)
369 self:SetID(itemID)
370 for k,v in pairs(artifact) do
371 --print('::',k,v)
372 self[k] = v
373 end
374
375 -- this can change between artifact parses
376 local potentialPoints = self.actualLevel
377 local totalAP = (itemID == UNDERLIGHT_ANGLER_ID) and ((self:GetParent().bankAP or 0) + (self:GetParent().bagAP or 0)) or (self.fishingAP or 0)
378 local potentialXP = self.actualXP + totalAP
379 self.potentialXP = potentialXP
380 local potentialCost = C_ArtifactUI.GetCostForPointAtRank(potentialPoints)
381 while potentialXP >= potentialCost do
382 potentialXP = potentialXP - potentialCost
383 potentialPoints = potentialPoints + 1
384 print('inc estimate', potentialXP, potentialPoints)
385 potentialCost = C_ArtifactUI.GetCostForPointAtRank(potentialPoints)
386 end
387 self.potentialCost = potentialCost
388 self.potentialLevel = potentialPoints
389 self.potentialAdjustedXP = potentialXP
390
391
392
393 self.isEquipped = (equippedID == itemID)
394 self.relativeFrame = lastFrame
395 self:Update()
396 self:Show()
397 return self
398 end
399
333 function VeneerArtifactButtonMixin:Update() 400 function VeneerArtifactButtonMixin:Update()
334 401
335 if self.actualLevel ~= self.level then 402 if self.actualLevel ~= self.level then
336 self.Level:SetText(self.actualLevel) 403 self.Level:SetText(self.actualLevel)
337 self.Level:SetTextColor(0,1,0) 404 self.Level:SetTextColor(0,1,0)
352 self:SetNormalTexture(nil, 'ADD') 419 self:SetNormalTexture(nil, 'ADD')
353 end 420 end
354 421
355 self:ClearAllPoints() 422 self:ClearAllPoints()
356 if self.relativeFrame then 423 if self.relativeFrame then
357 self:SetPoint('BOTTOMLEFT', self.relativeFrame, 'BOTTOMRIGHT', 4, 0) 424 self:SetPoint('TOPLEFT', self.relativeFrame, 'TOPRIGHT', 4, 0)
358 else 425 else
359 self:SetPoint('BOTTOMLEFT', 4, 4) 426 self:SetPoint('TOPLEFT', 4, -4)
360 end 427 end
361 428 local currentProgress = (self.currentXP < self.cost) and (self.currentXP / self.cost) or 1
362 429 if self.level <= 53 then
430 self.CurrentProgress.animateFrom = self.CurrentProgress:GetHeight() or 1
431 self.CurrentProgress.animateTo = currentProgress * self:GetHeight()
432 self.CurrentProgress:Show()
433 else
434 self.CurrentProgress:Hide()
435 end
436 print(currentProgress)
437 if self.potentialXP > self.currentXP then
438 local projectedProgress = (self.potentialAdjustedXP < self.potentialCost) and (self.potentialAdjustedXP / self.potentialCost) or 1
439 print(projectedProgress)
440 if (projectedProgress > currentProgress) then
441 self.AdjustedProgress:SetPoint('BOTTOM', self.CurrentProgress, 'TOP')
442 projectedProgress = projectedProgress - currentProgress
443 print(projectedProgress)
444 else
445 self.AdjustedProgress:SetPoint('BOTTOM', self, 'BOTTOM')
446 end
447 self.AdjustedProgress.animateFrom = self.AdjustedProgress:GetHeight() or 1
448 self.AdjustedProgress.animateTo = projectedProgress * self:GetHeight()
449
450 self.AdjustedProgress:Show()
451 else
452 self.AdjustedProgress:Hide()
453 end
363 454
364 self.Icon:SetTexture(self.texture) 455 self.Icon:SetTexture(self.texture)
365 self.Name:SetText(self.name) 456 self.Name:SetText(self.name)
366 self:SetSize(64,64) 457 self:SetSize(64,64)
367 end 458 end
368 459
460
461 function VeneerArtifactButtonMixin:AnimateProgress(region)
462 local cTime = GetTime()
463 if not region.animateStart then
464 region.animateStart = cTime
465 end
466 local progressTo, progressFrom = region.animateTo, region.animateFrom
467 local elapsed = cTime - region.animateStart
468 if elapsed >= .5 then
469 region:SetHeight(progressTo)
470 region.animateTo = nil
471 region.animateStart = nil
472 region.animateFrom = nil
473 else
474 local progress = elapsed / .5
475 local height = (progressFrom + (progressTo - progressFrom) * progress)
476 --print(self:GetName(), progressTo, progressFrom, (progressTo - progressFrom), ceil(progress*10)/10, ceil(height))
477 region:SetHeight(height)
478 end
479 end
480
481 function VeneerArtifactButtonMixin:OnUpdate(sinceLast)
482 if self.CurrentProgress.animateTo then
483 self:AnimateProgress(self.CurrentProgress)
484 end
485
486 if self.AdjustedProgress.animateTo then
487 self:AnimateProgress(self.AdjustedProgress)
488 end
489
490 end
491
369 function VeneerArtifactButtonMixin:OnEnter() 492 function VeneerArtifactButtonMixin:OnEnter()
370 GameTooltip:SetOwner(self, 'ANCHOR_CURSOR') 493 GameTooltip:SetOwner(self, 'ANCHOR_CURSOR')
371 GameTooltip:SetText(self.name) 494 GameTooltip:SetText(self.name)
372 GameTooltip:AddLine(self.currentXP, 1, 1, 0) 495 GameTooltip:AddLine(tostring(self.currentXP) .. ' / '..tostring(self.cost), 1, 1, 0)
373 if self.adjustedXP ~= self.currentXP then 496 if self.potentialXP > self.currentXP then
374 GameTooltip:AddLine(self.adjustedXP, 0, 1, 1) 497 GameTooltip:AddLine(tostring(self.potentialXP) .. ' potential XP', 0, 1, 1)
375 end 498 if self.adjustedXP ~= self.potentialXP then
376 499 GameTooltip:AddLine(tostring(self.potentialAdjustedXP) .. ' / ' .. tostring(self.potentialAdjustedCost).. ' after spending', 0, 1, 0)
377 500 end
501 end
378 GameTooltip:Show() 502 GameTooltip:Show()
379 end 503 end
380 function VeneerArtifactButtonMixin:OnLeave() 504 function VeneerArtifactButtonMixin:OnLeave()
381 if GameTooltip:IsOwned(self) then 505 if GameTooltip:IsOwned(self) then
382 GameTooltip:Hide() 506 GameTooltip:Hide()