aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2013-08-11 15:52:23 +0100
committerNay <dnpd.dd@gmail.com>2013-08-11 15:52:23 +0100
commitd0bde02b21241773c908c18ade368a1bbb5ee8bb (patch)
treeaef9ed52c604bb476785c6530a7845811e6661ad /src/server/game/Entities
parent54d2b73f3cf98402b3429124fd4ebbd24e11dba1 (diff)
Core/CreatureAI: Do not remove clone_caster auras on evade (in addition to control_vehicle auras)
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp29
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
2 files changed, 26 insertions, 4 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 327c4b96c34..fc3a9efb908 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -4068,19 +4068,40 @@ void Unit::RemoveAllAurasExceptType(AuraType type)
for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
{
Aura const* aura = iter->second->GetBase();
- if (!aura->GetSpellInfo()->HasAura(type))
- _UnapplyAura(iter, AURA_REMOVE_BY_DEFAULT);
- else
+ if (aura->GetSpellInfo()->HasAura(type))
++iter;
+ else
+ _UnapplyAura(iter, AURA_REMOVE_BY_DEFAULT);
}
for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
{
Aura* aura = iter->second;
- if (!aura->GetSpellInfo()->HasAura(type))
+ if (aura->GetSpellInfo()->HasAura(type))
+ ++iter;
+ else
RemoveOwnedAura(iter, AURA_REMOVE_BY_DEFAULT);
+ }
+}
+
+void Unit::RemoveAllAurasExceptType(AuraType type1, AuraType type2)
+{
+ for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
+ {
+ Aura const* aura = iter->second->GetBase();
+ if (aura->GetSpellInfo()->HasAura(type1) || aura->GetSpellInfo()->HasAura(type2))
+ ++iter;
else
+ _UnapplyAura(iter, AURA_REMOVE_BY_DEFAULT);
+ }
+
+ for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
+ {
+ Aura* aura = iter->second;
+ if (aura->GetSpellInfo()->HasAura(type1) || aura->GetSpellInfo()->HasAura(type2))
++iter;
+ else
+ RemoveOwnedAura(iter, AURA_REMOVE_BY_DEFAULT);
}
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 56f4e7142a2..5e2e746ae63 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1743,6 +1743,7 @@ class Unit : public WorldObject
void RemoveAllAurasOnDeath();
void RemoveAllAurasRequiringDeadTarget();
void RemoveAllAurasExceptType(AuraType type);
+ void RemoveAllAurasExceptType(AuraType type1, AuraType type2); /// @todo: once we support variadic templates use them here
void DelayOwnedAuras(uint32 spellId, uint64 caster, int32 delaytime);
void _RemoveAllAuraStatMods();