Show action button spell tooltips by spell ID

libspell.GetSpellInfo now returns the spell ID at position 9 and caches
it with SafePack and unpack.

The action bar tracks self.spellID for macro-cast spells and shows the
tooltip with GameTooltip:SetSpellByID. Gather the slot, book type, and
spell ID from one GetSpellInfo call instead of a separate GetSpellIndex
lookup.
This commit is contained in:
Brues
2026-08-06 23:08:32 -05:00
parent ecb28fb194
commit 421a103f22
2 changed files with 17 additions and 17 deletions
+6 -5
View File
@@ -83,12 +83,13 @@ end
-- [number] Casting time of the spell in milliseconds -- [number] Casting time of the spell in milliseconds
-- [number] Minimum range from the target required to cast the spell -- [number] Minimum range from the target required to cast the spell
-- [number] Maximum range from the target at which you can cast the spell -- [number] Maximum range from the target at which you can cast the spell
-- [number] The numeric spell-id of the spell -- [number] Spell's index in the book
-- [number] The type of the spellbook that the spell is in -- [number] The type of the spellbook that the spell is in
-- [number] The numeric spell-id of the spell
local spellinfo = {} local spellinfo = {}
function libspell.GetSpellInfo(index, bookType) function libspell.GetSpellInfo(index, bookType)
local cache = spellinfo[index] local cache = spellinfo[index]
if cache then return cache[1], cache[2], cache[3], cache[4], cache[5], cache[6], cache[7], cache[8] end if cache then return unpack(cache) end
local slot local slot
if type(index) == "string" then if type(index) == "string" then
@@ -108,10 +109,10 @@ function libspell.GetSpellInfo(index, bookType)
-- ClassicAPI's GetSpellInfo returns: name, rank, icon, cost, isFunnel, powerType, -- ClassicAPI's GetSpellInfo returns: name, rank, icon, cost, isFunnel, powerType,
-- castTime(ms), minRange, maxRange, spellID. Keep libspell's historical positional -- castTime(ms), minRange, maxRange, spellID. Keep libspell's historical positional
-- shape (castingTime at 4, ranges at 5/6, slot+bookType at 7/8). -- shape (castingTime at 4, ranges at 5/6, slot+bookType at 7/8).
local name, rank, icon, _, _, _, castingTime, minRange, maxRange = GetSpellInfo(slot, bookType) local name, rank, icon, _, _, _, castingTime, minRange, maxRange, spellId = GetSpellInfo(slot, bookType)
spellinfo[index] = { name, rank, icon, castingTime, minRange, maxRange, slot, bookType } spellinfo[index] = SafePack(name, rank, icon, castingTime, minRange, maxRange, slot, bookType, spellId)
return name, rank, icon, castingTime, minRange, maxRange, slot, bookType return name, rank, icon, castingTime, minRange, maxRange, slot, bookType, spellId
end end
-- Reset all spell caches whenever new spells are learned/unlearned -- Reset all spell caches whenever new spells are learned/unlearned
+11 -12
View File
@@ -371,12 +371,12 @@ pfUI:RegisterModule("actionbar", function ()
-- active conditional dynamically, instead of being frozen to the first -- active conditional dynamically, instead of being frozen to the first
-- statically-scanned spell. -- statically-scanned spell.
if CleveRoids and CleveRoids.IsManagedAction and CleveRoids.IsManagedAction(self.id) then if CleveRoids and CleveRoids.IsManagedAction and CleveRoids.IsManagedAction(self.id) then
self.spellslot, self.booktype = nil, nil self.spellslot, self.booktype, self.spellID = nil, nil, nil
return return
end end
local kind, slot = GetActionInfo(self.id) local kind, slot = GetActionInfo(self.id)
self.spellslot, self.booktype = nil, nil self.spellslot, self.booktype, self.spellID = nil, nil, nil
if kind == 'macro' then if kind == 'macro' then
local name, _, body = GetMacroInfo(slot) local name, _, body = GetMacroInfo(slot)
@@ -414,10 +414,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
if match then if match then
local _, _, spell, rank = string.find(match, '(.+)%((.+)%)') self.spellslot, self.booktype, self.spellID = select(7, libspell.GetSpellInfo(match))
spell = spell or match
self.spellslot, self.booktype = libspell.GetSpellIndex(spell, rank)
if self.spellslot and self.spellslot > 0 then return end if self.spellslot and self.spellslot > 0 then return end
end end
end end
@@ -426,7 +423,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
local function ButtonEnter(self) local function ButtonEnter(self)
local self = self or this self = self or this
-- indicate that dragging could get enabled -- indicate that dragging could get enabled
drag_await = true drag_await = true
@@ -444,6 +441,8 @@ pfUI:RegisterModule("actionbar", function ()
else else
GameTooltip:SetPetAction(self.id) GameTooltip:SetPetAction(self.id)
end end
elseif self.spellID then
GameTooltip:SetSpellByID(self.spellID)
elseif self.spellslot and self.booktype then elseif self.spellslot and self.booktype then
GameTooltip:SetSpell(self.spellslot, self.booktype) GameTooltip:SetSpell(self.spellslot, self.booktype)
else else
@@ -454,7 +453,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
local function ButtonLeave(self) local function ButtonLeave(self)
local self = self or this self = self or this
-- no longer wait for a drag event -- no longer wait for a drag event
drag_await = nil drag_await = nil
@@ -467,7 +466,7 @@ pfUI:RegisterModule("actionbar", function ()
local grid, sid, id, bar, active, texture, _ local grid, sid, id, bar, active, texture, _
local function ButtonSlotUpdate(self) local function ButtonSlotUpdate(self)
if not self then return end if not self then return end
local self = self or this self = self or this
sid = self.id -- 1 to 120 sid = self.id -- 1 to 120
-- reset shared variables -- reset shared variables
@@ -586,7 +585,7 @@ pfUI:RegisterModule("actionbar", function ()
local sid, usable, oom, _ local sid, usable, oom, _
local function ButtonUsableUpdate(self) local function ButtonUsableUpdate(self)
local self = self or this self = self or this
sid = self.id -- 1 to 120 sid = self.id -- 1 to 120
if self.bar == 11 then if self.bar == 11 then
@@ -622,7 +621,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
local function ButtonRangeUpdate(self) local function ButtonRangeUpdate(self)
local self = self or this self = self or this
-- update range display -- update range display
if C.bars.glowrange == "1" and self.bar ~= 11 and self.bar ~= 12 and HasAction(self.id) and ActionHasRange(self.id) and IsActionInRange(self.id) == 0 then if C.bars.glowrange == "1" and self.bar ~= 11 and self.bar ~= 12 and HasAction(self.id) and ActionHasRange(self.id) and IsActionInRange(self.id) == 0 then
@@ -700,7 +699,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
local function BarsEvent(self) local function BarsEvent(self)
local self = self or this self = self or this
-- refresh only specific slots -- refresh only specific slots
if event == "ACTIONBAR_SLOT_CHANGED" and arg1 and arg1 ~= 0 then if event == "ACTIONBAR_SLOT_CHANGED" and arg1 and arg1 ~= 0 then