diff options
author | Treeston <treeston.mmoc@gmail.com> | 2018-02-12 01:49:23 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-19 23:33:38 +0200 |
commit | 88c1739e3e1ecf58407b0846f3c8dfeb589f3113 (patch) | |
tree | 1ba2a53637de0ca212cf63af075f1b61388409a1 | |
parent | a24af55d13acfbf31598d7e140a245b4ebf5b66b (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.h | 4 | ||||
-rw-r--r-- | src/server/game/AI/CreatureAISelector.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 |
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(); |