Skip to content

ClickCast/Quickdraw: Warlock pet dispel unusable under Grimoire of Sacrifice #2155

Description

@lkshrk

With Grimoire of Sacrifice active, the Warlock dispel binding in ClickCasting/Quickdraw stops working.

Singe Magic is the only Warlock dispel in the preset list and it is flagged as a pet spell (EllesmereUIRaidFrames/EUI_RaidFrames_ClickCast.lua:82):

{ id = 89808,  name = "Singe Magic",   class = "WARLOCK", pet = true }, -- Imp

That flag routes it into the known-check bypass (lines 336-345):

local PET_SPELL_IDS = {}
for _, sp in ipairs(DISPEL_SPELLS) do
    if sp.pet then PET_SPELL_IDS[sp.id] = true end
end

local function IsSpellIDKnown(id)
    if type(id) ~= "number" or id <= 0 or PET_SPELL_IDS[id] then return true end
    local bank = Enum.SpellBookSpellBank and Enum.SpellBookSpellBank.Player

So the binding is always reported known and is never filtered out - but under Grimoire of Sacrifice there is no pet, so the cast itself has nothing to go to. The bypass hides the state rather than resolving it, which is why it presents as a binding that exists but does nothing.

Grimoire of Sacrifice (108503) is already understood elsewhere in the codebase - AuraBuffReminders suppresses its pet reminders via the Sacrifice aura (EllesmereUIAuraBuffReminders.lua:4079):

if Known(108503) and PlayerHasAuraByID({196099}) then suppress = true end

and the CDM interrupt resolver walks overrides and the Pet bank explicitly, with a comment that Command Demon can stay known while the castable form changes (EllesmereUICooldownManager.lua:6514-6532, ns.ResolveCastableInterrupt). ClickCast's IsSpellIDKnown does neither - it only ever consults Enum.SpellBookSpellBank.Player and otherwise short-circuits.

So there is an existing in-repo pattern (resolve through FindSpellOverrideByID / check the Pet bank / detect the 196099 aura) that the ClickCast path does not use. Whether a sacrificed Warlock should keep a working dispel binding at all is a design call - Grimoire of Sacrifice does not grant a replacement dispel, so the honest outcome may be to hide the binding rather than make it castable.

Environment: retail, EllesmereUI 9.2.1.

This path is secure/taint-sensitive, so flagging rather than patching blind. Reported from source reading; not reproduced on a live character.


Filed by an AI agent (OpenHands) on behalf of the repo user.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions