Preserve explicit one-charge display behavior
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
-- Preserve Guda's historical charge overlay behavior while using ClassicAPI.
|
||||
-- ClassicAPI reports 1 for many single-use items; Guda historically only
|
||||
-- displayed charges when the tooltip explicitly contained a Charges line.
|
||||
|
||||
local addon = Guda
|
||||
local ItemDetection = addon.Modules.ItemDetection
|
||||
if not ItemDetection then return end
|
||||
|
||||
local fastGetCharges = ItemDetection.GetCharges
|
||||
|
||||
local function SafeSetHyperlink(tooltip, link)
|
||||
if not link then return false end
|
||||
local _, _, bare = string.find(link, "|H(item:[^|]+)|h")
|
||||
if not bare and string.find(link, "^item:") then bare = link end
|
||||
if not bare then return false end
|
||||
return pcall(tooltip.SetHyperlink, tooltip, bare)
|
||||
end
|
||||
|
||||
local function GetExplicitTooltipCharges(itemData, bagID, slotID)
|
||||
local tooltip, tooltipName = addon.Modules.Utils:GetScanTooltip()
|
||||
tooltip:SetOwner(WorldFrame, "ANCHOR_NONE")
|
||||
tooltip:ClearLines()
|
||||
|
||||
local ok = false
|
||||
if bagID and slotID and bagID ~= -1 then
|
||||
ok = pcall(tooltip.SetBagItem, tooltip, bagID, slotID)
|
||||
end
|
||||
if not ok then
|
||||
ok = SafeSetHyperlink(tooltip, itemData and itemData.link)
|
||||
end
|
||||
if not ok then return nil end
|
||||
|
||||
local numLines = tooltip:NumLines() or 0
|
||||
for i = 1, numLines do
|
||||
local line = getglobal(tooltipName .. "TextLeft" .. i)
|
||||
local text = line and line:GetText()
|
||||
if text then
|
||||
local _, _, num = string.find(string.lower(text), "^(%d+) charges?$")
|
||||
if num then return tonumber(num) end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function ItemDetection:GetCharges(itemData, bagID, slotID)
|
||||
local charges = fastGetCharges(self, itemData, bagID, slotID)
|
||||
if charges ~= 1 then
|
||||
return charges
|
||||
end
|
||||
|
||||
-- A native value of 1 is ambiguous: it can mean a true one-charge item or
|
||||
-- simply a single-use spell item. Confirm only this rare case via tooltip.
|
||||
return GetExplicitTooltipCharges(itemData, bagID, slotID)
|
||||
end
|
||||
|
||||
addon:Debug("ClassicAPI charge compatibility filter enabled")
|
||||
Reference in New Issue
Block a user