From 11488f2063b6340630e38f50f0d64da69dd9dfb8 Mon Sep 17 00:00:00 2001 From: megamage Date: Wed, 5 Aug 2009 15:35:43 -0500 Subject: [PATCH] [8295] Remove single target auras at caster/target shift to not accessable phase. Author: VladimirMangos This must fix another source of "Couldn't find the caster of the single target aura" errors. --HG-- branch : trunk --- src/game/Unit.cpp | 27 ++++++++++++++++++++++----- src/game/Unit.h | 5 ++++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 4622c4cfe9e..3bd529be8f1 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4174,13 +4174,24 @@ void Unit::RemoveAurasByTypeWithDispel(AuraType auraType, Spell * spell) } } -void Unit::RemoveNotOwnSingleTargetAuras() +void Unit::RemoveNotOwnSingleTargetAuras(uint32 newPhase) { // single target auras from other casters for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); ) { if (iter->second->GetCasterGUID()!=GetGUID() && IsSingleTargetSpell(iter->second->GetSpellProto())) - RemoveAura(iter); + { + if(!newPhase) + RemoveAura(iter); + else + { + Unit* caster = iter->second->GetCaster(); + if(!caster || !caster->InSamePhase(newPhase)) + RemoveAura(iter); + else + ++iter; + } + } else ++iter; } @@ -4189,12 +4200,12 @@ void Unit::RemoveNotOwnSingleTargetAuras() AuraList& scAuras = GetSingleCastAuras(); for (AuraList::iterator iter = scAuras.begin(); iter != scAuras.end();) { - Aura * aur=*iter; + Aura * aura=*iter; ++iter; - if (aur->GetTarget()!=this) + if (aura->GetTarget() != this && !aura->GetTarget()->InSamePhase(newPhase)) { uint32 removedAuras = m_removedAurasCount; - aur->GetTarget()->RemoveAura(aur->GetId(),aur->GetCasterGUID()); + aura->GetTarget()->RemoveAura(aura->GetId(),aura->GetCasterGUID()); if (removedAuras+1