Skip to content

fix: resolve the interrupt from the summoned pet, not the last known id - #1139

Merged
EllesmereGaming merged 2 commits into
EllesmereGaming:mainfrom
dfrisone:warlock-demo-pet-interrupt
Aug 2, 2026
Merged

fix: resolve the interrupt from the summoned pet, not the last known id#1139
EllesmereGaming merged 2 commits into
EllesmereGaming:mainfrom
dfrisone:warlock-demo-pet-interrupt

Conversation

@dfrisone

@dfrisone dfrisone commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Problem

Reported for Demonology Warlocks: the target cast bar shows the wrong interrupt state and the kick-prediction tick sits in the wrong place. Kicking with the Felguard changes nothing on screen -- the bar stays tinted "interrupt ready". Other Warlock specs were reported as fine.

Cause

RefreshKickAbility treated the player and pet spell books as one pool and kept the last entry that answered as known, with no break:

for i = 1, #classKicks do
    local spellId = classKicks[i]
    ...
    if known or petKnown then
        activeKickSpell = spellId    -- no break, so the last match wins
    end
end

Resolution therefore depended on the order of the class table rather than on what the player can actually cast. A Demonology Warlock's only interrupt is the Felguard's Axe Toss, but a later Warlock entry also answered and overwrote it, leaving activeKickSpell pointing at a spell that never fires.

Both reported symptoms follow from that single value: ComputeCastBarTint and the kick-prediction tick each read the cooldown of activeKickSpell, so if it names the wrong spell the tint never leaves "ready" and the tick is placed off a cooldown that never moves.

Fix

The pet book now wins. A summoned demon's interrupt is the interrupt, and which demon is out is unambiguous in a way "which id answered last" is not.

Last-match is preserved within each bank, so no other class's resolution changes -- only the pet-over-player precedence is new. Classes with no pet entries resolve exactly as before.

Also re-resolves on UNIT_PET for the player. Swapping demons swaps the interrupt, and now that resolution reads the pet book it has to re-run on that swap. SPELLS_CHANGED covers most cases but is not guaranteed for every summon, and a stale pick is invisible until the user kicks.

A note on scope

A standalone harness over the resolution logic shows Affliction and Destruction flipping as well, but that rests on an assumption about which ids report as known in those states, and the reporter observed no problem there. That result is offered as evidence of the ordering hazard, not as a claim about those specs. The change is correct either way, since the pet book is authoritative for which demon is actually summoned.

Testing

luac -p clean. Verified in game on a Demonology Warlock: with a Felguard out, kicking with Axe Toss now flips the cast bar to the on-cooldown tint immediately, and the prediction tick lands where Axe Toss actually returns. Re-checked across a Felguard to Felhunter swap, which exercises the UNIT_PET re-resolve.

Reviewers can see the state most clearly with Unit Frames > Target > CAST BAR > cog > Show Kick Ready Mid-Cast Bar enabled, and visibly distinct colours set for Interruptible and Interrupt on CD.

Demonology Warlocks saw the target cast bar tinted with the wrong
interrupt state and a wrong kick-prediction tick: kicking with the
Felguard changed nothing on screen, because the tracked spell was never
the one being cast.

RefreshKickAbility treated the player and pet spell books as one pool and
kept the LAST entry that answered as known, with no break. Resolution
therefore depended on the order of the class table rather than on what
the player can actually cast. A Demonology Warlock's only interrupt is
the Felguard's Axe Toss, but a later Warlock entry also answered and
overwrote it, leaving the tint and the prediction reading the cooldown of
a spell that never fires.

The pet book now wins: a summoned demon's interrupt IS the interrupt, and
that is unambiguous in a way "which id answered last" is not. Last-match
is preserved within each bank, so no other class's resolution changes --
only the pet-over-player precedence is new.

Also re-resolve on UNIT_PET for the player. Swapping demons swaps the
interrupt, and now that resolution reads the pet book it has to re-run on
that swap. SPELLS_CHANGED covers most cases but is not guaranteed for
every summon, and a stale pick is invisible until the user kicks.
@EllesmereGaming
EllesmereGaming merged commit 14f68d7 into EllesmereGaming:main Aug 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants