public static void Crash(Exception Ex, bool StopServer = false) { string crash = "<-=================- C R A S H -=================->"; if (Server.Properties.GetProperty("console-colors") == Config.SWITCH_ON) { Console.ForegroundColor = ConsoleColor.Red; } Console.WriteLine(Environment.NewLine + crash); Data.SendToLog("Detected server crash", Data.Log_Critical); Console.WriteLine(" * " + Ex.ToString()); Console.WriteLine(" * Source: " + Ex.Source); Console.WriteLine(crash + Environment.NewLine); if (Server.Properties.GetProperty("console-colors") == Config.SWITCH_ON) { Console.ForegroundColor = ConsoleColor.White; } if (StopServer) { Server.ServerStop(); } if (Server.Properties.GetProperty("save-crashes") == Config.SWITCH_ON) { string dt = DateTime.Now.ToShortDateString().Replace('.', '-') + "_" + DateTime.Now.ToLongTimeString().Replace(':', '-'); File.AppendAllText("crashdump_" + dt + ".txt", Ex.ToString()); } }
public static void LeavePlayer(Player p) { Data.SendToLog(Strings.From("player") + p.Name + Strings.From("player.left"), Data.Log_Info, ConsoleColor.DarkYellow); Players.Remove(p); BroadcastMessage(Strings.From("player") + p.Name + Strings.From("player.left"), Colors.Yellow); }
public static void JoinPlayer(Player p) { Players.Add(p); Data.SendToLog(Strings.From("player") + p.Name + Strings.From("level.join") + "'" + p.Level.Name + "'", Data.Log_Info, ConsoleColor.Yellow); BroadcastMessage(Strings.From("player") + p.Name + Strings.From("player.joined"), Colors.Yellow); }
public static void BroadcastMessage(string messageText, Color color) { foreach (Player p in GetOnlinePlayers()) { p.CurrentChat.SendMessage(messageText, color); } Data.SendToLog(messageText, Data.Log_Chat, ConsoleColor.Magenta); }
public static void ServerStop() { if (Working) { Working = false; addon.Addons.UnloadAll(); Data.SendToLog(Strings.From("server.stopped")); events.Events.CallEvent(new events.ServerStoppedEvent("stopped")); Listener.Stop(); ServerThread.Abort(); } }
public static void Main() { try { InitProperties(); if (Server.Properties.GetProperty("logging") == Config.SWITCH_ON && !File.Exists(Data.LOG_FILE)) { File.WriteAllText(Data.LOG_FILE, "Server log file of " + DateTime.Now.ToString()); } Strings.ExecuteLang(Properties.GetProperty("server-language")); Data.SendToLog(Strings.From("server.init") + Data.GetGameName() + " v." + Data.GetGameVersion() + " " + SERVER_BUILD_CODE , Data.Log_Info, ConsoleColor.Cyan); Level defaultLevel = LevelsProvider.Load(Server.Properties.GetProperty("default-level-name")); if (!LevelsProvider.Available || defaultLevel == null) { defaultLevel = new Level(Server.Properties.GetProperty("default-level-name")); Creator.CreateMesh(defaultLevel, 10, 10); } Levels.Add(defaultLevel); ServerStart(Properties.GetProperty("server-address"), Convert.ToInt32(Properties.GetProperty("server-port"))); events.Events.CallEvent(new events.ServerLoadedEvent("first start")); ConsoleReader.InitializeDafaultLines(); addon.Addons.LoadAll(); player.control.Ban.InitializeAll(); Data.SendToLog(Strings.From("server.done")); ConsoleReader.Read(); } catch (Exception ex) { Data.Crash(ex); Console.ReadKey(); } }
public static void ServerStart(string address, int port = Data.DEFAULT_SERVER_PORT) { Data.SendToLog(Strings.From("server.start") + address + ":" + port, Data.Log_Info, ConsoleColor.Green); Data.SetTitle(Strings.From("server.wait")); ServerThread = new Thread((ThreadStart) delegate { Listener.Listen(address, port); }); Working = true; ServerThread.Start(); ServerThread.IsBackground = true; if (Server.Properties.GetProperty("https-translator") == Config.SWITCH_ON) { new security.ServerTranslator(address, port); } }
public static void Log(string Message, params object[] args) { Data.SendToLog(string.Format(Message, args), Data.Log_Info, ConsoleColor.Gray); }
public static void ServerCritical(string Message) { Data.SendToLog(Message, Data.Log_Critical, ConsoleColor.Red); ServerStop(); }
public void Handler(Event CurrentEvent) { if (CurrentEvent.GetCode() == Events.Code_PacketRequestEvent) { PacketRequestEvent ev = (PacketRequestEvent)CurrentEvent; if (ev.GetPacket().GetPacketID() == Network.INVENTORY_PACKET) { Player player = ((InventoryPacketRequest)ev.GetPacket()).Player; if (ev.GetPacket().GetInt("ox") != -1 && player != null) { ushort ox = ev.GetPacket().GetUShort("ox"); ushort oy = ev.GetPacket().GetUShort("oy"); ushort x = ev.GetPacket().GetUShort("x"); ushort y = ev.GetPacket().GetUShort("y"); int id = ev.GetPacket().GetInt("id"); player.Click(ox, oy, x, y, id); } } if (ev.GetPacket().GetPacketID() == Network.CHAT_PACKET && !ev.Cancelled) { ChatPacketRequest packet = (ChatPacketRequest)ev.GetPacket(); if (packet.Message.Length > 0) { packet.Player.Chat(packet.Message); } } } if (CurrentEvent.GetCode() == Events.Code_PacketResponseEvent) { PacketResponseEvent ev = (PacketResponseEvent)CurrentEvent; switch (ev.GetPacket().GetPacketID()) { case Network.AUTH_PACKET: if (ev.GetPacket().GetStatus() == Packet.RESPONSE_STATUS_OK) { AuthPacketResponse packet = (AuthPacketResponse)ev.GetPacket(); if (player.control.Ban.IsBanned(packet.Login)) { packet.SetError(Errors.PlayerBanned); Data.SendToLog("Name banned! Closed: " + packet.Login, Data.Log_Warning); return; } Regex r = new Regex(@"^[a-zA-Z][a-zA-Z0-9-_]{1,20}$", RegexOptions.IgnoreCase | RegexOptions.Singleline); if (!r.Match(packet.Login).Success) { packet.SetError(Errors.InvalidName); Data.SendToLog("Name invalid! Closed: " + packet.Login, Data.Log_Warning); return; } if (Array.IndexOf(Server.GetOnlinePlayersStr(), packet.Login) < 0) { Server.JoinPlayer(new Player(packet.Token, packet.Login, Server.GetLevel(Server.Properties.GetProperty("default-level-name")), packet.Address)); } else { packet.SetError(Errors.PlayerAlreadyExists); } } break; case Network.GAMESTATUS_PACKET: if (ev.GetPacket().GetStatus() == Packet.RESPONSE_STATUS_OK) { GamestatusPacketResponse packet = (GamestatusPacketResponse)ev.GetPacket(); if (packet.Player != null) { packet.Player.Connection.NewStamp(DateTime.Now); } } break; case Network.SETTINGS_PACKET: if (ev.GetPacket().GetStatus() == Packet.RESPONSE_STATUS_OK) { SettingsPacketResponse packet = (SettingsPacketResponse)ev.GetPacket(); Events.CallEvent(new SettingsActivatedEvent(packet.Player, packet.ActivatedElement)); } break; } } }
public static string HandleCommand(string[] Args, string ownerName = "Console") { events.ConsoleCommandEvent ev = new events.ConsoleCommandEvent(Args); events.Events.CallEvent(ev); if (ev.Cancelled) { return(ev.Metadata); } switch (Args[0]) { case "?": case "help": ShowHelpText(); return(string.Join(", ", HelpCommandLines)); case "exit": Server.Exit(); return(Strings.From("cmd.closing")); case "stop": Server.ServerStop(); return(Strings.From("cmd.closing")); case "resume": Server.ServerResume(); return(Strings.From("cmd.resumed")); case "online": Data.SendToLog("Online: " + Server.GetOnlinePlayers().Length.ToString()); foreach (player.Player p in Server.GetOnlinePlayers()) { Data.SendToLog("- " + p.ToString()); } return(string.Join(", ", Server.GetOnlinePlayersStr())); case "ban": if (Args.Length < 2) { return(Strings.From("cmd.badargument")); } string ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; Regex r = new Regex(ValidIpAddressRegex, RegexOptions.IgnoreCase | RegexOptions.Singleline); if (r.Match(Args[1]).Success) { player.control.Ban.BanIP(Args[1], ownerName); } else { player.control.Ban.BanByName(Args[1], ownerName); } return("ok"); case "pardon": if (Args.Length < 2) { return(Strings.From("cmd.badargument")); } ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; r = new Regex(ValidIpAddressRegex, RegexOptions.IgnoreCase | RegexOptions.Singleline); if (r.Match(Args[1]).Success) { player.control.Ban.PardonIP(Args[1], ownerName); } else { player.control.Ban.PardonByName(Args[1], ownerName); } return("ok"); case "ip": string ip = "(server) " + Server.GetFullAddress(); if (Args.Length > 1 && Server.GetPlayer(Args[1]) != null) { ip = Server.GetPlayer(Args[1]).Connection.Address; } Data.SendToLog("IP = " + ip); return("IP = " + ip); default: Data.SendToLog(Strings.From("command.unknown"), Data.Log_Warning); return(Strings.From("command.unknown")); } }