fixed castbar for channeling units

This commit is contained in:
Meow
2026-03-22 10:38:53 +01:00
parent aced71a75f
commit 68ff49be24
3 changed files with 21 additions and 6 deletions
+6 -3
View File
@@ -1200,7 +1200,9 @@ if hasNampower then
local itemId = arg1
local spellId = arg2
local casterGuid = arg3
local castTime = arg6
local spellType = arg8 or 0 -- 0=Normal, 1=Channel, 2=Autorepeating
local isChannel = spellType == 1
local castTime = isChannel and arg7 or arg6 -- arg6=castTime (normal), arg7=duration (channel)
if not casterGuid or not spellId then return end
@@ -1244,7 +1246,7 @@ if hasNampower then
startTime = GetTime(),
duration = castTime and castTime / 1000 or 0,
endTime = castTime and (GetTime() + castTime / 1000) or nil,
event = "START"
event = isChannel and "CHANNEL" or "START"
}
if event == "SPELL_START_SELF" and pfUI.libdebuff_spell_start_self_hooks then
@@ -1267,8 +1269,9 @@ if hasNampower then
-- Clear cast bar only if SPELL_GO matches the active cast
-- (Reactive procs like Frost Armor trigger SPELL_GO but shouldn't clear the castbar)
-- Don't clear channels on SPELL_GO - channels persist until duration expires or SPELL_FAILED
if casterGuid and pfUI.libdebuff_casts[casterGuid] then
if pfUI.libdebuff_casts[casterGuid].spellID == spellId then
if pfUI.libdebuff_casts[casterGuid].spellID == spellId and pfUI.libdebuff_casts[casterGuid].event ~= "CHANNEL" then
pfUI.libdebuff_casts[casterGuid] = nil
end
end
+4 -1
View File
@@ -120,12 +120,15 @@ pfUI:RegisterModule("castbar", "vanilla", function ()
if castData.event == "CAST" or castData.event == "FAIL" then
castBlocked = true
pfUI.libdebuff_casts[focusGuid] = nil
elseif castData.event == "START" and castData.endTime and castData.endTime > GetTime() then
elseif (castData.event == "START" or castData.event == "CHANNEL") and castData.endTime and castData.endTime > GetTime() then
cast = castData.spellName
texture = castData.icon
startTime = castData.startTime * 1000
endTime = castData.endTime * 1000
nameSubtext = ""
if castData.event == "CHANNEL" then
channel = cast
end
end
end
+11 -2
View File
@@ -1579,8 +1579,17 @@ nameplates:RegisterEvent("ZONE_CHANGED_NEW_AREA")
local channel, cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
if targetGUID then
-- We have a GUID = Nampower is authority, no cast means no cast
nameplate.castbar:Hide()
-- We have a GUID but Nampower has no cast info.
-- Fall back to API for the target plate (channels may not be in cast cache)
if isTargetPlate and UnitExists("target") then
cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo("target")
if not cast then
channel, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo("target")
end
end
if not cast and not channel then
nameplate.castbar:Hide()
end
elseif isTargetPlate and UnitExists("target") then
cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo("target")
if not cast then