From 442d4c7be7ca0f09ed9074beb5015c84748c447a Mon Sep 17 00:00:00 2001 From: Meow <30401521+me0wg4ming@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:28:14 +0200 Subject: [PATCH] hook for Downrank protection --- libs/libdebuff.lua | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/libs/libdebuff.lua b/libs/libdebuff.lua index a1f6d086..ccb42bdc 100644 --- a/libs/libdebuff.lua +++ b/libs/libdebuff.lua @@ -1342,13 +1342,33 @@ if hasNampower then end -- Store in pendingCasts for DEBUFF_ADDED correlation + -- Downrank protection: don't write pending if a higher rank is still active. + -- Without this check SuperCleveRoid (and other hook consumers) would see the + -- spell as "pending" even though libdebuff will later block the actual update. if targetGuid then pendingCasts[targetGuid] = pendingCasts[targetGuid] or {} - pendingCasts[targetGuid][spellName] = { - casterGuid = casterGuid, - rank = castRank, - time = GetTime() - } + local pendingBlocked = false + if castRank > 0 then + local existingOwn = ownDebuffs[targetGuid] and ownDebuffs[targetGuid][spellName] + if existingOwn and existingOwn.rank and existingOwn.rank > castRank then + local existingTimeleft = (existingOwn.startTime + existingOwn.duration) - GetTime() + if existingTimeleft > 0 then + pendingBlocked = true + if debugStats.enabled then + DEFAULT_CHAT_FRAME:AddMessage(string.format( + "|cffff0000[PENDING BLOCKED]|r %s: Rank %d cannot enter pending (Rank %d active, %.1fs left)", + spellName, castRank, existingOwn.rank, existingTimeleft)) + end + end + end + end + if not pendingBlocked then + pendingCasts[targetGuid][spellName] = { + casterGuid = casterGuid, + rank = castRank, + time = GetTime() + } + end end -- selfdebuff mode: write ownDebuffs immediately on confirmed hit