From 8888038f1efb1d0222f4054f75d78bd2ce81d4a8 Mon Sep 17 00:00:00 2001 From: QAston Date: Mon, 20 Apr 2009 18:58:35 +0200 Subject: *Prevent useless area aura reapplying in some cases --HG-- branch : trunk --- src/game/SpellAuras.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 6d3b9bb5424..ea3746e8b46 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -744,7 +744,25 @@ void AreaAuraEffect::Update(uint32 diff) for(std::list::iterator tIter = targets.begin(); tIter != targets.end(); tIter++) { - if((*tIter)->HasAuraEffect(GetId(), GetEffIndex(), caster->GetGUID())) + bool skip=false; + for(Unit::AuraMap::iterator iter = (*tIter)->GetAuras().begin(); iter != (*tIter)->GetAuras().end();++iter) + { + bool samecaster = iter->second->GetCasterGUID() == GetCasterGUID(); + if (samecaster && iter->first == GetId()) + { + if (AuraEffect * aurEff = iter->second->GetPartAura(m_effIndex)) + { + skip=true; + } + break; + } + if (spellmgr.IsNoStackSpellDueToSpell(GetId(), iter->first,samecaster)) + { + skip=true; + break; + } + } + if(skip) continue; if(SpellEntry const *actualSpellInfo = spellmgr.SelectAuraRankForPlayerLevel(GetSpellProto(), (*tIter)->getLevel())) -- cgit v1.2.3