[7697] Interrupt casting at enter to evade mode.

This commit is contained in:
VladimirMangos 2009-04-22 18:01:29 +04:00
parent cc83cac0aa
commit d910610600
9 changed files with 19 additions and 18 deletions

View file

@ -314,6 +314,7 @@ void ScriptedAI::UpdateAI(const uint32)
void ScriptedAI::EnterEvadeMode() void ScriptedAI::EnterEvadeMode()
{ {
m_creature->CombatStop(true);
if( m_creature->isAlive() ) if( m_creature->isAlive() )
DoGoHome(); DoGoHome();
} }

View file

@ -73,7 +73,7 @@ void AggressorAI::EnterEvadeMode()
{ {
DEBUG_LOG("Creature stopped attacking cuz his dead [guid=%u]", m_creature->GetGUIDLow()); DEBUG_LOG("Creature stopped attacking cuz his dead [guid=%u]", m_creature->GetGUIDLow());
i_victimGuid = 0; i_victimGuid = 0;
m_creature->CombatStop(); m_creature->CombatStop(true);
m_creature->DeleteThreatList(); m_creature->DeleteThreatList();
return; return;
} }
@ -114,7 +114,7 @@ void AggressorAI::EnterEvadeMode()
m_creature->DeleteThreatList(); m_creature->DeleteThreatList();
i_victimGuid = 0; i_victimGuid = 0;
m_creature->CombatStop(); m_creature->CombatStop(true);
m_creature->SetLootRecipient(NULL); m_creature->SetLootRecipient(NULL);
} }

View file

@ -1063,7 +1063,7 @@ void CreatureEventAI::EnterEvadeMode()
m_creature->InterruptNonMeleeSpells(true); m_creature->InterruptNonMeleeSpells(true);
m_creature->RemoveAllAuras(); m_creature->RemoveAllAuras();
m_creature->DeleteThreatList(); m_creature->DeleteThreatList();
m_creature->CombatStop(); m_creature->CombatStop(true);
if (m_creature->isAlive()) if (m_creature->isAlive())
m_creature->GetMotionMaster()->MoveTargetedHome(); m_creature->GetMotionMaster()->MoveTargetedHome();

View file

@ -66,7 +66,7 @@ void GuardAI::EnterEvadeMode()
i_state = STATE_NORMAL; i_state = STATE_NORMAL;
i_victimGuid = 0; i_victimGuid = 0;
m_creature->CombatStop(); m_creature->CombatStop(true);
m_creature->DeleteThreatList(); m_creature->DeleteThreatList();
return; return;
} }
@ -97,7 +97,7 @@ void GuardAI::EnterEvadeMode()
m_creature->RemoveAllAuras(); m_creature->RemoveAllAuras();
m_creature->DeleteThreatList(); m_creature->DeleteThreatList();
i_victimGuid = 0; i_victimGuid = 0;
m_creature->CombatStop(); m_creature->CombatStop(true);
i_state = STATE_NORMAL; i_state = STATE_NORMAL;
// Remove TargetedMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead // Remove TargetedMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead

View file

@ -91,7 +91,7 @@ ReactorAI::EnterEvadeMode()
m_creature->GetMotionMaster()->MovementExpired(); m_creature->GetMotionMaster()->MovementExpired();
m_creature->GetMotionMaster()->MoveIdle(); m_creature->GetMotionMaster()->MoveIdle();
i_victimGuid = 0; i_victimGuid = 0;
m_creature->CombatStop(); m_creature->CombatStop(true);
m_creature->DeleteThreatList(); m_creature->DeleteThreatList();
return; return;
} }
@ -118,7 +118,7 @@ ReactorAI::EnterEvadeMode()
m_creature->RemoveAllAuras(); m_creature->RemoveAllAuras();
m_creature->DeleteThreatList(); m_creature->DeleteThreatList();
i_victimGuid = 0; i_victimGuid = 0;
m_creature->CombatStop(); m_creature->CombatStop(true);
m_creature->SetLootRecipient(NULL); m_creature->SetLootRecipient(NULL);
// Remove TargetedMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead // Remove TargetedMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead

View file

@ -47,7 +47,7 @@ TotemAI::MoveInLineOfSight(Unit *)
void TotemAI::EnterEvadeMode() void TotemAI::EnterEvadeMode()
{ {
m_creature->CombatStop(); m_creature->CombatStop(true);
} }
void void

View file

@ -7214,9 +7214,9 @@ bool Unit::AttackStop(bool targetSwitch /*=false*/)
return true; return true;
} }
void Unit::CombatStop(bool cast) void Unit::CombatStop(bool includingCast)
{ {
if (cast && IsNonMeleeSpellCasted(false)) if (includingCast && IsNonMeleeSpellCasted(false))
InterruptNonMeleeSpells(false); InterruptNonMeleeSpells(false);
AttackStop(); AttackStop();
@ -7226,19 +7226,19 @@ void Unit::CombatStop(bool cast)
ClearInCombat(); ClearInCombat();
} }
void Unit::CombatStopWithPets(bool cast) void Unit::CombatStopWithPets(bool includingCast)
{ {
CombatStop(cast); CombatStop(includingCast);
if(Pet* pet = GetPet()) if(Pet* pet = GetPet())
pet->CombatStop(cast); pet->CombatStop(includingCast);
if(Unit* charm = GetCharm()) if(Unit* charm = GetCharm())
charm->CombatStop(cast); charm->CombatStop(includingCast);
if(GetTypeId()==TYPEID_PLAYER) if(GetTypeId()==TYPEID_PLAYER)
{ {
GuardianPetList const& guardians = ((Player*)this)->GetGuardians(); GuardianPetList const& guardians = ((Player*)this)->GetGuardians();
for(GuardianPetList::const_iterator itr = guardians.begin(); itr != guardians.end(); ++itr) for(GuardianPetList::const_iterator itr = guardians.begin(); itr != guardians.end(); ++itr)
if(Unit* guardian = Unit::GetUnit(*this,*itr)) if(Unit* guardian = Unit::GetUnit(*this,*itr))
guardian->CombatStop(cast); guardian->CombatStop(includingCast);
} }
} }

View file

@ -855,8 +855,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
AttackerSet const& getAttackers() const { return m_attackers; } AttackerSet const& getAttackers() const { return m_attackers; }
bool isAttackingPlayer() const; bool isAttackingPlayer() const;
Unit* getVictim() const { return m_attacking; } Unit* getVictim() const { return m_attacking; }
void CombatStop(bool cast = false); void CombatStop(bool includingCast = false);
void CombatStopWithPets(bool cast = false); void CombatStopWithPets(bool includingCast = false);
Unit* SelectNearbyTarget() const; Unit* SelectNearbyTarget() const;
bool hasNegativeAuraWithInterruptFlag(uint32 flag); bool hasNegativeAuraWithInterruptFlag(uint32 flag);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7696" #define REVISION_NR "7697"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__