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) {