diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2018-02-12 01:49:23 +0100 |
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2018-02-12 01:50:36 +0100 |
| commit | d02f481d9ac8e1d1a7716368f609d53a5add0960 (patch) | |
| tree | bc78b886082a828c3ad1f26f7a1e234af4a3a26b /src/server/game | |
| parent | 477878630e1bb2811d9be97189f0c819377b7840 (diff) | |
Core/Movement: Creatures' idle movement generator can no longer override player mover control.
Tagging #20310, partial fix.
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/AI/CreatureAISelector.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp index ec0e1d213b9..159f81f3333 100644 --- a/src/server/game/AI/CreatureAISelector.cpp +++ b/src/server/game/AI/CreatureAISelector.cpp @@ -103,8 +103,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 e46b8a4e5e8..266259b8257 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23830,8 +23830,13 @@ void Player::SetClientControl(Unit* target, bool allowMove) void Player::SetMovedUnit(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(); } void Player::UpdateZoneDependentAuras(uint32 newZone) |
