diff options
Diffstat (limited to 'src/game/Unit.cpp')
-rw-r--r-- | src/game/Unit.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index d4c7b1de61f..8d16842145a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -181,6 +181,9 @@ Unit::~Unit() RemoveAllDynObjects(); if(m_charmInfo) delete m_charmInfo; + + RemoveAllAuras(); + assert(m_Auras.begin() == m_Auras.end()); } void Unit::Update( uint32 p_time ) @@ -3973,18 +3976,7 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode) } } - if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(-(int32)Aur->GetSpellProto()->Id)) - { - for(std::vector<int32>::const_iterator itr = spell_triggered->begin(); itr != spell_triggered->end(); ++itr) - { - if(spell_triggered < 0) - RemoveAurasDueToSpell(-(*itr)); - else if(Unit* caster = Aur->GetCaster()) - CastSpell(this, *itr, true, 0, 0, caster->GetGUID()); - } - } - - sLog.outDebug("Aura %u now is remove mode %d",Aur->GetModifier()->m_auraname, mode); + sLog.outDebug("Aura %u (%u) now is remove mode %d", Aur->GetId(), Aur->GetModifier()->m_auraname, mode); assert(!Aur->IsInUse()); Aur->ApplyModifier(false,true); Aur->_RemoveAura(); @@ -3996,6 +3988,20 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode) if(statue) statue->UnSummon(); + if(mode != AURA_REMOVE_BY_STACK) + { + if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(-(int32)Aur->GetSpellProto()->Id)) + { + for(std::vector<int32>::const_iterator itr = spell_triggered->begin(); itr != spell_triggered->end(); ++itr) + { + if(spell_triggered < 0) + RemoveAurasDueToSpell(-(*itr)); + else if(Unit* caster = Aur->GetCaster()) + CastSpell(this, *itr, true, 0, 0, caster->GetGUID()); + } + } + } + // only way correctly remove all auras from list if( m_Auras.empty() ) i = m_Auras.end(); |