aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGiacomo Pozzoni <giacomopoz@gmail.com>2020-03-01 13:31:14 +0100
committerGitHub <noreply@github.com>2020-03-01 13:31:13 +0100
commitddf2f60c1317f0ce728d5894064f51251cf71c72 (patch)
treed19bc0b22bed69fcb156179276359959c2be1739 /src
parent94186a5e79d5d3fe29ac80245992af6365999a93 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/CoreAI/PetAI.cpp8
-rw-r--r--src/server/game/AI/CoreAI/PetAI.h1
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp3
3 files changed, 12 insertions, 0 deletions
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index efabd38edb0..eb0ad17ce7d 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -631,6 +631,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 6705b049430..0a208f1f8fe 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 90236d81a8f..4bc9aeafe0c 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -690,6 +690,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)