diff options
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 13 |
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(); |