From 144cfc2bcebbd0d2bbce5f97a06f634d17d62e79 Mon Sep 17 00:00:00 2001 From: Giacomo Pozzoni Date: Sun, 1 Mar 2020 13:31:14 +0100 Subject: Core/AI: Make charmed creatures follow their owner (#24195) * Core/AI: Make charmed creatures follow their owner * Follow the charmer only when applying the charm * Make SmartAI follow the charmer (cherry picked from commit ddf2f60c1317f0ce728d5894064f51251cf71c72) --- src/server/game/AI/CoreAI/PetAI.cpp | 8 ++++++++ src/server/game/AI/CoreAI/PetAI.h | 1 + src/server/game/AI/SmartScripts/SmartAI.cpp | 3 +++ 3 files changed, 12 insertions(+) (limited to 'src') diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index c192719f80f..a7309e9039b 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -632,6 +632,14 @@ void PetAI::UpdateAllies() _allySet.insert(owner->GetGUID()); } +void PetAI::OnCharmed(bool isNew) +{ + if (me->IsCharmed()) + me->GetMotionMaster()->MoveFollow(me->GetCharmer(), PET_FOLLOW_DIST, me->GetFollowAngle()); + + CreatureAI::OnCharmed(isNew); +} + void PetAI::ClearCharmInfoFlags() { CharmInfo* ci = me->GetCharmInfo(); diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h index 64a61689990..1c4035d302b 100644 --- a/src/server/game/AI/CoreAI/PetAI.h +++ b/src/server/game/AI/CoreAI/PetAI.h @@ -46,6 +46,7 @@ class TC_GAME_API PetAI : public CreatureAI void ReceiveEmote(Player* player, uint32 textEmote) override; void JustEnteredCombat(Unit* who) override { EngagementStart(who); } void JustExitedCombat() override { EngagementOver(); } + void OnCharmed(bool isNew) override; // The following aren't used by the PetAI but need to be defined to override // default CreatureAI functions which interfere with the PetAI diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 7658a62d928..aac8edd3a37 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -692,6 +692,9 @@ void SmartAI::OnCharmed(bool /*isNew*/) _charmed = charmed; + if (charmed) + me->GetMotionMaster()->MoveFollow(me->GetCharmer(), PET_FOLLOW_DIST, me->GetFollowAngle()); + if (!charmed && !me->IsInEvadeMode()) { if (_repeatWaypointPath) -- cgit v1.2.3