diff --git a/src/game/Spells/Spell.cpp b/src/game/Spells/Spell.cpp index b6cc63a370..9f76ae8d94 100644 --- a/src/game/Spells/Spell.cpp +++ b/src/game/Spells/Spell.cpp @@ -3221,16 +3221,23 @@ SpellCastResult Spell::cast(bool skipCheck) } } + uint32 procAttacker; + uint32 procVictim; + uint32 procEx = PROC_EX_NONE; + PrepareMasksForProcSystem(EFFECT_MASK_ALL, procAttacker, procVictim, m_trueCaster, nullptr); // on spell cast end proc, // critical hit related part is currently done on hit so proc there, // 0 damage since any damage based procs should be on hit // 0 victim proc since there is no victim proc dependent on successfull cast for caster - Unit::ProcDamageAndSpell(ProcSystemArguments(m_caster, procTarget, PROC_EX_NORMAL_HIT, 0, PROC_EX_CAST_END, 0, 0, m_attackType, m_spellInfo)); + Unit::ProcDamageAndSpell(ProcSystemArguments(m_caster, procTarget, procAttacker, 0, PROC_EX_CAST_END, 0, 0, m_attackType, m_spellInfo)); } else // Immediate spell, no big deal { - - Unit::ProcDamageAndSpell(ProcSystemArguments(m_caster, procTarget, PROC_EX_NORMAL_HIT, 0, PROC_EX_CAST_END, 0, 0, m_attackType, m_spellInfo)); + uint32 procAttacker; + uint32 procVictim; + uint32 procEx = PROC_EX_NONE; + PrepareMasksForProcSystem(EFFECT_MASK_ALL, procAttacker, procVictim, m_trueCaster, nullptr); + Unit::ProcDamageAndSpell(ProcSystemArguments(m_caster, procTarget, procAttacker, 0, PROC_EX_CAST_END, 0, 0, m_attackType, m_spellInfo)); handle_immediate(); } diff --git a/src/game/Spells/SpellAuras.cpp b/src/game/Spells/SpellAuras.cpp index a2843c7fbb..935550e7c0 100644 --- a/src/game/Spells/SpellAuras.cpp +++ b/src/game/Spells/SpellAuras.cpp @@ -755,11 +755,13 @@ bool Aura::CanProcFrom(SpellEntry const* spell, uint32 EventProcEx, uint32 procE // Check for extra req (if none) and hit/crit if (EventProcEx == PROC_EX_NONE) { + if ((procEx & PROC_EX_CAST_END) != 0) // cast end does not care about damage/healing + return true; if ((procEx & PROC_EX_ABSORB) && absorbing) // trigger ex absorb procs even if no damage is dealt return true; // No extra req, so can trigger only for active (damage/healing present) and hit/crit - return ((procEx & (PROC_EX_NORMAL_HIT | PROC_EX_CRITICAL_HIT)) && damaging) || (procEx & PROC_EX_CAST_END) != 0; + return ((procEx & (PROC_EX_NORMAL_HIT | PROC_EX_CRITICAL_HIT)) && damaging); } // Passive spells hits here only if resist/reflect/immune/evade // Passive spells can`t trigger if need hit (exclude cases when procExtra include non-active flags)