aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/CreatureAI.cpp12
-rw-r--r--src/game/CreatureEventAI.cpp9
-rw-r--r--src/game/MotionMaster.cpp10
-rw-r--r--src/game/SpellEffects.cpp4
4 files changed, 14 insertions, 21 deletions
diff --git a/src/game/CreatureAI.cpp b/src/game/CreatureAI.cpp
index 8633ee2e1f4..ea65d233a17 100644
--- a/src/game/CreatureAI.cpp
+++ b/src/game/CreatureAI.cpp
@@ -104,14 +104,22 @@ bool CreatureAI::UpdateVictim()
void CreatureAI::EnterEvadeMode()
{
+ if(me->IsInEvadeMode())
+ return;
+
me->RemoveAllAuras();
me->DeleteThreatList();
- me->CombatStop();
+ me->CombatStop(true);
me->LoadCreaturesAddon();
me->SetLootRecipient(NULL);
if(me->isAlive())
- me->GetMotionMaster()->MoveTargetedHome();
+ {
+ if(Unit *owner = me->GetCharmerOrOwner())
+ me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE, MOTION_SLOT_IDLE);
+ else
+ me->GetMotionMaster()->MoveTargetedHome();
+ }
Reset();
}
diff --git a/src/game/CreatureEventAI.cpp b/src/game/CreatureEventAI.cpp
index fb7b7119860..470225e0da0 100644
--- a/src/game/CreatureEventAI.cpp
+++ b/src/game/CreatureEventAI.cpp
@@ -1054,14 +1054,7 @@ void CreatureEventAI::JustReachedHome()
void CreatureEventAI::EnterEvadeMode()
{
- m_creature->RemoveAllAuras();
- m_creature->DeleteThreatList();
- m_creature->CombatStop(true);
-
- if (m_creature->isAlive())
- m_creature->GetMotionMaster()->MoveTargetedHome();
-
- m_creature->SetLootRecipient(NULL);
+ CreatureAI::EnterEvadeMode();
if (bEmptyList)
return;
diff --git a/src/game/MotionMaster.cpp b/src/game/MotionMaster.cpp
index b31d3231a3b..52b9ba56e3e 100644
--- a/src/game/MotionMaster.cpp
+++ b/src/game/MotionMaster.cpp
@@ -203,14 +203,7 @@ MotionMaster::MoveTargetedHome()
Clear(false);
- if(Unit *target = i_owner->GetCharmerOrOwner())
- {
- DEBUG_LOG("Pet or controlled unit (Entry: %u GUID: %u) targeting home",
- i_owner->GetEntry(), i_owner->GetGUIDLow() );
-
- MoveFollow(target, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE, MOTION_SLOT_IDLE);
- }
- else if(i_owner->GetTypeId() == TYPEID_UNIT)
+ if(i_owner->GetTypeId() == TYPEID_UNIT)
{
DEBUG_LOG("Creature (Entry: %u GUID: %u) targeted home", i_owner->GetEntry(), i_owner->GetGUIDLow());
Mutate(new HomeMovementGenerator<Creature>(), MOTION_SLOT_ACTIVE);
@@ -218,7 +211,6 @@ MotionMaster::MoveTargetedHome()
else
{
sLog.outError("Player (GUID: %u) attempt targeted home", i_owner->GetGUIDLow() );
- return;
}
}
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index a3401a77e21..0f04822546b 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -3275,7 +3275,7 @@ void Spell::EffectSummonType(uint32 i)
summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- summon->GetMotionMaster()->MoveTargetedHome();
+ summon->AI()->EnterEvadeMode();
std::string name = m_originalCaster->GetName();
name.append(petTypeSuffix[3]);
@@ -6423,7 +6423,7 @@ void Spell::SummonGuardian(uint32 entry, SummonPropertiesEntry const *properties
summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
- summon->GetMotionMaster()->MoveTargetedHome();
+ summon->AI()->EnterEvadeMode();
}
}