public static bool OpenYS_Command_Weather_Day_Method(Client ThisClient, CommandReader Command)
 {
     OpenYS.SetServerTimeTicks(12000);
     Settings.Weather.Time = 1200;
     SettingsHandler.SaveAll();
     //OpenYS.AdvancedWeatherOptions._LastDayNightCycleRestart = DateTime.Now - new TimeSpan(0, 0, (int)(((float)OpenYS.AdvancedWeatherOptions._DayNightCycleLength) / 2 * 60)); //mid day is half a day AFTER midnight! adjust the start day time accordingly!
     ThisClient.SendMessage("&aServer time set to DAY.");
     Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set the time to DAY.");
     return(true);
 }
 public static bool OpenYS_Command_Options_RestartNow_Method(Client ThisClient, CommandReader Command)
 {
     //ThisClient.SendMessage("&c!!! &fServer Restarting &c!!!");
     //ThisClient.SendMessage("");
     Console.Locked = true;
     Clients.AllClients.Exclude(ThisClient).SendMessage("&c!!! &f" + ThisClient.Username + " is restarting the server &c !!!");
     //OpenYS.ResetTimerThread.Abort();
     OpenYS.ResetNow();
     return(true);
 }
 public static bool OpenYS_Command_Weather_Night_Method(Client ThisClient, CommandReader Command)
 {
     OpenYS.SetServerTimeTicks(0);
     Settings.Weather.Time = 0000;
     SettingsHandler.SaveAll();
     //OpenYS.AdvancedWeatherOptions._LastDayNightCycleRestart = DateTime.Now;
     ThisClient.SendMessage("&aServer time set to NIGHT.");
     Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set the time to NIGHT.");
     return(true);
 }
Exemple #4
0
 public static bool OpenYS_Command_Weather_Time_Method(Client ThisClient, CommandReader Command)
 {
     if (Command._CmdArguments.Count() < 1)
     {
         ThisClient.SendMessage("&eServer time is currently " + OpenYS.GetServerTimeString() + "J.");
         return(false);
     }
     if (Command._CmdArguments[0].ToUpperInvariant() == "DAY")
     {
         OpenYS.Weather = new Packets.Packet_33_Weather(OpenYS._Weather)
         {
             Lighting = 0
         };
         int      incrementticks = (int)(12 * 1000) + (int)Math.Round(0 * 1000d / 60d);
         TimeSpan Adjustment     = new TimeSpan(0, 0, 0, 0, (int)(incrementticks / 24000d * OpenYS.AdvancedWeatherOptions._DayNightCycleLength * 60 * 1000d));
         OpenYS.AdvancedWeatherOptions._LastDayNightCycleRestart = DateTime.Now - Adjustment;
         Clients.AllClients.SendPacket(OpenYS.Weather);
         ThisClient.SendMessage("&aServer time set to 1200J.");
         Settings.Weather.Time = 1200;
         SettingsHandler.SaveAll();
         Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set the time to 1200J.");
         return(true);
     }
     if (Command._CmdArguments[0].ToUpperInvariant() == "NIGHT")
     {
         OpenYS.Weather = new Packets.Packet_33_Weather(OpenYS._Weather)
         {
             Lighting = 65537
         };
         int      incrementticks = (int)(0 * 1000) + (int)Math.Round(0 * 1000d / 60d);
         TimeSpan Adjustment     = new TimeSpan(0, 0, 0, 0, (int)(incrementticks / 24000d * OpenYS.AdvancedWeatherOptions._DayNightCycleLength * 60 * 1000d));
         OpenYS.AdvancedWeatherOptions._LastDayNightCycleRestart = DateTime.Now - Adjustment;
         Clients.AllClients.SendPacket(OpenYS.Weather);
         ThisClient.SendMessage("&aServer time set to 0000J.");
         Settings.Weather.Time = 0000;
         SettingsHandler.SaveAll();
         Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set the time to 0000J.");
         return(true);
     }
     if (Command._CmdArguments[0].ToUpperInvariant() == "DAWN")
     {
         OpenYS.Weather = new Packets.Packet_33_Weather(OpenYS._Weather)
         {
             Lighting = 0
         };
         int      incrementticks = (int)(6 * 1000) + (int)Math.Round(0 * 1000d / 60d);
         TimeSpan Adjustment     = new TimeSpan(0, 0, 0, 0, (int)(incrementticks / 24000d * OpenYS.AdvancedWeatherOptions._DayNightCycleLength * 60 * 1000d));
         OpenYS.AdvancedWeatherOptions._LastDayNightCycleRestart = DateTime.Now - Adjustment;
         Clients.AllClients.SendPacket(OpenYS.Weather);
         ThisClient.SendMessage("&aServer time set to 0600J.");
         Settings.Weather.Time = 0600;
         SettingsHandler.SaveAll();
         Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set the time to 0600J.");
         return(true);
     }
     if (Command._CmdArguments[0].ToUpperInvariant() == "DUSK")
     {
         OpenYS.Weather = new Packets.Packet_33_Weather(OpenYS._Weather)
         {
             Lighting = 65537
         };
         Clients.AllClients.SendPacket(OpenYS.Weather);
         SettingsHandler.SaveAll();
         OpenYS.AdvancedWeatherOptions._LastDayNightCycleRestart = DateTime.Now;
         int      incrementticks = (int)(18 * 1000) + (int)Math.Round(0 * 1000d / 60d);
         TimeSpan Adjustment     = new TimeSpan(0, 0, 0, 0, (int)(incrementticks / 24000d * OpenYS.AdvancedWeatherOptions._DayNightCycleLength * 60 * 1000d));
         OpenYS.AdvancedWeatherOptions._LastDayNightCycleRestart = DateTime.Now - Adjustment;
         ThisClient.SendMessage("&aServer time set to 1800J.");
         Settings.Weather.Time = 1800;
         SettingsHandler.SaveAll();
         Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set the time to 1800J.");
         return(true);
     }
     try
     {
         String Input = Command._CmdArguments[0];
         if (Input.Length == 5 && Input.ToUpperInvariant().EndsWith("J"))
         {
             Input = Input.Substring(0, Input.Length - 1);
         }
         if (Input.Length != 4)
         {
             ThisClient.SendMessage("&eTime must be in 24 Hour Format!");
             return(false);
         }
         uint hours   = UInt32.Parse(Input.ToUpperInvariant().Substring(0, 2));
         uint minutes = UInt32.Parse(Input.ToUpperInvariant().Substring(2, 2));
         if (hours >= 24)
         {
             ThisClient.SendMessage("&aServer Time Invalid! Must be between 0000 and 2359!");
         }
         if (minutes >= 60)
         {
             ThisClient.SendMessage("&aServer Time Invalid! Minutes >= 60???");
         }
         uint incrementticks = (hours * 1000) + (uint)Math.Round(minutes * 1000d / 60d);
         OpenYS.SetServerTimeTicks(incrementticks);
         Settings.Weather.Time = OpenYS.GetServerTimeUint();
         SettingsHandler.SaveAll();
         ThisClient.SendMessage("&aServer time set to " + OpenYS.GetServerTimeString() + "J.");
         Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set the time to " + OpenYS.GetServerTimeString() + "J.");
         return(true);
     }
     catch
     {
     }
     ThisClient.SendMessage("&eUnrecognised time - \"" + Command._CmdArguments[0] + "\".");
     return(false);
 }
        public static bool OpenYS_Command_Weather_DNCycle_Method(Client ThisClient, CommandReader Command)
        {
            if (Command._CmdArguments.Count() < 1)
            {
                if (OpenYS.AdvancedWeatherOptions._DayNightCycleLength > 0)
                {
                    ThisClient.SendMessage("&eServer enables its day/night cycle (" + OpenYS.AdvancedWeatherOptions._DayNightCycleLength + ").");
                }
                else
                {
                    ThisClient.SendMessage("&eServer disables its day/night cycle.");
                }
                return(false);
            }
            uint ID = 0;

            if (!UInt32.TryParse(Command._CmdArguments[0], out ID))
            {
                ThisClient.SendMessage("&eFormat incorrect: Be sure you are using an integer value!");
                return(false);
            }
            if (ID > 0)
            {
                uint CurrentTick = OpenYS.GetServerTimeTicks();
                OpenYS.AdvancedWeatherOptions._DayNightCycleLength = (int)ID;
                OpenYS.SetServerTimeTicks((uint)CurrentTick);
                Random ThisRandom = new Random();
                ThisClient.SendMessage("&aServer day/night cycle set to &a" + ID + "&a Minutes.");
                Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set day/night cycle to &a" + ID + "&a Minutes.");
                if (OpenYS.GetServerTimeTicks() > 7000 && OpenYS.GetServerTimeTicks() < 19000)
                {
                    if (ThisRandom.Next(1, 100) == 99)
                    {
                        Clients.AllClients.SendMessage("&6Dawn of the first day. (Lol, YSZelda.)");
                    }
                    else
                    {
                        Clients.AllClients.SendMessage("&6The sun rises... (Day/Night Sequencer Started!)");
                    }
                }
                else
                {
                    if (ThisRandom.Next(1, 100) == 99)
                    {
                        Clients.AllClients.SendMessage("&5The Dark (k)Night rises. (Lol, YSBatman.)");
                    }
                    else
                    {
                        Clients.AllClients.SendMessage("&5The sun sets... (Day/Night Sequencer Started!)");
                    }
                }
                if (OpenYS.GetServerTimeTicks() > 7000 && OpenYS.GetServerTimeTicks() < 19000)
                {
                    OpenYS._Weather.Lighting = 0;
                }
                else
                {
                    OpenYS._Weather.Lighting = 65537;
                }
                OpenYS.UpdateWeather();
                SettingsHandler.SaveAll();
                return(true);
            }
            else
            {
                uint CurrentTick = OpenYS.GetServerTimeTicks();
                OpenYS.AdvancedWeatherOptions._DayNightCycleLength = 0;
                OpenYS.SetServerTimeTicks((uint)CurrentTick);
                ThisClient.SendMessage("&aServer day/night cycle set to &cOFF&a.");
                Clients.AllClients.Exclude(ThisClient).SendMessage("&a" + ThisClient.Username + " set day/night cycle to &cOFF&a.");
                SettingsHandler.SaveAll();
                return(true);
            }
        }
Exemple #6
0
        public static bool OpenYS_Command_Weather_Info_Method(Client ThisClient, CommandReader Command)
        {
            int Angle;
            int Speed;

            string _Angle;
            string _Speed;
            string TAF;

            Angle = 90 - (int)(Math.Atan2(OpenYS.Weather.WindZ, OpenYS.Weather.WindX) / Math.PI * 180) + 180;
            while (Angle < 0)
            {
                Angle += 360;
            }
            while (Angle >= 360)
            {
                Angle -= 360;
            }

            Speed = (int)(Math.Sqrt(Math.Pow(OpenYS.Weather.WindZ, 2) + Math.Pow(OpenYS.Weather.WindX, 2)) * 1.943844492440605);

            if (Speed <= 0)
            {
                Angle = 0;
            }
            _Angle = Angle.ToString();
            if (_Angle.Length > 3)
            {
                _Angle = "XXX";
            }
            while (_Angle.Length < 3)
            {
                _Angle = "0" + _Angle;
            }
            _Speed = Speed.ToString();
            if (_Speed.Length > 2)
            {
                _Speed = "99";
            }
            while (_Speed.Length < 2)
            {
                _Speed = "0" + _Speed;
            }

            TAF = _Angle + _Speed + "KT";
            if (TAF == "00000KT")
            {
                TAF = "calm";
            }

            string DayNight = OpenYS.GetServerTimeString() + "J";
            string Vis      = ((int)Math.Floor(OpenYS.Weather.Fog / 1000)).ToString();

            while (Vis.Length < 2)
            {
                Vis = "0" + Vis;
            }
            if (Vis.Length > 2)
            {
                Vis = "99";
            }
            ThisClient.SendMessage("&eWeather: " + "T-" + DayNight + " W-" + TAF + " V-" + Vis);
            return(true);
        }
            private static void Run(string[] args)
            {
                //Initialisation
                #region Initialisation
                Thread.CurrentThread.Name = "OpenYS Server Core";
                Threads.List.Add(Thread.CurrentThread);

                Console._LogOutput    = Log.ConsoleOutput;
                Console._Process      = CommandManager.ProcessConsole;
                Console.ConsolePrompt = "&3OpenYS&f->&f";
                Console.Locked        = true;

                System.Console.CursorVisible = false;
                System.Console.Title         = "OpenYS - YSFlight Open Source Server";
                System.Console.Clear();

                #region OYS_Console
                OpenYS.OpenYSConsole.SetConsole();
                OpenYS.OpenYSConsole.SetFakeClient();
                OpenYS.OpenYSConsole.Username = Settings.Options.ConsoleName;
                OpenYS.OpenYSConsole.OP();
                OpenYS.OpenYSConsole.YSFClient.ConnectionContext = ClientIO.ConnectionContexts.Connectionless;
                #endregion
                #region OYS_BackgroundHandler
                OpenYS.OpenYSBackGround.SetController();
                OpenYS.OpenYSBackGround.SetFakeClient();
                OpenYS.OpenYSBackGround.Username = Settings.Options.SchedulerName;
                OpenYS.OpenYSBackGround.OP();
                OpenYS.OpenYSBackGround.YSFClient.ConnectionContext = ClientIO.ConnectionContexts.Connectionless;
                #endregion

                Sequencers.Process = CommandManager.ProcessScheduler;
                Schedulers.Process = CommandManager.ProcessScheduler;

                OpenYS.BuildType          = OpenYS._BuildType.Server;
                Environment.EntryAssembly = Assembly.GetExecutingAssembly();
                #endregion

                //Begin Program.
                #region TRY:
#if RELEASE
                try
                {
#endif
                #endregion
                #region MAIN LOOP
                while (!Environment.TerminateSignal.WaitOne(0))
                {
                    //Loading
                    #region Loading
                    #region ? Argument
                    if (args.Length > 0)
                    {
                        if (args[0] == "/?" | args[0] == "?")
                        {
                            System.Console.WriteLine("OpenYS Open Source Server Project. (C) OfficerFlake 2015");
                            System.Console.WriteLine("    ");
                            System.Console.WriteLine("    Usage: OpenYS_Client.exe [HostAddress] [HostPort] [ListenerPortNumber]");
                            System.Console.WriteLine("    ");
                            System.Console.WriteLine("Thanks for using OpenYS!");
                            System.Environment.Exit(0);
                        }
                    }
                    #endregion
                    #region Clear Logs
                    Files.FileDelete("./Logs/Client_Debug.Log");
                    Files.FileDelete("./Logs/Console.Log");
                    #endregion
                    #region Introduction
                    Console.WriteLine(ConsoleColor.Cyan, "Welcome to OpenYS Client!");
                    Console.WriteLine();
                    #endregion
                    #region Version Number
                    Console.WriteLine(ConsoleColor.DarkCyan, "You are using version:&e " + Environment.GetCompilationDate());
                    Console.WriteLine();
                    #endregion
                    #region LoadSettings
                    SettingsHandler.LoadAll();
                    SettingsHandler.Monitor();
                    #endregion
                    #region InitialSettings
                    OpenYS.OpenYSConsole.Username    = Settings.Options.ConsoleName;
                    OpenYS.OpenYSBackGround.Username = Settings.Options.SchedulerName;
                    Environment.OwnerName            = Settings.Options.OwnerName;
                    Environment.OwnerEmail           = Settings.Options.OwnerEmail;
                    Environment.ServerName           = Settings.Options.ServerName;
                    OpenYS.Field = new Packets.Packet_04_FieldName(Settings.Loading.FieldName);
                    #endregion
                    #region Check Arguments
                    CheckArguments(args);
                    #endregion
                    #region Load Commands
                    Commands.LoadAll();
                    #endregion
                    #region Load YSF
                    FormatYSFDirectory();
                    if (!Directories.DirectoryExists(Settings.Loading.YSFlightDirectory))
                    {
                        Console.TerminateConsole("YSFlight Directory Not Found.");
                    }
                    LoadAllMetaData();
                    if (!World.Load(OpenYS.Field.FieldName))
                    {
                        Console.TerminateConsole("FLD Name not found.");
                    }
                    #endregion
                    #region Load Games
                    Games.Racing.Initialise();
                    //Console.WriteLine();
                    #endregion
                    #region Loading Complete!
                    Console.WriteLine("");
                    Console.WriteLine(ConsoleColor.DarkYellow, "Loading Complete!");
                    Console.WriteLine("");
                    #endregion
                    #endregion

                    //Connection Handling Services.
                    #region Start Server
                    Server.Listener.Start();
                    OpenYS.YSFListener.ServerStarted.WaitOne();
                    #endregion

                    #region External IP & IRC
                    Threads.Add(() =>
                    {
                        #region IRC
                        IRC.Init();
                        IRC.Start();
                        #endregion
                        #region External IP
                        //Console.WriteLine();
                        //Console.WriteLine("&6Fetching External IP...");
                        //Console.WriteLine();
                        var ExternalIP = Environment.ExternalIP;
                        //Console.WriteLine("&6External IP: " + Environment.ExternalIP.ToString());
                        #endregion
                    }, "IRC/External IP Loading...");
                    //Console.WriteLine();
                    #endregion

                    //Timing Services.
                    #region Restart Timer
                    OpenYS.StartResetTimer();
                    #endregion
                    #region Lock/Unlock Console Input
                    Console.Locked = false;
                    Console.WriteLine("\r");     //effectively refreshes the prompt...
                    #endregion
                    #region SetServerTime
                    OpenYS.SetServerTimeTicks(Settings.Weather.Time * 10);
                    #endregion
                    int SeqLoaded = Sequencers.LoadAll();
                    int SchLoaded = Schedulers.LoadAll();

                    Thread.Sleep(10);
                    int LoopsPassed = 0;

                    while (!OpenYS.Signal_ResetServer.WaitOne(0))
                    {
                        #region Start Tick Update!
                        DateTime StartUpdate = DateTime.Now;
                        #endregion

                        OpenYS.PollResetTimer();
                        //OpenYS.MicroTick();
                        //OpenYS.MacroTick();
                        //OpenYS.UpdateTimeOfDay();
                        //Schedulers.Poll();
                        //Sequencers.Poll();
                        //YSFlightReplays.ServerReplay.SendUpdate();

                        #region End Tick Update!
                        DateTime EndUpdate = DateTime.Now;
                        #endregion
                        #region MicroTick Delay
                        OpenYS.Time_LastMicroTick = DateTime.Now;
                        int ThisUpdateTotalTime = (int)Math.Ceiling(((TimeSpan)(EndUpdate - StartUpdate)).TotalMilliseconds);
                        if (ThisUpdateTotalTime < 100)
                        {
                            Thread.Sleep(100 - ThisUpdateTotalTime);     //Micro Tick Delay.
                        }
                        //No Delay, resume immediately! - The update took over 100m/s!
                        #endregion
                        LoopsPassed++;
                    }
                    //We should reset now.
                    //OpenYS.TickUpdaterThread.Abort();
                    Schedulers.StopAll();
                    Sequencers.StopAll();
                    Server.Listener.Stop();
                    Console.Clear();
                    args = Environment.CommandLineArguments;
                    //Utilities.Restart();
                }
                #endregion
                #region CATCH
#if RELEASE
            }

            catch (Exception e)
            {
                if (e is ThreadAbortException)
                {
                    return;
                }
                Log.Error(e);
                #region TRY:
#if RELEASE
                try
                {
#endif
                #endregion
                #region Terminate
                Console.Locked = true;
                Console.WriteLine(ConsoleColor.Red, "OpenYS Has been terminated with error:");
                Console.WriteLine();
                Console.WriteLine(Debug.GetStackTrace(e));
                Emailing.SendCrashReportEmail(e);
                Thread.Sleep(5000);
                //RemovePDB();
                System.Environment.Exit(0);
                Console.WriteLine();
                Console.Terminate.Set();
                Console.Reader.Abort();
                for (int i = 10 - 1; i > 0; i--)
                {
                    Console.WriteLine(String.Format("\r&cOpenYS Will Restart In &f{0}&c Seconds.   ", i + 1));
                    Thread.Sleep(1000);
                }
                Console.WriteLine(String.Format("\r&cOpenYS Will Restart In &f1&c Second.   "));
                Thread.Sleep(1000);
                for (int i = 3; i > 0; i--)
                {
                    Console.WriteLine("\r&c!!!&f OpenYS Restarting &c!!!                            ");
                    Thread.Sleep(500);
                    Console.WriteLine("\r                                                  ");
                    Thread.Sleep(500);
                }
                Environment.RestartNow();
                #endregion
                #region CATCH
#if RELEASE
            }
            catch (Exception e2)
            {
                Console.WriteLine("Safe Restart Failed... Sorry!");
                Console.WriteLine(e2.Message);
                Log.Error(e2);
                Thread.Sleep(Timeout.Infinite);
                Console.TerminateConsole("End Of Program");
                return;
            }
#endif
                #endregion
            }
#endif
                #endregion
            }