diff options
| author | megamage <none@none> | 2008-12-25 10:36:00 -0600 | 
|---|---|---|
| committer | megamage <none@none> | 2008-12-25 10:36:00 -0600 | 
| commit | cfd890628fba774ade5750f74fbd8035cfb74f52 (patch) | |
| tree | 875e6bf79517bd50db5d154cbdf8dd27d26f32a7 | |
| parent | 7438fc6dd74fc8c971e66660bbc63b6680a16f5c (diff) | |
*Update spell target selection about area auras.
--HG--
branch : trunk
| -rw-r--r-- | src/game/Spell.cpp | 15 | ||||
| -rw-r--r-- | src/game/SpellMgr.cpp | 5 | 
2 files changed, 13 insertions, 7 deletions
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<Unit*> 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:  | 
