void Listener_OnPublic(UserInfo user, string channel, string message) { //string allowedchars = "1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./!@#$%^*()_+QWERTYUIOPASDFGHJKL:\"ZXCVBNM<>? "; //string msg = message; if (message.Contains("^UGCS")) { Server.UpdateGlobalSettings(); return; } if (message.Contains("^IPGET ")) { foreach (Player p in Player.players) { if (p.name == message.Split(' ')[1]) { if (Server.UseGlobalChat && IsConnected()) { connection.Sender.PublicMessage(channel, "^IP " + p.name + ": " + p.ip); } } } } if (message.Contains("^SENDRULES ")) //^GETPLAYERINFO NICK PLAYER { if (Server.devs.Contains(user.Nick.ToLower())) { Player.GlobalMessage("JUSTATEST"); } else { Player.GlobalMessage("NOTATEST"); } string[] split = message.Split(' '); if (split.Length < 2) { return; } if (Server.GlobalChatNick != split[1]) { return; } Player p = Player.Find(split[2]); if (p == null) { return; } Command.all.Find("gcrules").Use(p, ""); } if (message.Contains("^GETINFO ")) { if (Server.GlobalChatNick == message.Split(' ')[1]) { if (Server.UseGlobalChat && IsConnected()) { connection.Sender.PublicMessage(channel, "^NAME: " + Server.name); connection.Sender.PublicMessage(channel, "^MOTD: " + Server.motd); connection.Sender.PublicMessage(channel, "^VERSION: " + Server.version); connection.Sender.PublicMessage(channel, "^GLOBAL NAME: " + Server.GlobalChatNick); connection.Sender.PublicMessage(channel, "^URL: " + Server.URL); connection.Sender.PublicMessage(channel, "^PLAYERS: " + Player.players.Count + "/" + Server.players); } } } if (message.StartsWith("^")) { return; } message = message.MCCharFilter(); if (Player.MessageHasBadColorCodes(null, message)) { return; } if (OnNewRecieveGlobalMessage != null) { OnNewRecieveGlobalMessage(user.Nick, message); } if (Server.devs.Contains(message.Split(':')[0]) && !message.StartsWith("[Dev]") && !message.StartsWith("[Developer]")) { message = "[Dev]" + message; } /*try { * if(GUI.GuiEvent != null) * GUI.GuiEvents.GlobalChatEvent(this, "> " + user.Nick + ": " + message); } * catch { Server.s.Log(">[Global] " + user.Nick + ": " + message); }*/ Player.GlobalMessage(String.Format("{0}>[Global] {1}: &f{2}", Server.GlobalChatColor, user.Nick, Server.profanityFilter ? ProfanityFilter.Parse(message) : message), true); }
void Listener_OnPublic(UserInfo user, string channel, string message) { //string allowedchars = "1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./!@#$%^*()_+QWERTYUIOPASDFGHJKL:\"ZXCVBNM<>? "; // Allowed chars are any ASCII char between 20h/32 and 7Ah/122 inclusive, except for 26h/38 (&) and 60h/96 (`) for (byte i = 10; i < 16; i++) { message = message.Replace(ColorSignal + i, c.IRCtoMC(i).Replace('&', '%')); } for (byte i = 0; i < 10; i++) { message = message.Replace(ColorSignal + i, c.IRCtoMC(i).Replace('&', '%')); } message = message.MCCharFilter(); if (Player.MessageHasBadColorCodes(null, message)) { return; } if (channel == opchannel) { Server.s.Log(String.Format("(OPs): [IRC] {0}: {1}", user.Nick, message)); Player.GlobalMessageOps(String.Format("To Ops &f-{0}[IRC] {1}&f- {2}", Server.IRCColour, user.Nick, Server.profanityFilter ? ProfanityFilter.Parse(message) : message)); } else { Server.s.Log(String.Format("[IRC] {0}: {1}", user.Nick, message)); Player.GlobalMessage(String.Format("{0}[IRC] {1}: &f{2}", Server.IRCColour, user.Nick, Server.profanityFilter ? ProfanityFilter.Parse(message) : message)); } }
void Listener_OnPublic(UserInfo user, string channel, string message) { //string allowedchars = "1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./!@#$%^*()_+QWERTYUIOPASDFGHJKL:\"ZXCVBNM<>? "; //string msg = message; RemoveVariables(ref message); RemoveWhitespace(ref message); if (message.Contains("^UGCS")) { Server.UpdateGlobalSettings(); return; } if (message.Contains("^IPGET ")) { foreach (Player p in Player.players) { if (p.name == message.Split(' ')[1]) { if (Server.UseGlobalChat && IsConnected()) { if (Player.IsLocalIpAddress(p.ip)) { connection.Sender.PublicMessage(channel, "^IP " + p.name + ": " + Server.IP); connection.Sender.PublicMessage(channel, "^PLAYER IS CONNECTING THROUGH A LOCAL IP."); } else { connection.Sender.PublicMessage(channel, "^IP " + p.name + ": " + p.ip); } } } } } if (message.Contains("^SENDRULES ")) { Player who = Player.Find(message.Split(' ')[1]); if (who != null) { Command.all.Find("gcrules").Use(who, ""); } } if (message.Contains("^GETINFO ")) { if (Server.GlobalChatNick == message.Split(' ')[1]) { if (Server.UseGlobalChat && IsConnected()) { connection.Sender.PublicMessage(channel, "^NAME: " + Server.name); connection.Sender.PublicMessage(channel, "^MOTD: " + Server.motd); connection.Sender.PublicMessage(channel, "^VERSION: " + Server.VersionString); connection.Sender.PublicMessage(channel, "^GLOBAL NAME: " + Server.GlobalChatNick); connection.Sender.PublicMessage(channel, "^URL: " + Server.URL); connection.Sender.PublicMessage(channel, "^PLAYERS: " + Player.players.Count + "/" + Server.players); } } } //for RoboDash's anti advertise/swear in #globalchat if (message.Contains("^ISASERVER ")) { if (Server.GlobalChatNick == message.Split(' ')[1]) { connection.Sender.PublicMessage(channel, "^IMASERVER"); } } if (message.StartsWith("^")) { return; } message = message.MCCharFilter(); if (String.IsNullOrEmpty(message)) { return; } if (Player.MessageHasBadColorCodes(null, message)) { return; } if (OnNewRecieveGlobalMessage != null) { OnNewRecieveGlobalMessage(user.Nick, message); } if (Server.Devs.Contains(message.Split(':')[0].ToLower()) && !message.StartsWith("[Dev]") && !message.StartsWith("[Developer]")) { message = "[Dev]" + message; } else if (Server.Mods.Contains(message.Split(':')[0].ToLower()) && !message.StartsWith("[Mod]") && !message.StartsWith("[Moderator]")) { message = "[Mod]" + message; } else if (Server.Mods.Contains(message.Split(':')[0].ToLower()) && !message.StartsWith("[GCMod]")) { message = "[GCMod]" + message; } /*try { * if(GUI.GuiEvent != null) * GUI.GuiEvents.GlobalChatEvent(this, "> " + user.Nick + ": " + message); } * catch { Server.s.Log(">[Global] " + user.Nick + ": " + message); }*/ Player.GlobalMessage(String.Format("{0}>[Global] {1}: &f{2}", Server.GlobalChatColor, user.Nick, Server.profanityFilter ? ProfanityFilter.Parse(message) : message), true); }
void Listener_OnPublic(UserInfo user, string channel, string message) { //string allowedchars = "1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./!@#$%^*()_+QWERTYUIOPASDFGHJKL:\"ZXCVBNM<>? "; //string msg = message; message = message.MCCharFilter(); if (Player.MessageHasBadColorCodes(null, message)) { return; } if (OnNewGlobalMessage != null) { OnNewGlobalMessage(user.Nick, message); } if (Server.devs.Contains(message.Split(':')[0]) && message.StartsWith("[Dev]") == false && message.StartsWith("[Developer]") == false) { message = "[Dev]" + message; } try { Gui.Window.thisWindow.LogGlobalChat("> " + user.Nick + ": " + message); } catch { Server.s.Log(">[Global] " + user.Nick + ": " + message); } Player.GlobalMessage(String.Format("{0}>[Global] {1}: &f{2}", Server.GlobalChatColor, user.Nick, Server.profanityFilter ? ProfanityFilter.Parse(message) : message), true); }
void Listener_OnPublic(UserInfo user, string channel, string message) { //string allowedchars = "1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./!@#$%^*()_+QWERTYUIOPASDFGHJKL:\"ZXCVBNM<>? "; //string msg = message; if (message.Contains("^UPDATEGLOBALSETTINGS")) { Server.UpdateGlobalSettings(); return; } if (message.Contains("^IPGET ")) { foreach (Player p in Player.players) { if (p.name == message.Split(' ')[1]) { if (Server.UseGlobalChat && IsConnected()) { connection.Sender.PublicMessage(channel, "^IP " + p.name + ": " + p.ip); } } } } if (message.StartsWith("^")) { return; } message = message.MCCharFilter(); if (Player.MessageHasBadColorCodes(null, message)) { return; } if (OnNewRecieveGlobalMessage != null) { OnNewRecieveGlobalMessage(user.Nick, message); } if (Server.devs.Contains(message.Split(':')[0]) && message.StartsWith("[Dev]") == false && message.StartsWith("[Developer]") == false) { message = "[Dev]" + message; } /*try { * if(GUI.GuiEvent != null) * GUI.GuiEvents.GlobalChatEvent(this, "> " + user.Nick + ": " + message); } * catch { Server.s.Log(">[Global] " + user.Nick + ": " + message); }*/ Player.GlobalMessage(String.Format("{0}>[Global] {1}: &f{2}", Server.GlobalChatColor, user.Nick, Server.profanityFilter ? ProfanityFilter.Parse(message) : message), true); }
//bla public override void Use(Player p, string message) { if (String.IsNullOrEmpty(message)) { Help(p); return; } if (!Server.UseGlobalChat) { Player.SendMessage(p, "Global Chat is disabled."); return; } if (p != null && p.muted) { Player.SendMessage(p, "You are muted."); return; } if (p != null && p.muteGlobal) { Player.SendMessage(p, "You cannot use Global Chat while you have it muted."); return; } if (p != null && !Server.gcaccepted.Contains(p.name.ToLower())) { RulesMethod(p); return; } Server.GlobalChat.Say((p != null ? p.name + ": " : "Console: ") + message); Player.GlobalMessage(Server.GlobalChatColor + "<[Global] " + (p != null ? p.name + ": " : "Console: ") + "&f" + (Server.profanityFilter ? ProfanityFilter.Parse(message) : message), true); try { Gui.Window.thisWindow.LogGlobalChat("< " + (p != null ? p.name + ": " : "Console: ") + message); } catch { Server.s.Log("<[Global] " + (p != null ? p.name + ": " : "Console: ") + message); } }
public void Start() { shuttingDown = false; Log("Starting Server"); if (!Directory.Exists("properties")) { Directory.CreateDirectory("properties"); } if (!Directory.Exists("bots")) { Directory.CreateDirectory("bots"); } if (!Directory.Exists("text")) { Directory.CreateDirectory("text"); } if (!Directory.Exists("extra")) { Directory.CreateDirectory("extra"); } if (!Directory.Exists("extra/undo")) { Directory.CreateDirectory("extra/undo"); } if (!Directory.Exists("extra/undoPrevious")) { Directory.CreateDirectory("extra/undoPrevious"); } if (!Directory.Exists("extra/copy/")) { Directory.CreateDirectory("extra/copy/"); } if (!Directory.Exists("extra/copyBackup/")) { Directory.CreateDirectory("extra/copyBackup/"); } try { if (File.Exists("server.properties")) { File.Move("server.properties", "properties/server.properties"); } if (File.Exists("rules.txt")) { File.Move("rules.txt", "text/rules.txt"); } if (File.Exists("welcome.txt")) { File.Move("welcome.txt", "text/welcome.txt"); } if (File.Exists("messages.txt")) { File.Move("messages.txt", "text/messages.txt"); } if (File.Exists("externalurl.txt")) { File.Move("externalurl.txt", "text/externalurl.txt"); } if (File.Exists("autoload.txt")) { File.Move("autoload.txt", "text/autoload.txt"); } if (File.Exists("IRC_Controllers.txt")) { File.Move("IRC_Controllers.txt", "ranks/IRC_Controllers.txt"); } if (Server.useWhitelist) { if (File.Exists("whitelist.txt")) { File.Move("whitelist.txt", "ranks/whitelist.txt"); } } } catch { } Properties.Load("properties/server.properties"); Updater.Load("properties/update.properties"); Group.InitAll(); Command.InitAll(); GrpCommands.fillRanks(); Block.SetBlocks(); Awards.Load(); if (File.Exists("text/emotelist.txt")) { foreach (string s in File.ReadAllLines("text/emotelist.txt")) { Player.emoteList.Add(s); } } else { File.Create("text/emotelist.txt"); } ProfanityFilter.Init(); timeOnline = DateTime.Now; try { MySQL.executeQuery("CREATE DATABASE if not exists `" + MySQLDatabaseName + "`", true); } catch (Exception e) { Server.s.Log("MySQL settings have not been set! Please reference the MySQL_Setup.txt file on setting up MySQL!"); Server.ErrorLog(e); //process.Kill(); return; } MySQL.executeQuery("CREATE TABLE if not exists Players (ID MEDIUMINT not null auto_increment, Name VARCHAR(20), IP CHAR(15), FirstLogin DATETIME, LastLogin DATETIME, totalLogin MEDIUMINT, Title CHAR(20), TotalDeaths SMALLINT, Money MEDIUMINT UNSIGNED, totalBlocks BIGINT, totalKicked MEDIUMINT, color VARCHAR(6), title_color VARCHAR(6), PRIMARY KEY (ID));"); // Check if the color column exists. DataTable colorExists = MySQL.fillData("SHOW COLUMNS FROM Players WHERE `Field`='color'"); if (colorExists.Rows.Count == 0) { MySQL.executeQuery("ALTER TABLE Players ADD COLUMN color VARCHAR(6) AFTER totalKicked"); } colorExists.Dispose(); // Check if the title color column exists. DataTable tcolorExists = MySQL.fillData("SHOW COLUMNS FROM Players WHERE `Field`='title_color'"); if (tcolorExists.Rows.Count == 0) { MySQL.executeQuery("ALTER TABLE Players ADD COLUMN title_color VARCHAR(6) AFTER color"); } tcolorExists.Dispose(); if (levels != null) { foreach (Level l in levels) { l.Unload(); } } ml.Queue(delegate { try { levels = new List <Level>(Server.maps); MapGen = new MapGenerator(); Random random = new Random(); if (File.Exists("levels/" + Server.level + ".lvl")) { mainLevel = Level.Load(Server.level); mainLevel.unload = false; if (mainLevel == null) { if (File.Exists("levels/" + Server.level + ".lvl.backup")) { Log("Attempting to load backup."); File.Copy("levels/" + Server.level + ".lvl.backup", "levels/" + Server.level + ".lvl", true); mainLevel = Level.Load(Server.level); if (mainLevel == null) { Log("BACKUP FAILED!"); Console.ReadLine(); return; } } else { Log("mainlevel not found"); mainLevel = new Level(Server.level, 128, 64, 128, "flat"); mainLevel.permissionvisit = LevelPermission.Guest; mainLevel.permissionbuild = LevelPermission.Guest; mainLevel.Save(); } } } else { Log("mainlevel not found"); mainLevel = new Level(Server.level, 128, 64, 128, "flat"); mainLevel.permissionvisit = LevelPermission.Guest; mainLevel.permissionbuild = LevelPermission.Guest; mainLevel.Save(); } addLevel(mainLevel); // fenderrock - Make sure the level does have a physics thread if (mainLevel.physThread == null) { mainLevel.physThread = new Thread(new ThreadStart(mainLevel.Physics)); } mainLevel.physThread.Start(); } catch (Exception e) { Server.ErrorLog(e); } }); ml.Queue(delegate { bannedIP = PlayerList.Load("banned-ip.txt", null); ircControllers = PlayerList.Load("IRC_Controllers.txt", null); foreach (Group grp in Group.GroupList) { grp.playerList = PlayerList.Load(grp.fileName, grp); } if (Server.useWhitelist) { whiteList = PlayerList.Load("whitelist.txt", null); } }); ml.Queue(delegate { if (File.Exists("text/autoload.txt")) { try { string[] lines = File.ReadAllLines("text/autoload.txt"); foreach (string line in lines) { //int temp = 0; string _line = line.Trim(); try { if (_line == "") { continue; } if (_line[0] == '#') { continue; } int index = _line.IndexOf("="); string key = _line.Split('=')[0].Trim(); string value; try { value = _line.Split('=')[1].Trim(); } catch { value = "0"; } if (!key.Equals(mainLevel.name)) { Command.all.Find("load").Use(null, key + " " + value); Level l = Level.FindExact(key); } else { try { int temp = int.Parse(value); if (temp >= 0 && temp <= 3) { mainLevel.setPhysics(temp); } } catch { Server.s.Log("Physics variable invalid"); } } } catch { Server.s.Log(_line + " failed."); } } } catch { Server.s.Log("autoload.txt error"); } GC.Collect(); GC.WaitForPendingFinalizers(); } else { Log("autoload.txt does not exist"); } }); ml.Queue(delegate { Log("Creating listening socket on port " + Server.port + "... "); if (Setup()) { s.Log("Done."); } else { s.Log("Could not create socket connection. Shutting down."); return; } }); ml.Queue(delegate { updateTimer.Elapsed += delegate { Player.GlobalUpdate(); PlayerBot.GlobalUpdatePosition(); }; updateTimer.Start(); }); // Heartbeat code here: ml.Queue(delegate { try { Heart.Init(); } catch (Exception e) { Server.ErrorLog(e); } }); // END Heartbeat code /* * Thread processThread = new Thread(new ThreadStart(delegate * { * try * { * PCCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); * ProcessCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName); * PCCounter.BeginInit(); * ProcessCounter.BeginInit(); * PCCounter.NextValue(); * ProcessCounter.NextValue(); * } * catch { } * })); * processThread.Start(); */ ml.Queue(delegate { messageTimer.Elapsed += delegate { RandomMessage(); }; messageTimer.Start(); process = System.Diagnostics.Process.GetCurrentProcess(); if (File.Exists("text/messages.txt")) { StreamReader r = File.OpenText("text/messages.txt"); while (!r.EndOfStream) { messages.Add(r.ReadLine()); } r.Dispose(); } else { File.Create("text/messages.txt").Close(); } if (Server.irc) { new IRCBot(); } // string CheckName = "FROSTEDBUTTS"; // if (Server.name.IndexOf(CheckName.ToLower())!= -1){ Server.s.Log("FROSTEDBUTTS DETECTED");} new AutoSaver(Server.backupInterval); //2 and a half mins blockThread = new Thread(new ThreadStart(delegate { while (true) { Thread.Sleep(blockInterval * 1000); foreach (Level l in levels) { try { l.saveChanges(); } catch (Exception e) { Server.ErrorLog(e); } } } })); blockThread.Start(); locationChecker = new Thread(new ThreadStart(delegate { while (true) { Thread.Sleep(3); for (int i = 0; i < Player.players.Count; i++) { try { Player p = Player.players[i]; if (p.frozen) { unchecked { p.SendPos((byte)-1, p.pos[0], p.pos[1], p.pos[2], p.rot[0], p.rot[1]); } continue; } else if (p.following != "") { Player who = Player.Find(p.following); if (who == null || who.level != p.level) { p.following = ""; if (!p.canBuild) { p.canBuild = true; } if (who != null && who.possess == p.name) { who.possess = ""; } continue; } if (p.canBuild) { unchecked { p.SendPos((byte)-1, who.pos[0], (ushort)(who.pos[1] - 16), who.pos[2], who.rot[0], who.rot[1]); } } else { unchecked { p.SendPos((byte)-1, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1]); } } } else if (p.possess != "") { Player who = Player.Find(p.possess); if (who == null || who.level != p.level) { p.possess = ""; } } ushort x = (ushort)(p.pos[0] / 32); ushort y = (ushort)(p.pos[1] / 32); ushort z = (ushort)(p.pos[2] / 32); if (p.level.Death) { p.RealDeath(x, y, z); } p.CheckBlock(x, y, z); p.oldBlock = (ushort)(x + y + z); } catch (Exception e) { Server.ErrorLog(e); } } } })); locationChecker.Start(); Log("Finished setting up server"); }); }