From cfd890628fba774ade5750f74fbd8035cfb74f52 Mon Sep 17 00:00:00 2001 From: megamage Date: Thu, 25 Dec 2008 10:36:00 -0600 Subject: *Update spell target selection about area auras. --HG-- branch : trunk --- src/game/Spell.cpp | 15 ++++++++------- src/game/SpellMgr.cpp | 5 +++++ 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 6f5dd73f724..c4a73950381 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -409,10 +409,11 @@ void Spell::FillTargetMap() if(!m_spellInfo->Effect[i]) continue; - // TODO: find a way so this is not needed? - // for area auras always add caster as target (needed for totems for example) - if(IsAreaAuraEffect(m_spellInfo->Effect[i])) - AddUnitTarget(m_caster, i); + uint32 effectTargetType = spellmgr.EffectTargetType[m_spellInfo->Effect[i]]; + + // is it possible that areaaura is not applied to caster? + if(effectTargetType == SPELL_REQUIRE_NONE) + continue; std::list tmpUnitMap; uint32 targetA = m_spellInfo->EffectImplicitTargetA[i]; @@ -423,9 +424,9 @@ void Spell::FillTargetMap() if(targetB) // In very rare case !A && B SetTargetMap(i, targetB, tmpUnitMap); - if(spellmgr.EffectTargetType[m_spellInfo->Effect[i]] != SPELL_REQUIRE_UNIT) + if(effectTargetType != SPELL_REQUIRE_UNIT) { - if(spellmgr.EffectTargetType[m_spellInfo->Effect[i]] == SPELL_REQUIRE_DEST) + if(effectTargetType == SPELL_REQUIRE_DEST) { if(m_targets.HasDest() && m_spellInfo->speed > 0.0f) { @@ -434,7 +435,7 @@ void Spell::FillTargetMap() m_delayMoment = (uint64) floor(dist / m_spellInfo->speed * 1000.0f); } } - else if(spellmgr.EffectTargetType[m_spellInfo->Effect[i]] == SPELL_REQUIRE_ITEM) + else if(effectTargetType == SPELL_REQUIRE_ITEM) { if(m_targets.getItemTarget()) AddItemTarget(m_targets.getItemTarget(), i); diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 78175708cba..2e285ea7176 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -64,6 +64,11 @@ SpellMgr::SpellMgr() //case SPELL_EFFECT_LEARN_SPELL: // 0 may be 5 pet case SPELL_EFFECT_TRADE_SKILL: // 0 or 1 case SPELL_EFFECT_PROFICIENCY: // 0 + case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: + case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: + case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: + case SPELL_EFFECT_APPLY_AREA_AURA_PET: + case SPELL_EFFECT_APPLY_AREA_AURA_OWNER: EffectTargetType[i] = SPELL_REQUIRE_NONE; break; case SPELL_EFFECT_ENCHANT_ITEM: -- cgit v1.2.3