aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-02-12 01:49:23 +0100
committerShauren <shauren.trinity@gmail.com>2021-06-19 23:33:38 +0200
commit88c1739e3e1ecf58407b0846f3c8dfeb589f3113 (patch)
tree1ba2a53637de0ca212cf63af075f1b61388409a1
parenta24af55d13acfbf31598d7e140a245b4ebf5b66b (diff)
Core/Movement: Creatures' idle movement generator can no longer override player mover control.
Tagging #20310, partial fix. (cherry picked from commit d02f481d9ac8e1d1a7716368f609d53a5add0960)
-rw-r--r--src/common/Utilities/Timer.h4
-rw-r--r--src/server/game/AI/CreatureAISelector.cpp5
-rw-r--r--src/server/game/Entities/Player/Player.cpp5
3 files changed, 10 insertions, 4 deletions
diff --git a/src/common/Utilities/Timer.h b/src/common/Utilities/Timer.h
index 7f3e5162110..0996c7e9dae 100644
--- a/src/common/Utilities/Timer.h
+++ b/src/common/Utilities/Timer.h
@@ -135,7 +135,7 @@ struct TimeTrackerSmall
{
public:
- TimeTrackerSmall(uint32 expiry = 0)
+ TimeTrackerSmall(int32 expiry = 0)
: i_expiryTime(expiry)
{
}
@@ -150,7 +150,7 @@ public:
return i_expiryTime <= 0;
}
- void Reset(uint32 interval)
+ void Reset(int32 interval)
{
i_expiryTime = interval;
}
diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp
index fd298c86ed3..a1e78149ced 100644
--- a/src/server/game/AI/CreatureAISelector.cpp
+++ b/src/server/game/AI/CreatureAISelector.cpp
@@ -101,8 +101,9 @@ namespace FactorySelector
MovementGenerator* SelectMovementGenerator(Unit* unit)
{
MovementGeneratorType type = IDLE_MOTION_TYPE;
- if (unit->GetTypeId() == TYPEID_UNIT)
- type = unit->ToCreature()->GetDefaultMovementType();
+ if (Creature* creature = unit->ToCreature())
+ if (!creature->GetPlayerMovingMe())
+ type = unit->ToCreature()->GetDefaultMovementType();
MovementGeneratorCreator const* mv_factory = sMovementGeneratorRegistry->GetRegistryItem(type);
return ASSERT_NOTNULL(mv_factory)->Create(unit);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 925d1479f69..e6cc4328837 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -25569,8 +25569,13 @@ void Player::SetClientControl(Unit* target, bool allowMove)
void Player::SetMover(Unit* target)
{
m_unitMovedByMe->m_playerMovingMe = nullptr;
+ if (m_unitMovedByMe->GetTypeId() == TYPEID_UNIT)
+ m_unitMovedByMe->GetMotionMaster()->Initialize();
+
m_unitMovedByMe = target;
m_unitMovedByMe->m_playerMovingMe = this;
+ if (m_unitMovedByMe->GetTypeId() == TYPEID_UNIT)
+ m_unitMovedByMe->GetMotionMaster()->Initialize();
WorldPackets::Movement::MoveSetActiveMover packet;
packet.MoverGUID = target->GetGUID();