diff options
author | Xanadu <none@none> | 2010-07-30 03:43:09 +0200 |
---|---|---|
committer | Xanadu <none@none> | 2010-07-30 03:43:09 +0200 |
commit | 1e5ce69d196043f63d0f8dd37f03afb1a092e3e7 (patch) | |
tree | de2a97d06b6e9fa6d1bd17cc4b824a9fc0c809a9 /src | |
parent | eb852f5bbda3d99d262795dc16eb5e7d454ea806 (diff) | |
parent | 272e954a70c1b90d5e4b47e30d7eadcb231d7468 (diff) |
Merge
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 1 |
2 files changed, 13 insertions, 8 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2394613d731..1c7f5468ada 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -4412,14 +4412,18 @@ void Unit::RemoveAreaAurasDueToLeaveWorld() void Unit::RemoveAllAuras() { - AuraApplicationMap::iterator aurAppIter; - for (aurAppIter = m_appliedAuras.begin(); aurAppIter != m_appliedAuras.end();) - _UnapplyAura(aurAppIter, AURA_REMOVE_BY_DEFAULT); - - AuraMap::iterator aurIter; - for (aurIter = m_ownedAuras.begin(); aurIter != m_ownedAuras.end();) - RemoveOwnedAura(aurIter); - + // this may be a dead loop if some events on aura remove will continiously apply aura on remove + // we want to have all auras removed, so use your brain when linking events + while (!m_appliedAuras.empty() || !m_ownedAuras.empty()) + { + AuraApplicationMap::iterator aurAppIter; + for (aurAppIter = m_appliedAuras.begin(); aurAppIter != m_appliedAuras.end();) + _UnapplyAura(aurAppIter, AURA_REMOVE_BY_DEFAULT); + + AuraMap::iterator aurIter; + for (aurIter = m_ownedAuras.begin(); aurIter != m_ownedAuras.end();) + RemoveOwnedAura(aurIter); + } } void Unit::RemoveArenaAuras(bool onleave) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 109a592dd7f..e538d93a29e 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -6681,6 +6681,7 @@ SpellEvent::~SpellEvent() { sLog.outError("~SpellEvent: %s %u tried to delete non-deletable spell %u. Was not deleted, causes memory leak.", (m_Spell->GetCaster()->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUIDLow(), m_Spell->m_spellInfo->Id); + ASSERT(false); } } |