public static void FlyUnit(Unit unit, bool startFlight, LinkedListNode<PathVertex> startNode) { if (unit.TaxiPaths.Count < 1) { throw new InvalidOperationException("Tried to fly Unit without Path given."); } var path = unit.TaxiPaths.Peek(); // Stop combat unit.IsInCombat = false; // Cannot be invisible when flying unit.Stealthed = 0; if (startFlight) { // Regulators, Mount Up! var mount = NPCMgr.GetEntry(unit.Faction.IsAlliance ? path.From.AllianceMountId : path.From.HordeMountId); if (mount != null) { var mountId = mount.GetRandomModel().DisplayId; unit.Mount(mountId); if (unit is Character) { unit.PushFieldUpdateToPlayer((Character)unit, UnitFields.MOUNTDISPLAYID, mountId); } } unit.OnTaxiStart(); } unit.LatestTaxiPathNode = startNode ?? path.Nodes.First; //var next = unit.LatestPathNode.Next.Value; if (unit.LatestTaxiPathNode == path.Nodes.First) { // new flight unit.taxiTime = 0; MovementHandler.SendMoveToPacket(unit, path.PathTime, MonsterMoveFlags.Fly, path.Nodes); } else { // continue: // set time to the amount that it takes to get this far along the path // ReSharper disable PossibleNullReferenceException unit.taxiTime = startNode.Previous.Value.TimeFromStart + (int)((1000 * startNode.Value.Pos.GetDistance(unit.Position)) / AirSpeed); // ReSharper restore PossibleNullReferenceException MovementHandler.SendMoveToPacket(unit, AirSpeed, MonsterMoveFlags.Fly, startNode); } }