From 8197c37a92f891374760c79a2ee418bd6ec7d612 Mon Sep 17 00:00:00 2001 From: Subv2112 Date: Thu, 5 Jan 2012 12:11:58 -0500 Subject: [PATCH 1/3] Vehicles with SAI should not kick their passengers when resetting Signed-off-by: Subv2112 --- src/server/game/AI/SmartScripts/SmartAI.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index af6bf6cf6ce..1755c36562f 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -436,7 +436,9 @@ void SmartAI::EnterEvadeMode() if (!me->isAlive()) return; - me->RemoveAllAuras(); + // Vehicles should not dismount their passengers on evade mode + me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE); + me->DeleteThreatList(); me->CombatStop(true); me->LoadCreaturesAddon(); From d889edb4361a79d7d1a8a93796dd9e10be025829 Mon Sep 17 00:00:00 2001 From: Subv2112 Date: Thu, 5 Jan 2012 15:09:55 -0500 Subject: [PATCH 2/3] Core/SAI: Self-casted auras should not be removed when the NPC resets Signed-off-by: Subv2112 --- src/server/game/AI/SmartScripts/SmartAI.cpp | 28 +++++++++++++++++++-- src/server/game/AI/SmartScripts/SmartAI.h | 2 ++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 1755c36562f..8c762a73e43 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -431,13 +431,37 @@ void SmartAI::MovementInform(uint32 MovementType, uint32 Data) MovepointReached(Data); } +void SmartAI::RemoveAuras() +{ + Unit::AuraApplicationMap appliedAuras = me->GetAppliedAuras(); + for (Unit::AuraApplicationMap::iterator iter = appliedAuras.begin(); iter != appliedAuras.end();) + { + Aura const* aura = iter->second->GetBase(); + if (!aura->GetSpellInfo()->HasAura(SPELL_AURA_CONTROL_VEHICLE) && !(iter->second->GetTarget() == me && aura->GetCaster() == me)) + me->_UnapplyAura(iter, AURA_REMOVE_BY_DEFAULT); + else + ++iter; + } + + Unit::AuraMap ownedAuras = me->GetOwnedAuras(); + for (Unit::AuraMap::iterator iter = ownedAuras.begin(); iter != ownedAuras.end();) + { + Aura* aura = iter->second; + if (!aura->GetSpellInfo()->HasAura(SPELL_AURA_CONTROL_VEHICLE)) + me->RemoveOwnedAura(iter, AURA_REMOVE_BY_DEFAULT); + else + ++iter; + } + + me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE); +} + void SmartAI::EnterEvadeMode() { if (!me->isAlive()) return; - // Vehicles should not dismount their passengers on evade mode - me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE); + RemoveAuras(); me->DeleteThreatList(); me->CombatStop(true); diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 1059e2a01c4..b33bfebf912 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -193,6 +193,8 @@ class SmartAI : public CreatureAI mDespawnState = t ? 1 : 0; } void StartDespawn() { mDespawnState = 2; } + + void RemoveAuras(); private: uint32 mFollowCreditType; From 235b9419643a22266eabed89b674ca26c9d9bfc1 Mon Sep 17 00:00:00 2001 From: Subv2112 Date: Thu, 5 Jan 2012 19:46:46 -0500 Subject: [PATCH 3/3] Fixed a typo Signed-off-by: Subv2112 --- src/server/game/AI/SmartScripts/SmartAI.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 8c762a73e43..b5fdf38a4b6 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -452,8 +452,6 @@ void SmartAI::RemoveAuras() else ++iter; } - - me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE); } void SmartAI::EnterEvadeMode()