diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/CreatureAI.cpp | 12 | ||||
-rw-r--r-- | src/game/CreatureEventAI.cpp | 9 | ||||
-rw-r--r-- | src/game/MotionMaster.cpp | 10 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 4 |
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(); } } |