From 43e45c2b3565065bc0ff9e69313f002083d67e7e Mon Sep 17 00:00:00 2001 From: Laise Date: Sat, 30 Jul 2011 09:37:50 +0300 Subject: [PATCH] [11761] change conditions for default cast end proc --- src/game/SpellAuras.cpp | 20 +++++++++++++------- src/game/SpellMgr.h | 25 +++++++++++++++++++++++-- src/game/Unit.cpp | 10 +++++++--- src/shared/revision_nr.h | 2 +- 4 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index c3889aa19..0b373e3d7 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -860,6 +860,18 @@ bool Aura::CanProcFrom(SpellEntry const *spell, uint32 procFlag, uint32 EventPro // Check EffectClassMask ClassFamilyMask const& mask = GetAuraSpellClassMask(); + // allow proc for modifier auras with charges + if (IsCastEndProcModifierAura(GetSpellProto(), GetEffIndex(), spell)) + { + if (GetHolder()->GetAuraCharges() > 0) + { + if (procEx != PROC_EX_CAST_END && EventProcEx == PROC_EX_NONE) + return false; + } + } + else if (EventProcEx == PROC_EX_NONE && procEx == PROC_EX_CAST_END) + return false; + // if no class mask defined, or spell_proc_event has SpellFamilyName=0 - allow proc if (!useClassMask || !mask) { @@ -868,14 +880,8 @@ bool Aura::CanProcFrom(SpellEntry const *spell, uint32 procFlag, uint32 EventPro // Check for extra req (if none) and hit/crit if (EventProcEx == PROC_EX_NONE) { - // allow proc for modifier auras with charges - if (procEx == PROC_EX_CAST_END - && IsModifierAura(GetSpellProto(), GetEffIndex()) - && GetHolder()->GetAuraCharges() > 0) - return true; - // No extra req, so can trigger only for active (damage/healing present) and hit/crit - if((procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) && active) + if(((procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) && active) || procEx == PROC_EX_CAST_END) return true; else return false; diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 576d44ab2..a781ed5bd 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -164,15 +164,36 @@ inline bool IsPeriodicRegenerateEffect(SpellEntry const *spellInfo, SpellEffectI } } -inline bool IsModifierAura(SpellEntry const *spellInfo, SpellEffectIndex effecIdx) +inline bool IsCastEndProcModifierAura(SpellEntry const *spellInfo, SpellEffectIndex effecIdx, SpellEntry const *procSpell) { // modifier auras that can proc on cast end switch (AuraType(spellInfo->EffectApplyAuraName[effecIdx])) { case SPELL_AURA_ADD_FLAT_MODIFIER: case SPELL_AURA_ADD_PCT_MODIFIER: + { + switch (spellInfo->EffectMiscValue[effecIdx]) + { + case SPELLMOD_RANGE: + case SPELLMOD_RADIUS: + case SPELLMOD_NOT_LOSE_CASTING_TIME: + case SPELLMOD_CASTING_TIME: + case SPELLMOD_COOLDOWN: + case SPELLMOD_COST: + case SPELLMOD_GLOBAL_COOLDOWN: + return true; + default: + break; + } + } case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE: - return true; + { + for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i) + if (IsEffectHandledOnDelayedSpellLaunch(procSpell, SpellEffectIndex(i))) + return true; + + return false; + } default: return false; } diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1b414da8e..6da2665b2 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -9752,10 +9752,14 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag // don't allow proc from cast end for non modifier spells // unless they have proc ex defined for that - if (spellProcEvent->procEx == PROC_EX_NONE - && procExtra == PROC_EX_CAST_END - && (!IsModifierAura(triggeredByHolder->GetSpellProto(), SpellEffectIndex(i)) || !useCharges)) + if (IsCastEndProcModifierAura(triggeredByHolder->GetSpellProto(), SpellEffectIndex(i), procSpell)) + { + if (useCharges && procExtra != PROC_EX_CAST_END && spellProcEvent->procEx == PROC_EX_NONE) + continue; + } + else if (spellProcEvent->procEx == PROC_EX_NONE && procExtra == PROC_EX_CAST_END) continue; + } // don't check dbc FamilyFlags if schoolMask exists else if (!triggeredByAura->CanProcFrom(procSpell, procFlag, spellProcEvent->procEx, procExtra, damage != 0, !spellProcEvent->schoolMask)) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7c600c6f9..702b7f247 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11760" + #define REVISION_NR "11761" #endif // __REVISION_NR_H__