Skip to content

Commit

Permalink
Fix cooldown display for overridden spells
Browse files Browse the repository at this point in the history
When a spell is overridden by another, our cooldown bar stops being able to track it. Normally this is fine if the spell completely changes as you probably don't expect a cd bar for Backstab to track Gloomblade.

But when the overridden spell shares the same name as the base spell, such as Fire Breath for Evokers with the Font of Magic talent, you very much would expect the bar to track both.

With this fix, tracking the base spell will show the cd for the overridden version as well.
  • Loading branch information
parnic committed Aug 26, 2024
1 parent 43aa303 commit 42e76dd
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 5 deletions.
4 changes: 4 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

v1.15.7:

- Fix cooldown display for overridden spells (such as Evoker spells where Font of Magic replaces the base spell with an override with the same name).

v1.15.6:

- Package new version of LibDogTag-Unit to fix an error with some units on 11.0.2
Expand Down
21 changes: 16 additions & 5 deletions modules/CustomCDBar.lua
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then

local info = C_Spell.GetSpellInfo(id)
if info then
return info.name, nil, info.iconID
return info.name, nil, info.iconID, info.spellID
end
end
end
Expand Down Expand Up @@ -636,8 +636,18 @@ end

-- 'Protected' methods --------------------------------------------------------

function IceCustomCDBar.prototype:GetCooldownDurationOverride(spellID)
if spellID and FindSpellOverrideByID then
local override = FindSpellOverrideByID(spellID)
if override and override ~= spellID then
return self:GetCooldownDuration(override)
end
end
end

function IceCustomCDBar.prototype:GetCooldownDuration(buffName)
buffName = self:GetSpellNameOrId(buffName)
local spellID
buffName, spellID = self:GetSpellNameOrId(buffName)

local now = GetTime()
local localRemaining = nil
Expand All @@ -646,7 +656,7 @@ function IceCustomCDBar.prototype:GetCooldownDuration(buffName)
if hasCooldown then
-- the item has a potential cooldown
if localDuration <= 1.5 then
return nil, nil
return self:GetCooldownDurationOverride(spellID)
end

localRemaining = localDuration + (localStart - now)
Expand All @@ -657,7 +667,7 @@ function IceCustomCDBar.prototype:GetCooldownDuration(buffName)

return localDuration, localRemaining
else
return nil, nil
return self:GetCooldownDurationOverride(spellID)
end
end

Expand Down Expand Up @@ -868,7 +878,8 @@ function IceCustomCDBar.prototype:IsReady()
end

function IceCustomCDBar.prototype:GetSpellNameOrId(spellName)
return spellName
local id = select(4, GetSpellInfo(spellName))
return spellName, id
end

function IceCustomCDBar.prototype:Show(bShouldShow, bForceHide)
Expand Down
4 changes: 4 additions & 0 deletions this_version.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

v1.15.7:

- Fix cooldown display for overridden spells (such as Evoker spells where Font of Magic replaces the base spell with an override with the same name).

v1.15.6:

- Package new version of LibDogTag-Unit to fix an error with some units on 11.0.2
Expand Down

0 comments on commit 42e76dd

Please sign in to comment.