From 8d30f01a73b9e8c2e800e2c3a8c181b857bcc272 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Fri, 14 Aug 2009 04:07:03 +0400 Subject: [PATCH] [8369] Some step back in triggered effect caster selection. This must fix some broken after [8360] spells. --- src/game/SpellEffects.cpp | 15 ++++++++++++--- src/game/SpellMgr.h | 15 ++++++++++++--- src/shared/revision_nr.h | 2 +- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 1f563791b..60ac24616 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1961,7 +1961,7 @@ void Spell::EffectForceCast(uint32 i) unitTarget->CastSpell(unitTarget, spellInfo, true, NULL, NULL, m_originalCasterGUID); } -void Spell::EffectTriggerSpell(uint32 i) +void Spell::EffectTriggerSpell(uint32 effIndex) { // only unit case known if (!unitTarget) @@ -1971,7 +1971,7 @@ void Spell::EffectTriggerSpell(uint32 i) return; } - uint32 triggered_spell_id = m_spellInfo->EffectTriggerSpell[i]; + uint32 triggered_spell_id = m_spellInfo->EffectTriggerSpell[effIndex]; // special cases switch(triggered_spell_id) @@ -2087,6 +2087,9 @@ void Spell::EffectTriggerSpell(uint32 i) return; } + // select formal caster for triggered spell + Unit* caster = m_caster; + // some triggered spells require specific equipment if (spellInfo->EquippedItemClass >=0 && m_caster->GetTypeId()==TYPEID_PLAYER) { @@ -2118,8 +2121,14 @@ void Spell::EffectTriggerSpell(uint32 i) return; } } + else + { + // Note: not exist spells with weapon req. and IsSpellHaveCasterSourceTargets == true + // so this just for speedup places in else + caster = IsSpellWithCasterSourceTargetsOnly(spellInfo) ? unitTarget : m_caster; + } - unitTarget->CastSpell(unitTarget,spellInfo,true,NULL,NULL,m_originalCasterGUID); + caster->CastSpell(unitTarget,spellInfo,true,NULL,NULL,m_originalCasterGUID); } void Spell::EffectTriggerMissileSpell(uint32 effect_idx) diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 532779d78..e225aa1c3 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -240,9 +240,18 @@ inline bool IsCasterSourceTarget(uint32 target) inline bool IsSpellWithCasterSourceTargetsOnly(SpellEntry const* spellInfo) { for(int i = 0; i < 3; ++i) - if(uint32 target = spellInfo->EffectImplicitTargetA[i]) - if(!IsCasterSourceTarget(target)) - return false; + { + uint32 targetA = spellInfo->EffectImplicitTargetA[i]; + if(targetA && !IsCasterSourceTarget(targetA)) + return false; + + uint32 targetB = spellInfo->EffectImplicitTargetB[i]; + if(targetB && !IsCasterSourceTarget(targetB)) + return false; + + if(!targetA && !targetB) + return false; + } return true; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a4de1abf0..b18094243 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 "8368" + #define REVISION_NR "8369" #endif // __REVISION_NR_H__