*Lock on RemoveAllAuras till all auras and applications are removed with all linked events they may cause.
*Add assertion after error log, just in case you've missed it. --HG-- branch : trunk
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user