diff --git a/Source/Game/Handlers/TaxiHandler.cs b/Source/Game/Handlers/TaxiHandler.cs index 63eabe9eb..e29bb7927 100644 --- a/Source/Game/Handlers/TaxiHandler.cs +++ b/Source/Game/Handlers/TaxiHandler.cs @@ -130,8 +130,6 @@ namespace Game if (GetPlayer().HasUnitState(UnitState.Died)) GetPlayer().RemoveAurasByType(AuraType.FeignDeath); - GetPlayer().GetMotionMaster().Remove(MovementGeneratorType.Flight); - if (mountDisplayId != 0) GetPlayer().Mount(mountDisplayId); diff --git a/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs b/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs index 03ca2d9e9..aee83ebe2 100644 --- a/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs +++ b/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs @@ -234,7 +234,12 @@ namespace Game.Movement { int nodeCount = _path.Count; //! Number of nodes in path. _endMapId = _path[nodeCount - 1].ContinentID; //! MapId of last node - _preloadTargetNode = (uint)nodeCount - 3; + + if (nodeCount < 3) + _preloadTargetNode = 0; + else + _preloadTargetNode = (uint)nodeCount - 3; + _endGridX = _path[nodeCount - 1].Loc.X; _endGridY = _path[nodeCount - 1].Loc.Y; } diff --git a/Source/Game/Movement/MotionMaster.cs b/Source/Game/Movement/MotionMaster.cs index e6322bf81..5b655e406 100644 --- a/Source/Game/Movement/MotionMaster.cs +++ b/Source/Game/Movement/MotionMaster.cs @@ -884,7 +884,8 @@ namespace Game.Movement Log.outDebug(LogFilter.Server, $"MotionMaster::MoveTaxiFlight: {_owner.GetGUID()} taxi to Path Id: {path} (node {pathnode})"); // Only one FLIGHT_MOTION_TYPE is allowed - Remove(MovementGeneratorType.Flight); + bool hasExisting = HasMovementGenerator(gen => gen.GetMovementGeneratorType() == MovementGeneratorType.Flight); + Cypher.Assert(!hasExisting, "Duplicate flight path movement generator"); FlightPathMovementGenerator movement = new(); movement.LoadPath(_owner.ToPlayer());