Skip to content

Commit

Permalink
Spell: Fix passing of wrong proc flag to PROC_EX_CAST_END event and m…
Browse files Browse the repository at this point in the history
…inor logic simplification
  • Loading branch information
killerwife committed Nov 21, 2023
1 parent 4e8b096 commit 38a0373
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
14 changes: 10 additions & 4 deletions src/game/Spells/Spell.cpp
Expand Up @@ -3806,17 +3806,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
{
Unit::ProcDamageAndSpell(ProcSystemArguments(m_caster, procTarget, PROC_EX_NORMAL_HIT, 0, PROC_EX_CAST_END, 0, 0, m_attackType, m_spellInfo));

// Immediate spell, no big deal
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();
}

Expand Down
4 changes: 3 additions & 1 deletion src/game/Spells/SpellAuras.cpp
Expand Up @@ -978,11 +978,13 @@ bool Aura::CanProcFrom(SpellEntry const* spell, uint32 /*procFlag*/, uint32 Even
// 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)
Expand Down

0 comments on commit 38a0373

Please sign in to comment.