[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()
{
m_creature->CombatStop(true);
if( m_creature->isAlive() )
DoGoHome();
}

View file

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

View file

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

View file

@ -66,7 +66,7 @@ void GuardAI::EnterEvadeMode()
i_state = STATE_NORMAL;
i_victimGuid = 0;
m_creature->CombatStop();
m_creature->CombatStop(true);
m_creature->DeleteThreatList();
return;
}
@ -97,7 +97,7 @@ void GuardAI::EnterEvadeMode()
m_creature->RemoveAllAuras();
m_creature->DeleteThreatList();
i_victimGuid = 0;
m_creature->CombatStop();
m_creature->CombatStop(true);
i_state = STATE_NORMAL;
// 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()->MoveIdle();
i_victimGuid = 0;
m_creature->CombatStop();
m_creature->CombatStop(true);
m_creature->DeleteThreatList();
return;
}
@ -118,7 +118,7 @@ ReactorAI::EnterEvadeMode()
m_creature->RemoveAllAuras();
m_creature->DeleteThreatList();
i_victimGuid = 0;
m_creature->CombatStop();
m_creature->CombatStop(true);
m_creature->SetLootRecipient(NULL);
// Remove TargetedMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead

View file

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

View file

@ -7214,9 +7214,9 @@ bool Unit::AttackStop(bool targetSwitch /*=false*/)
return true;
}
void Unit::CombatStop(bool cast)
void Unit::CombatStop(bool includingCast)
{
if (cast && IsNonMeleeSpellCasted(false))
if (includingCast && IsNonMeleeSpellCasted(false))
InterruptNonMeleeSpells(false);
AttackStop();
@ -7226,19 +7226,19 @@ void Unit::CombatStop(bool cast)
ClearInCombat();
}
void Unit::CombatStopWithPets(bool cast)
void Unit::CombatStopWithPets(bool includingCast)
{
CombatStop(cast);
CombatStop(includingCast);
if(Pet* pet = GetPet())
pet->CombatStop(cast);
pet->CombatStop(includingCast);
if(Unit* charm = GetCharm())
charm->CombatStop(cast);
charm->CombatStop(includingCast);
if(GetTypeId()==TYPEID_PLAYER)
{
GuardianPetList const& guardians = ((Player*)this)->GetGuardians();
for(GuardianPetList::const_iterator itr = guardians.begin(); itr != guardians.end(); ++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; }
bool isAttackingPlayer() const;
Unit* getVictim() const { return m_attacking; }
void CombatStop(bool cast = false);
void CombatStopWithPets(bool cast = false);
void CombatStop(bool includingCast = false);
void CombatStopWithPets(bool includingCast = false);
Unit* SelectNearbyTarget() const;
bool hasNegativeAuraWithInterruptFlag(uint32 flag);

View file

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