aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp16
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp13
2 files changed, 17 insertions, 12 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 720e177075f..d92e7b4770a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -4335,16 +4335,14 @@ void Unit::RemoveAreaAurasDueToLeaveWorld()
void Unit::RemoveAllAuras()
{
- while (!m_appliedAuras.empty() || !m_ownedAuras.empty())
- {
- AuraApplicationMap::iterator aurAppIter = m_appliedAuras.begin();
- while (!m_appliedAuras.empty())
- _UnapplyAura(aurAppIter, AURA_REMOVE_BY_DEFAULT);
+ 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);
- AuraMap::iterator aurIter = m_ownedAuras.begin();
- while (!m_ownedAuras.empty())
- RemoveOwnedAura(aurIter);
- }
}
void Unit::RemoveArenaAuras(bool onleave)
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 1b75ab75473..753cbbe6264 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -391,9 +391,16 @@ void Aura::_UnapplyForTarget(Unit * target, Unit * caster, AuraApplication * aur
assert(auraApp);
ApplicationMap::iterator itr = m_applications.find(target->GetGUID());
+ // TODO: Figure out why this happens.
+ if (itr == m_applications.end())
+ {
+ sLog.outError("Aura::_UnapplyForTarget, target:%u, caster:%u, spell:%u was not found in owners application map!",
+ target->GetGUIDLow(), caster->GetGUIDLow(), auraApp->GetBase()->GetSpellProto()->Id);
+ m_applications.erase(itr);
+
+ }
// aura has to be already applied
- assert(itr->second == auraApp);
- m_applications.erase(itr);
+ //assert(itr->second == auraApp);
m_removedApplications.push_back(auraApp);
// reset cooldown state for spells
@@ -412,7 +419,7 @@ void Aura::_Remove(AuraRemoveMode removeMode)
assert (!m_isRemoved);
m_isRemoved = true;
ApplicationMap::iterator appItr = m_applications.begin();
- while (!m_applications.empty())
+ for (appItr = m_applications.begin(); appItr != m_applications.end();)
{
AuraApplication * aurApp = appItr->second;
Unit * target = aurApp->GetTarget();