private static bool YSFHandle_11_FlightData(Client ThisClient, Packets.GenericPacket InPacket) { #region Prepare Flight Data //Prepare FlightData Packet //Check if the server has the vehicle specified. //Deny old flightdatapackets. Packets.Packet_11_FlightData FlightData = new Packets.Packet_11_FlightData(InPacket); Vehicle SenderVehicle; lock (Vehicles.List) { if (Vehicles.List.ToArray().Where(x => x.ID == FlightData.ID).Count() <= 0) { //Console.WriteLine("Missing Aircraft ID: " + FlightData.ID + " for client " + ThisConnection.ThisClient.Info.Username); return(false); } SenderVehicle = Vehicles.List.ToArray().Where(x => x.ID == FlightData.ID).ToArray()[0]; } #endregion #region ValidateFlightData if (SenderVehicle.TimeStamp > FlightData.TimeStamp) { return(false); } SenderVehicle.Update(FlightData); #endregion ThisClient.SendPacket(InPacket); return(true); }
private static bool YSFHandle_11_FlightData(Client ThisClient, Packets.GenericPacket InPacket) { #region Prepare Flight Data //Prepare FlightData Packet //Check if the server has the vehicle specified. //Deny old flightdatapackets. Packets.Packet_11_FlightData FlightData = new Packets.Packet_11_FlightData(InPacket); Vehicle SenderVehicle; lock (Vehicles.List) { if (Vehicles.List.ToArray().Where(x => x.ID == FlightData.ID).Count() <= 0) { Debug.WriteLine("Missing Aircraft ID: " + FlightData.ID + " for client " + ThisClient.Username); return(false); } SenderVehicle = Vehicles.List.ToArray().Where(x => x.ID == FlightData.ID).ToArray()[0]; } #endregion #region Update... #region ValidateFlightData if (SenderVehicle.TimeStamp > FlightData.TimeStamp) { Debug.WriteLine("OLD DATA:" + SenderVehicle.TimeStamp + " > " + FlightData.TimeStamp); return(false); } Debug.WriteLine("NEW DATA:" + SenderVehicle.TimeStamp + " <= " + FlightData.TimeStamp); float Difference = FlightData.TimeStamp - SenderVehicle.TimeStamp; OpenYS_Link.Stats.total_flight_seconds += Difference; SenderVehicle.Update(FlightData); #endregion #endregion #region FormationData #region Validate Vehicle TargetVehicle; lock (Vehicles.List) { FlightData = new Packets.Packet_11_FlightData(InPacket); if (!ThisClient.YSFServer.OpenYSSupport) { goto HandleFlightData; } if (ThisClient.FormationTarget == 0) { goto HandleFlightData; } if (Vehicles.List.ToArray().Where(x => x.ID == ThisClient.FormationTarget).Count() <= 0) { goto HandleFlightData; } if (!FlightData.Anim_Light_Land) { goto HandleFlightData; } TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == ThisClient.FormationTarget).ToArray()[0]; double Distance = Math.Sqrt(Math.Pow(FlightData.PosX - TargetVehicle.PosX, 2) + Math.Pow(FlightData.PosY - TargetVehicle.PosY, 2) + Math.Pow(FlightData.PosZ - TargetVehicle.PosZ, 2)); double Velocity = Math.Sqrt(Math.Pow(FlightData.V_PosX, 2) + Math.Pow(FlightData.V_PosY, 2) + Math.Pow(FlightData.V_PosZ, 2)); //if (Distance > Velocity / 25) goto HandleFlightData; //V / 10 / 2.5 eg: 1000cm/s -> 100m/s -> 40m. (at roughly 200 knots) or 80m at 400knots, 160m at 800 knots... } #endregion #region BuildFormationData Packets.Packet_64_11_FormationData FormationData = new Packets.Packet_64_11_FormationData(5); FormationData.TimeStamp = FlightData.TimeStamp; FormationData.SenderID = FlightData.ID; FormationData.TargetID = TargetVehicle.ID; FormationData.Version = 5; FormationData._Anim_Flags = FlightData._Anim_Flags; FormationData.PosX = FlightData.PosX - TargetVehicle.PosX; FormationData.PosY = FlightData.PosY - TargetVehicle.PosY; FormationData.PosZ = FlightData.PosZ - TargetVehicle.PosZ; FormationData.HdgX = FlightData.HdgX; FormationData.HdgY = FlightData.HdgY; FormationData.HdgZ = FlightData.HdgZ; FormationData.V_HdgX = (short)FlightData.V_HdgX; FormationData.V_HdgY = (short)FlightData.V_HdgY; FormationData.V_HdgZ = (short)FlightData.V_HdgZ; //Need to add the below to the formation data packet... FormationData.Anim_Aileron = FlightData.Anim_Aileron; FormationData.Anim_Boards = FlightData.Anim_Boards; FormationData.Anim_BombBay = FlightData.Anim_BombBay; FormationData.Anim_Brake = FlightData.Anim_Brake; FormationData.Anim_Elevator = FlightData.Anim_Elevator; FormationData.Anim_Flaps = FlightData.Anim_Flaps; FormationData.Anim_Gear = FlightData.Anim_Gear; FormationData.Anim_Nozzle = FlightData.Anim_Nozzle; FormationData.Anim_Reverse = FlightData.Anim_Reverse; FormationData.Anim_Rudder = FlightData.Anim_Rudder; FormationData.Anim_Throttle = FlightData.Anim_Throttle; FormationData.Anim_Trim = FlightData.Anim_Trim; FormationData.Anim_VGW = FlightData.Anim_VGW; #endregion FormationData.PosX = 0; FormationData.PosY = 0; FormationData.PosZ = 0; //ThisClient.YSFServer.SendPacket(FormationData.ToCustomPacket()); //ThisClient.LastFlightDataPacket = FlightData; //Send FormationData to the server. return(true); #endregion #region NormalFlightData HandleFlightData: //ThisClient.YSFServer.SendPacket(FlightData); return(true); #endregion }