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); }
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); } }
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 }