private static bool YSFHandle_13_RemoveAircraft(Client ThisClient, Packets.GenericPacket InPacket)
 {
     ThisClient.SendPacket(InPacket);
     Packets.Packet_13_RemoveAirplane RemoveAirplane = new Packets.Packet_13_RemoveAirplane(InPacket);
     lock (Vehicles.List) Vehicles.List.RemoveAll(x => x.ID == RemoveAirplane.ID);
     if (Clients.YSFClients[0] == ThisClient)
     {
         if (Settings.Flight.LeaveFlightNotification)
         {
             Console.WriteLine("&3" + "Aircraft ID " + RemoveAirplane.ID + " Removed");
         }
     }
     //Console.WriteLine("REMOVED VEHICLE. TOTAL VEHICLES IS NOW: " + Server.Info.Vehicles.Count.ToString());
     return(true);
 }
        public static bool OpenYS_Command_Flight_Kill_Method(Client ThisClient, CommandReader Command)
        {
            if (Command._CmdArguments.Count() < 1)
            {
                ThisClient.SendMessage("&eSpecify a Vehicle ID to kill.\n\nUse &a/ListUsers&e to get the ID.");
                return(false);
            }
            uint output = 0;

            if (!UInt32.TryParse(Command._CmdArguments[0], out output))
            {
                //didn't get a number... try and find a client with that name?
                Client MatchingClient = Clients.FindByUserName(Command._CmdRawArguments);
                if (MatchingClient != Clients.NoClient)
                {
                    //did match a client name!
                    if (MatchingClient.Vehicle != Vehicles.NoVehicle)
                    {
                        //client has a vehicle!
                        output = MatchingClient.Vehicle.ID;
                        goto Kill;
                    }
                    else
                    {
                        ThisClient.SendMessage("&eThat client isn't flying...");
                        return(false);
                    }
                }
                ThisClient.SendMessage("&eFormat incorrect: Be sure you are using an integer value!");
                return(false);
            }
            if (Vehicles.List.Where(x => x.ID == output).Count() == 0)
            {
                ThisClient.SendMessage("&eThat Vehicle doesn't exist!");
                return(false);
            }
Kill:
            Packets.Packet_13_RemoveAirplane KillID = new Packets.Packet_13_RemoveAirplane(output);
            Clients.AllClients.SendPacket(KillID);
            ThisClient.SendMessage("&eKilled &c" + output.ToString() + "&e.");
            Clients.AllClients.Exclude(ThisClient).SendMessage("&e" + ThisClient.Username + " Killed VehicleID &c" + output.ToString() + "&e.");
            return(true);
        }
Exemple #3
0
            public bool StopReplay()
            {
                Playing     = false;
                CurrentTime = 0;
                Loaded      = false;
                #region despawn the aircraft
                foreach (uint ThisID in AircraftIDs)
                {
                    Packets.Packet_13_RemoveAirplane ThisRemoveAirplane = new Packets.Packet_13_RemoveAirplane(ThisID);

                    lock (Vehicles.List) Vehicles.List.RemoveAll(x => x.ID == ThisRemoveAirplane.ID);

                    foreach (Client ThisClient in Clients.YSFClients)
                    {
                        Packets.Packet_06_Acknowledgement AcknowledgeLeave = new Packets.Packet_06_Acknowledgement(2, ThisRemoveAirplane.ID);
                        //ThisClient.SendPacketGetPacket(ThisRemoveAirplane, AcknowledgeLeave);
                        ThisClient.SendPacket(ThisRemoveAirplane);
                    }
                    continue;
                }
                #endregion

                return(true);
            }
Exemple #4
0
            public bool SendUpdate()
            {
                if (!Loaded)
                {
                    return(false);
                }
                if (Playing)
                {
                    CurrentTime += 0.1;
                }
                #region GetCurrentPackets
                List <Packets.GenericPacket> PacketsToSend =
                    (
                        from ThisPacketEvent in Records
                        where ThisPacketEvent.TimeStamp >= PreviousTime
                        where ThisPacketEvent.TimeStamp < CurrentTime
                        select ThisPacketEvent.Packet
                    ).ToList();
                if (PacketsToSend.Count == 0)
                {
                    return(false);
                }
                List <Packets.Packet_11_FlightData> FlightDataPacketsToSend =
                    (
                        from ThisFlightDataPacket in PacketsToSend
                        where ThisFlightDataPacket.Type == 11
                        select new Packets.Packet_11_FlightData(ThisFlightDataPacket)
                    ).OrderByDescending(x => x.TimeStamp).ToList();
                #endregion

                List <Client> CurrentClients = Clients.LoggedIn;
                foreach (uint ThisACID in AircraftIDs)
                {
                    #region GetFlightDataFromThisAircraft
                    List <Packets.Packet_11_FlightData> ThisAircraftFlightData =
                        (
                            from ThisFlightDataPacket in FlightDataPacketsToSend
                            where ThisFlightDataPacket.ID == ThisACID
                            select ThisFlightDataPacket
                        ).ToList();
                    #endregion
                    if (ThisAircraftFlightData.Count < 1)
                    {
                        continue;
                    }

                    #region GetLatestFlightData
                    Packets.Packet_11_FlightData NewesetFlightData =
                        (from ThisFlightDataPacket in FlightDataPacketsToSend
                         where ThisFlightDataPacket.ID == ThisACID
                         select ThisFlightDataPacket).ToArray().Last();

                    #endregion

                    #region UpdateFlightData
                    foreach (Vehicle ThisVehicle in Vehicles.List.Where(x => x.ID == ThisACID))
                    {
                        ThisVehicle.Update(NewesetFlightData);
                    }
                    #endregion

                    float difference = (float)(NewesetFlightData.TimeStamp - PreviousTime);
                    foreach (Client ThisClient in CurrentClients)
                    {
                        #region SetTimeToNow
                        NewesetFlightData.TimeStamp = (float)((DateTime.Now - OpenYS.TimeStarted).TotalSeconds - (CurrentTime - PreviousTime) + difference);
                        #endregion

                        //Debug.WriteLine(NewesetFlightData.TimeStamp + " Ready to send to " + ThisClient.Username);
                        ThisClient.SendPacket(NewesetFlightData);
                        //Debug.WriteLine(NewesetFlightData.TimeStamp + " Send Flight Data.");
                    }
                    continue;
                }

                foreach (Packets.GenericPacket ThisPacket in PacketsToSend)
                {
                    if (ThisPacket.Type == 11)
                    {
                        continue;
                    }

                    #region Join Data
                    if (ThisPacket.Type == 05)
                    {
                        Packets.Packet_05_EntityJoined ThisJoinData = new Packets.Packet_05_EntityJoined(ThisPacket);

                        #region Create Vehicle
                        Vehicle ThisVehicle = new Vehicle();
                        ThisVehicle.Update(ThisJoinData);
                        //ThisJoinData = ThisVehicle.GetJoinPacket(false);
                        #endregion

                        #region Add Vehicle to Vehicles List
                        Vehicles.List.Add(ThisVehicle);
                        VehiclesHistory.List.Add(ThisVehicle);
                        #endregion

                        foreach (Client ThisClient in CurrentClients)
                        {
                            Packets.Packet_06_Acknowledgement Acknowledgement;
                            if (ThisJoinData.IsAircraft)
                            {
                                Acknowledgement = new Packets.Packet_06_Acknowledgement(0, ThisJoinData.ID);
                            }
                            else
                            {
                                Acknowledgement = new Packets.Packet_06_Acknowledgement(1, 0);
                            }
                            //ThisClient.SendPacketGetPacket(ThisJoinData, Acknowledgement);
                            ThisClient.SendPacket(ThisJoinData);
                        }
                        continue;
                    }
                    #endregion

                    #region Leave Data
                    if (ThisPacket.Type == 13)
                    {
                        Packets.Packet_13_RemoveAirplane ThisRemoveAirplane = new Packets.Packet_13_RemoveAirplane(ThisPacket);

                        lock (Vehicles.List) Vehicles.List.RemoveAll(x => x.ID == ThisRemoveAirplane.ID);

                        foreach (Client ThisClient in CurrentClients)
                        {
                            Packets.Packet_06_Acknowledgement AcknowledgeLeave = new Packets.Packet_06_Acknowledgement(2, ThisRemoveAirplane.ID);
                            //ThisClient.SendPacketGetPacket(ThisRemoveAirplane, AcknowledgeLeave);
                            ThisClient.SendPacket(ThisRemoveAirplane);
                        }
                        continue;
                    }
                    #endregion

                    CurrentClients.SendPacket(ThisPacket);
                }
                if (Playing)
                {
                    PreviousTime = CurrentTime;
                }
                return(true);
            }
Exemple #5
0
            public bool LoadReplay(string FileName)
            {
                #region Deny if already loading!
                if (Loading)
                {
                    Debug.WriteLine("Failure to load YSFlight Replay (Already Loading! Can't Dual Process!)");
                    return(false);
                }
                #endregion
                #region Deny if already loaded!
                if (Loaded)
                {
                    Debug.WriteLine("Failure to load YSFlight Replay (Already Loaded! Can't OverWrite!)");
                    return(false);
                }
                #endregion
                #region Deny if file not found!
                if (!Files.FileExists(FileName))
                {
                    Debug.WriteLine("Failure to load YSFlight Replay (File Not Found):\n    " + FileName);
                    return(false);
                }
                #endregion
                #region load records to buffer
                string[] Contents = Files.FileReadAllLines(FileName);
                #endregion
                #region clear the records, ready to write to.
                CurrentTime = 0;
                Records.Clear();
                #endregion

                Console.WriteLine("&eLoading Replay...");
                Loading = true;

                Threads.Add(() =>

                {
                    string Mode = "NONE";

                    #region Aircraft Data
                    string CurrentAC_Identify = "NULL";
                    uint CurrentAC_ID         = 0;
                    uint CurrentAC_IFF        = 0;
                    float CurrentAC_Fuel      = 100;
                    string CurrentAC_Tag      = "Replay";
                    #endregion

                    for (int CurrentLineNumber = 0; CurrentLineNumber < Contents.Length; CurrentLineNumber++)
                    {
                        #region prepare variables
                        string ThisLine  = Contents[CurrentLineNumber];
                        string Keyword   = ThisLine;
                        string Arguments = "";
                        if (Keyword.Contains(' '))
                        {
                            Arguments = Keyword.Split(new char[] { ' ' }, 2)[1];
                            Keyword   = Keyword.Split(' ')[0].ToUpperInvariant();
                        }

                        #endregion

                        #region No Aircraft at the moment.
                        if (Mode == "NONE")
                        {
                            if (Keyword == "AIRPLANE")
                            {
                                Mode         = "AIRPLANE";
                                CurrentAC_ID = World.Objects.GetNextID() | 256 * 256;
                                AircraftIDs.Add(CurrentAC_ID);
                                if (ThisLine.Contains(' '))
                                {
                                    CurrentAC_Identify = ThisLine.Split(' ')[1];
                                }
                                continue;
                            }
                        }
                        #endregion
                        #region Working on an aircraft.
                        if (Mode == "AIRPLANE")
                        {
                            #region get IFF
                            if (Keyword == "IDENTIFY")
                            {
                                UInt32.TryParse(Arguments, out CurrentAC_IFF);
                                continue;
                            }
                            #endregion
                            #region get Tag
                            if (Keyword == "IDANDTAG")
                            {
                                if (Arguments.Contains(' '))
                                {
                                    CurrentAC_Tag = Arguments.Split(new char[] { ' ' }, 2)[1];
                                    if (CurrentAC_Tag == "\"\"")
                                    {
                                        CurrentAC_Tag = "Replay";
                                    }
                                    continue;
                                }
                            }
                            #endregion
                            #region get airpcmnd
                            if (Keyword == "AIRPCMND")
                            {
                                if (Arguments.Contains(' '))
                                {
                                    string[] SubArguments = Arguments.Split(' ');
                                    #region get fuel
                                    if (SubArguments.Length > 1)
                                    {
                                        try
                                        {
                                            if (SubArguments[0].ToUpperInvariant() == "INITFUEL")
                                            {
                                                try
                                                {
                                                    CurrentAC_Fuel = (float)MetaData._Aircraft.FindByName(CurrentAC_Identify).Cache().WEIGFUEL;
                                                }
                                                catch
                                                {
                                                    Debug.WriteLine("Failed to set default fuel!");
                                                }
                                                try
                                                {
                                                    CurrentAC_Fuel = CurrentAC_Fuel / 100 * UInt32.Parse(SubArguments[1].Split('%')[0]);
                                                }
                                                catch
                                                {
                                                    Debug.WriteLine("Failed to load fuel: " + ThisLine);
                                                }
                                            }
                                        }
                                        catch
                                        {
                                            Debug.WriteLine("Failed to process AIRPCMND: " + ThisLine);
                                        }
                                    }
                                    #endregion
                                    continue;
                                }
                            }
                            #endregion
                            #region process flight records.
                            if (Keyword == "NUMRECOR")
                            {
                                int RecordsCount = 0;
                                if (Arguments.Contains(' '))
                                {
                                    Int32.TryParse(Arguments.Split(' ')[0], out RecordsCount);
                                }
                                CurrentLineNumber++;
                                List <Packets.Packet_11_FlightData> ThisAircraftFlightDataRecords = new List <Packets.Packet_11_FlightData>();
                                for (int i = 0; i < RecordsCount; i++)
                                {
                                    string[] RecordContents = new string[4];
                                    try
                                    {
                                        RecordContents[0] = Contents[CurrentLineNumber];
                                        RecordContents[1] = Contents[CurrentLineNumber + 1];
                                        RecordContents[2] = Contents[CurrentLineNumber + 2];
                                        RecordContents[3] = Contents[CurrentLineNumber + 3];
                                    }
                                    catch
                                    {
                                        Debug.WriteLine("Error reading lines for YSF Record!");
                                        continue;
                                    }
                                    CurrentLineNumber                      += 4;
                                    PacketEvent ThisPacketEvent             = ProcessYSFlightAircraftRecord(RecordContents, CurrentAC_ID);
                                    Packets.Packet_11_FlightData FlightData = new Packets.Packet_11_FlightData(ThisPacketEvent.Packet);
                                    FlightData.Weight_Fuel                  = CurrentAC_Fuel;
                                    FlightData.Weight_SmokeOil              = 100;
                                    FlightData.Weight_Payload               = 0;
                                    #region spawn the aircraft
                                    if (i == 0)
                                    {
                                        //first event, need to add a creation packet!
                                        Packets.Packet_05_EntityJoined EntityJoined = new Packets.Packet_05_EntityJoined();
                                        EntityJoined.ID                   = CurrentAC_ID;
                                        EntityJoined.IFF                  = CurrentAC_IFF;
                                        EntityJoined.PosX                 = FlightData.PosX;
                                        EntityJoined.PosY                 = FlightData.PosY;
                                        EntityJoined.PosZ                 = FlightData.PosZ;
                                        EntityJoined.RotX                 = (float)(FlightData.HdgX / 32767 * Math.PI);
                                        EntityJoined.RotY                 = (float)(FlightData.HdgY / 32767 * Math.PI);
                                        EntityJoined.RotZ                 = (float)(FlightData.HdgZ / 32767 * Math.PI);
                                        EntityJoined.Identify             = CurrentAC_Identify;
                                        EntityJoined.OwnerName            = CurrentAC_Tag;
                                        EntityJoined.IsOwnedByThisPlayer  = false;
                                        EntityJoined.IsOwnedByOtherPlayer = true;
                                        EntityJoined.IsAircraft           = true;

                                        Records.Add(new PacketEvent(FlightData.TimeStamp, EntityJoined));
                                    }
                                    #endregion
                                    if (i > 0)
                                    {
                                        Packets.Packet_11_FlightData PrevFlightData = ThisAircraftFlightDataRecords.ToArray()[i - 1];
                                        float TimeDifference = FlightData.TimeStamp - PrevFlightData.TimeStamp;
                                        float ScalingFactor  = 1f / TimeDifference;

                                        //short _X_Left = (ushort)FlightData.HdgX - (ushort)ThisAircraftFlightDataRecords.ToArray()[i - 1].HdgX; //350-010 = 340; //010-350 = -340
                                        //short _X_Right = (ushort)ThisAircraftFlightDataRecords.ToArray()[i - 1].HdgX - (ushort)FlightData.HdgX; //

                                        float ChangeYDeg = Numbers.AngleAcuteDifference(FlightData.HdgX.ToDegrees(), PrevFlightData.HdgX.ToDegrees());
                                        float ChangeXDeg = Numbers.AngleAcuteDifference(FlightData.HdgY.ToDegrees(), PrevFlightData.HdgY.ToDegrees());
                                        float ChangeZDeg = Numbers.AngleAcuteDifference(FlightData.HdgZ.ToDegrees(), PrevFlightData.HdgZ.ToDegrees());

                                        //FlightData.V_HdgX = (float)(ChangeXDeg * ScalingFactor / 180 * Math.PI);
                                        //FlightData.V_HdgY = (float)(ChangeYDeg * ScalingFactor / 180 * Math.PI);
                                        //FlightData.V_HdgZ = (float)(ChangeZDeg * ScalingFactor / 180 * Math.PI);
                                        //FlightData.V_HdgX = 0;
                                        //FlightData.V_HdgY = 2;
                                        //FlightData.V_HdgZ = 0;
                                        FlightData.V_PosX = (short)((FlightData.PosX - PrevFlightData.PosX) * ScalingFactor * 10);
                                        FlightData.V_PosY = (short)((FlightData.PosY - PrevFlightData.PosY) * ScalingFactor * 10);
                                        FlightData.V_PosZ = (short)((FlightData.PosZ - PrevFlightData.PosZ) * ScalingFactor * 10);
                                    }
                                    ThisPacketEvent.Packet = FlightData;
                                    Records.Add(ThisPacketEvent);
                                    ThisAircraftFlightDataRecords.Add(FlightData);
                                    #region despawn the aircraft
                                    if (i == RecordsCount - 1)
                                    {
                                        //Last record, need to destory the aircraft now!
                                        Packets.Packet_13_RemoveAirplane RemoveACPacket = new Packets.Packet_13_RemoveAirplane(CurrentAC_ID);
                                        Records.Add(new PacketEvent(FlightData.TimeStamp, RemoveACPacket));
                                    }
                                    continue;
                                    #endregion
                                }
                                Mode = "NONE";
                                CurrentLineNumber--;
                            }
                            #endregion
                        }
                        #endregion
                    }
                    Loaded  = true;
                    Loading = false;
                    Console.WriteLine("&aLoaded Replay.");
                }, "Replay Loader: " + FileName);

                return(true);
            }
        public bool Disconnect(string Reason)
        {
            lock (this)
            {
                if (IsDisconnecting())
                {
                    return(false);
                }
                if (IsDisconnected())
                {
                    return(false);
                }

                //Console.WriteLine(ConsoleColor.Red, Utilities.GetSourceCodePosition(1));
                if (IsFakeClient())
                {
                    return(true);
                }
                if (IsDisconnecting())
                {
                    Log.Warning("Disconnect() Called for Client: " + Username + ". Disconnecting Flag is Currently ON, A duplicate has occured and will be ignored.");
                    return(false);
                }
                if (IsDisconnected())
                {
                    Log.Warning("Disconnect() Called for Client: " + Username + ". Disconnect Flag is Currently ON, A duplicate has occured and will be ignored.");
                    return(false);
                }
                try
                {
                    if (YSFClient.Socket.Connected ||
                        (!YSFClient.Socket.Poll(1000, SelectMode.SelectRead) && YSFClient.Socket.Available != 0))
                    {
                        //The socket still exists!
                        //DO NOT DISCONNECT!

                        Log.Warning("Client " + Username + " Socket told to disconnect when it should not be disconnected? (Data Still Available?)");
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.ToString());
                }
                Log.Warning("Disconnect() Called for Client: " + Username + ". Disconnect Flag is Currently OFF, Setting to ON. (This is completely normal...)");
                Log.Warning("Disconnect() Reason: " + Reason);
                SetDisconnecting();
                #region Despawn Vehicle
                if (Vehicle != Vehicles.NoVehicle)
                {
                    //Need to tell all the other clients the vehicle is removed!
                    Packets.Packet_13_RemoveAirplane  RemoveAirplane   = new Packets.Packet_13_RemoveAirplane(Vehicle.ID);
                    Packets.Packet_06_Acknowledgement AcknowledgeLeave = new Packets.Packet_06_Acknowledgement(2, RemoveAirplane.ID);
                    foreach (Client OtherClient in Clients.AllClients.Exclude(this))
                    {
                        OtherClient.SendPacket(RemoveAirplane);
                        //OtherClient.GetPacket(AcknowledgeLeave);
                    }
                    if (Vehicle.VirtualCarrierObject_ID != 0)
                    {
                        Packets.Packet_19_RemoveGround RemoveVCO = new Packets.Packet_19_RemoveGround(Vehicle.VirtualCarrierObject_ID);
                        Clients.AllClients.Exclude(this).SendPacket(RemoveVCO);
                    }
                    Vehicles.List.RemoveAll(x => x == Vehicle);
                }
                #endregion
                Clients.RemoveClient(this); //remove self from the client list.
                #region Inform Players
                if ((this.Username == "nameless" & !this.ClientType.HasFlag(Client.FlagsClientType.YSFlightClient)) | this.IsBot())
                {
                    if (this.Username == "nameless")
                    {
                        if (Settings.Loading.BotPingMessages)
                        {
                            Console.WriteLine(ConsoleColor.Magenta, "Server was pinged by an unknown service.");
                        }
                    }
                    else if (this.IsBot())
                    {
                        if (Settings.Loading.BotPingMessages)
                        {
                            Console.WriteLine(ConsoleColor.Magenta, "Server was pinged by a serverlist.");
                        }
                    }
                }
                else
                {
                    foreach (Client OtherClient in Clients.AllClients.Exclude(this).ToArray())
                    {
                        OtherClient.SendMessage("&c" + Username + " left the server.");
                    }
                }
                #endregion
                #region Kill Client.
                try
                {
                    //lock (YSFClient.PacketWaiters)
                    //{
                    //    foreach (Connection.PacketWaiter ThisPacketWaiter in YSFClient.PacketWaiters.ToArray())
                    //    {
                    //        //force all listener threads to invalidate and cancel.
                    //        ThisPacketWaiter.Signal.Set();
                    //        ThisPacketWaiter.Signal.Dispose();
                    //    }
                    //}

                    //YSFClient.Disconnect();
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
                #endregion
                #region Kill Server.
                try
                {
                    //YSFServer.ReceiveThread.Abort();
                    //foreach (Connection.PacketWaiter ThisPacketWaiter in YSFServer.PacketWaiters.ToArray())
                    //{
                    //    //force all listener threads to invalidate and cancel.
                    //    ThisPacketWaiter.Signal.Set();
                    //    ThisPacketWaiter.Signal.Dispose();
                    //}

                    //YSFServer.Disconnect();
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
                #endregion
                //YSFClient.PacketLog.Log();
                StateConnection = Client.FlagsStateConnection.Disconnected;
                return(true);
            }
        }
        public static bool MicroTick()
        {
            #region DoWeather
            if (AdvancedWeatherOptions._Weather_Variable)
            {
                Packets.Packet_33_Weather TempWeather = AdvancedWeatherOptions.GetUpdatedWeather();
                TempWeather.Control_BlackOut       = false;
                TempWeather.Control_Collisions     = false;
                TempWeather.Control_LandEverywhere = false;
                Clients.AllClients.SendPacket(TempWeather);
            }
            #endregion
            #region DoHeartbeatMonitor
            Clients.DoHeartbeatMonitor();
            #endregion
            #region DoOnTickUpdateEvent
            lock (Events_OnMicroTickUpdate)
            {
                foreach (OnMicroTickUpdateEvent ThisMethod in Events_OnMicroTickUpdate)
                {
                    ThisMethod();
                }
            }
            #endregion

            #region CountThreads
            Thread[] _ThreadsArray;
            lock (Threads.List) _ThreadsArray = Threads.List.ToArray();
            foreach (Thread ThisThread in _ThreadsArray)
            {
                if (!ThisThread.IsAlive)
                {
                    //Log.Error("Thread killed as part of maintenance: " + ThisThread.Name);
                    Threads.List.RemoveAll(x => x == ThisThread);
                }
            }
            #endregion
            #region ManageVehicles
            Vehicle[] _VehiclesArray;
            lock (Vehicles.List) _VehiclesArray = Vehicles.List.ToArray();
            foreach (Vehicle ThisVehicle in _VehiclesArray)
            {
                if (Clients.Flying.Where(x => x.Vehicle == ThisVehicle).Count() < 1
                    & !ThisVehicle.IsVirtualVehicle)
                {
                    Vehicles.List.RemoveAll(x => x == ThisVehicle);
                    Packets.Packet_13_RemoveAirplane RemoveAirplane = new Packets.Packet_13_RemoveAirplane(ThisVehicle.ID);
                    foreach (Client OtherClient in Clients.AllClients)
                    {
                        Packets.Packet_06_Acknowledgement AcknowledgeLeave = new Packets.Packet_06_Acknowledgement(2, RemoveAirplane.ID);
                        //OtherClient.SendPacketGetPacket(RemoveAirplane, AcknowledgeLeave);
                        OtherClient.SendPacket(RemoveAirplane);
                    }
                    Console.WriteLine("&3Found a lost Vehicle... Cleaned it up!");
                    continue;
                }
                if (ThisVehicle.Invincible)
                {
                    Clients.LoggedIn.SendPacket(new Packets.Packet_30_AirCommand(ThisVehicle.ID, "STRENGTH", "255"));
                }
            }
            #endregion
            return(true);
        }