From ca1afb5c2eaad1bef976ca6dfbb43d415b621fe8 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 23 Jun 2021 17:50:46 -0400 Subject: [PATCH] Core/Movement: Creatures' idle movement generator can no longer override player mover control. Port From (https://github.com/TrinityCore/TrinityCore/commit/88c1739e3e1ecf58407b0846f3c8dfeb589f3113) --- Source/Game/AI/AISelector.cs | 7 ++++++- Source/Game/Entities/Creature/Creature.cs | 2 +- Source/Game/Entities/Player/Player.cs | 5 +++++ Source/Game/Entities/Unit/Unit.Movement.cs | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Source/Game/AI/AISelector.cs b/Source/Game/AI/AISelector.cs index 085eb1191..1c80dea25 100644 --- a/Source/Game/AI/AISelector.cs +++ b/Source/Game/AI/AISelector.cs @@ -99,10 +99,15 @@ namespace Game.AI public static IMovementGenerator SelectMovementAI(Creature creature) { - return creature.DefaultMovementType switch + MovementGeneratorType type = MovementGeneratorType.Idle; + if (creature.GetPlayerMovingMe() == null) + type = creature.GetDefaultMovementType(); + + return type switch { MovementGeneratorType.Random => new RandomMovementGenerator(), MovementGeneratorType.Waypoint => new WaypointMovementGenerator(), + MovementGeneratorType.Idle => new IdleMovementGenerator(), _ => null, }; } diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index d23022b10..73665301f 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -3177,7 +3177,7 @@ namespace Game.Entities public void SetNoSearchAssistance(bool val) { m_AlreadySearchedAssistance = val; } public bool HasSearchedAssistance() { return m_AlreadySearchedAssistance; } - MovementGeneratorType GetDefaultMovementType() { return DefaultMovementType; } + public MovementGeneratorType GetDefaultMovementType() { return DefaultMovementType; } public void SetDefaultMovementType(MovementGeneratorType mgt) { DefaultMovementType = mgt; } public long GetRespawnTime() { return m_respawnTime; } diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 6aa8723ec..1560bfb88 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -7245,8 +7245,13 @@ namespace Game.Entities public void SetMover(Unit target) { m_unitMovedByMe.m_playerMovingMe = null; + if (m_unitMovedByMe.IsCreature()) + m_unitMovedByMe.GetMotionMaster().Initialize(); + m_unitMovedByMe = target; m_unitMovedByMe.m_playerMovingMe = this; + if (m_unitMovedByMe.IsCreature()) + m_unitMovedByMe.GetMotionMaster().Initialize(); MoveSetActiveMover packet = new(); packet.MoverGUID = target.GetGUID(); diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index 34a46ae94..e5412030c 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -1603,7 +1603,7 @@ namespace Game.Entities return null; } - Player GetPlayerMovingMe() { return m_playerMovingMe; } + public Player GetPlayerMovingMe() { return m_playerMovingMe; } public void AddUnitMovementFlag(MovementFlag f) {