public bool Update(Packets.Packet_64_11_FormationData FormationData)
 {
     if (TimeStamp < FormationData.TimeStamp && ID == FormationData.SenderID)
     {
         if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).Count() <= 0)
         {
             return(false);
         }
         Vehicle TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).ToArray()[0];
         Prev_TimeStamp = TimeStamp;
         TimeStamp      = FormationData.TimeStamp;
         Prev_PosX      = PosX;
         Prev_PosY      = PosY;
         Prev_PosZ      = PosZ;
         PosX           = TargetVehicle.PosX + FormationData.PosX;
         PosY           = TargetVehicle.PosY + FormationData.PosY;
         PosZ           = TargetVehicle.PosZ + FormationData.PosZ;
         HdgX           = FormationData.HdgX;
         HdgY           = FormationData.HdgY;
         HdgZ           = FormationData.HdgZ;
         V_HdgX         = FormationData.V_HdgX;
         V_HdgY         = FormationData.V_HdgY;
         V_HdgZ         = FormationData.V_HdgZ;
         LastUpdated    = DateTime.Now;
         return(true);
     }
     return(false);
 }
                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
                }
Exemple #3
0
                public static bool OYSHandle_11_FlightData(Client ThisClient, Packets.GenericPacket InPacket)
                {
                    #region PrepareFormationData
                    Packets.Packet_64_11_FormationData FormationData = new Packets.Packet_64_11_FormationData(InPacket);
                    if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).Count() <= 0)
                    {
                        return(false);
                    }
                    if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).Count() <= 0)
                    {
                        return(false);
                    }
                    Vehicle SenderVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).ToArray()[0];
                    Vehicle TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).ToArray()[0];
                    #endregion
                    #region ValidateFlightData
                    if (SenderVehicle.TimeStamp > FormationData.TimeStamp)
                    {
                        return(false);
                    }
                    SenderVehicle.Update(FormationData);
                    #endregion
                    #region UpdateSendersVehicle
                    SenderVehicle.V_PosX = TargetVehicle.V_PosX;
                    SenderVehicle.V_PosY = TargetVehicle.V_PosY;
                    SenderVehicle.V_PosZ = TargetVehicle.V_PosZ;
                    #endregion
                    #region BasicFlightData
                    Packets.Packet_11_FlightData FlightDataOut = new Packets.Packet_11_FlightData(5);
                    float TDelta = (float)(DateTime.Now - TargetVehicle.LastUpdated).TotalSeconds;
                    FlightDataOut.ID              = FormationData.SenderID;
                    FlightDataOut.TimeStamp       = FormationData.TimeStamp;
                    FlightDataOut.PosX            = TargetVehicle.PosX + FormationData.PosX + (TDelta * (TargetVehicle.V_PosX / 10));
                    FlightDataOut.PosY            = TargetVehicle.PosY + FormationData.PosY + (TDelta * (TargetVehicle.V_PosY / 10));
                    FlightDataOut.PosZ            = TargetVehicle.PosZ + FormationData.PosZ + (TDelta * (TargetVehicle.V_PosZ / 10));
                    FlightDataOut.V_PosX          = TargetVehicle.V_PosX;
                    FlightDataOut.V_PosY          = TargetVehicle.V_PosY;
                    FlightDataOut.V_PosZ          = TargetVehicle.V_PosZ;
                    FlightDataOut.HdgX            = FormationData.HdgX;
                    FlightDataOut.HdgY            = FormationData.HdgY;
                    FlightDataOut.HdgZ            = FormationData.HdgZ;
                    FlightDataOut.V_HdgX          = (short)FormationData.V_HdgX;
                    FlightDataOut.V_HdgY          = (short)FormationData.V_HdgY;
                    FlightDataOut.V_HdgZ          = (short)FormationData.V_HdgZ;
                    FlightDataOut.Weight_Fuel     = 100;
                    FlightDataOut.Weight_Payload  = 100;
                    FlightDataOut.Weight_SmokeOil = 100;
                    #endregion
                    #region Animation
                    FlightDataOut.Anim_Aileron  = FormationData.Anim_Aileron;
                    FlightDataOut.Anim_Boards   = FormationData.Anim_Boards;
                    FlightDataOut.Anim_BombBay  = FormationData.Anim_BombBay;
                    FlightDataOut.Anim_Brake    = FormationData.Anim_Brake;
                    FlightDataOut.Anim_Elevator = FormationData.Anim_Elevator;
                    FlightDataOut.Anim_Flaps    = FormationData.Anim_Flaps;
                    FlightDataOut.Anim_Gear     = FormationData.Anim_Gear;
                    FlightDataOut.Anim_Nozzle   = FormationData.Anim_Nozzle;
                    FlightDataOut.Anim_Reverse  = FormationData.Anim_Reverse;
                    FlightDataOut.Anim_Rudder   = FormationData.Anim_Rudder;
                    FlightDataOut.Anim_Throttle = FormationData.Anim_Throttle;
                    FlightDataOut.Anim_Trim     = FormationData.Anim_Trim;
                    FlightDataOut.Anim_VGW      = FormationData.Anim_VGW;
                    FlightDataOut._Anim_Flags   = FormationData._Anim_Flags;
                    #endregion

                    #region SendFlightData
                    ThisClient.SendPacket(FlightDataOut);
                    #endregion
                    return(true);
                }
 public static bool OYSHandle_11_FlightData(Client ThisClient, Packets.GenericPacket InPacket)
 {
     Console.WriteLine("Got Formation Data.");
     #region PrepareFormationData
     Packets.Packet_64_11_FormationData FormationData = new Packets.Packet_64_11_FormationData(InPacket);
     if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).Count() <= 0)
     {
         Console.WriteLine("Target N/A");
         return(false);
     }
     if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).Count() <= 0)
     {
         Console.WriteLine("Sender N/A");
         return(false);
     }
     Vehicle SenderVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).ToArray()[0];
     Vehicle TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).ToArray()[0];
     #endregion
     #region ValidateFlightData
     if (SenderVehicle.TimeStamp > FormationData.TimeStamp)
     {
         Console.WriteLine("OLD FORM");
         return(false);
     }
     SenderVehicle.Update(FormationData);
     #endregion
     #region UpdateSendersVehicle
     SenderVehicle.V_PosX = TargetVehicle.V_PosX;
     SenderVehicle.V_PosY = TargetVehicle.V_PosY;
     SenderVehicle.V_PosZ = TargetVehicle.V_PosZ;
     #endregion
     #region BasicFlightData
     Packets.Packet_11_FlightData FlightDataOut = new Packets.Packet_11_FlightData(3);
     float TDelta = (float)(DateTime.Now - TargetVehicle.LastUpdated).TotalSeconds;
     FlightDataOut.ID              = FormationData.SenderID;
     FlightDataOut.PosX            = TargetVehicle.PosX + FormationData.PosX + (TDelta * (TargetVehicle.V_PosX / 10));
     FlightDataOut.PosY            = TargetVehicle.PosY + FormationData.PosY + (TDelta * (TargetVehicle.V_PosY / 10));
     FlightDataOut.PosZ            = TargetVehicle.PosZ + FormationData.PosZ + (TDelta * (TargetVehicle.V_PosZ / 10));
     FlightDataOut.V_PosX          = TargetVehicle.V_PosX;
     FlightDataOut.V_PosY          = TargetVehicle.V_PosY;
     FlightDataOut.V_PosZ          = TargetVehicle.V_PosZ;
     FlightDataOut.HdgX            = FormationData.HdgX;
     FlightDataOut.HdgY            = FormationData.HdgY;
     FlightDataOut.HdgZ            = FormationData.HdgZ;
     FlightDataOut.V_HdgX          = FormationData.V_HdgX;
     FlightDataOut.V_HdgY          = FormationData.V_HdgY;
     FlightDataOut.V_HdgZ          = FormationData.V_HdgZ;
     FlightDataOut.Weight_Fuel     = 100;
     FlightDataOut.Weight_Payload  = 100;
     FlightDataOut.Weight_SmokeOil = 100;
     #endregion
     #region Animation
     FlightDataOut.Anim_Aileron  = FormationData.Anim_Aileron;
     FlightDataOut.Anim_Boards   = FormationData.Anim_Boards;
     FlightDataOut.Anim_BombBay  = FormationData.Anim_BombBay;
     FlightDataOut.Anim_Brake    = FormationData.Anim_Brake;
     FlightDataOut.Anim_Elevator = FormationData.Anim_Elevator;
     FlightDataOut.Anim_Flaps    = FormationData.Anim_Flaps;
     FlightDataOut.Anim_Gear     = FormationData.Anim_Gear;
     FlightDataOut.Anim_Nozzle   = FormationData.Anim_Nozzle;
     FlightDataOut.Anim_Reverse  = FormationData.Anim_Reverse;
     FlightDataOut.Anim_Rudder   = FormationData.Anim_Rudder;
     FlightDataOut.Anim_Throttle = FormationData.Anim_Throttle;
     FlightDataOut.Anim_Trim     = FormationData.Anim_Trim;
     FlightDataOut.Anim_VGW      = FormationData.Anim_VGW;
     FlightDataOut._Anim_Flags   = FormationData._Anim_Flags;
     #endregion
     #region Send FlightData
     FlightDataOut.TimeStamp = (float)(DateTime.Now - OpenYS.TimeStarted).TotalSeconds;
     FormationData.TimeStamp = (float)(DateTime.Now - OpenYS.TimeStarted).TotalSeconds;
     foreach (Client OtherClient in Clients.AllClients.ToArray())
     {
         if (OtherClient.Vehicle != null)
         {
             if (FlightDataOut.ID == OtherClient.Vehicle.ID)
             {
                 continue;
             }
             //Console.WriteLine("-Did nothing.");
         }
         if (OtherClient.YSFClient.OpenYSSupport)
         {
             ThisClient.SendPacket(FormationData.ToCustomPacket());
             //OtherClient.SendPacket(FlightDataOut);
         }
         if (!OtherClient.YSFClient.OpenYSSupport)
         {
             ThisClient.SendPacket(FlightDataOut);
         }
     }
     #endregion
     return(true);
 }