public static void ExampleCommand(Server server, ISender sender, ArgumentList args) { int arg; //if the user enters /tdsmpluginexample -test 1, it will retreive the next value '1' and put into 'arg' as an integer. if (args.TryParseOne<int>("-test", out arg)) sender.sendMessage(sender.Name + " Argument: " + arg); else { //For new people, I would not really expect you to understand the following. //If needed I can simplify this down... String Platform = Terraria_Server.Definitions.Platform.Type.ToString(); switch (Terraria_Server.Definitions.Platform.Type) { case Terraria_Server.Definitions.Platform.PlatformType.LINUX: Platform = "Linux"; break; case Terraria_Server.Definitions.Platform.PlatformType.MAC: Platform = "Mac"; break; case Terraria_Server.Definitions.Platform.PlatformType.WINDOWS: Platform = "Windows"; break; } (sender as Player).sendMessage("TDSM Plugin Example, Running OS: " + Platform, ChatColour.DarkGreen); } }
public static void TestPoint(Server server, ISender sender, ArgumentList args) { string param; Player player = server.GetPlayerByName(sender.Name); if (args.TryGetString(0, out param)) { switch (param.ToUpper()) { case "LOBBY": player.sendMessage("Teleporting to the lobby", Login.plugin.chatColor); Login.plugin.TeleportPlayerToPoint(player, Login.LOBBY); break; case "VALIDATED": player.sendMessage("Teleporting to the validated point", Login.plugin.chatColor); Login.plugin.TeleportPlayerToPoint(player, Login.VALIDATED); break; default: player.sendMessage("You must specify either lobby or validated", Login.plugin.chatColor); break; } } else player.sendMessage("You must specify either lobby or validated", Login.plugin.chatColor); }
public static void SetPoint(Server server, ISender sender, ArgumentList args) { string param; Player player = server.GetPlayerByName(sender.Name); if (args.TryGetString(0, out param)) { switch (param.ToUpper()) { case "LOBBY": player.PluginData["lobby"] = true; player.sendMessage("Hit a block where you want the lobby to be", Login.plugin.chatColor); break; case "VALIDATED": player.PluginData["validated"] = true; player.sendMessage("Hit a block where you want the validated point to be", Login.plugin.chatColor); break; default: player.sendMessage("You must specify either lobby or validated", Login.plugin.chatColor); break; } } else player.sendMessage("You must specify either lobby or validated", Login.plugin.chatColor); }
public static void InvalidatePlayer(Server server, ISender sender, ArgumentList args) { string playerName, param; Player player = server.GetPlayerByName(sender.Name); if (args.TryGetString(0, out playerName)) { if (server.GetPlayerByName(playerName) != null) { Login.plugin.SetPlayerInvalid(playerName); SendMessage(player, "You have invalidated " + playerName); } else { if (args.TryGetString(1, out param)) { if (param.ToUpper() == "FORCE") { Login.plugin.SetPlayerInvalid(playerName); SendMessage(player, "You have invalidated " + playerName); } else SendMessage(player, "Usage: /invalidate <player> (force)"); } else { SendMessage(player, "There is no current player names " + playerName); SendMessage(player, "Use /invalidate <player> force to remove offline players"); } } } else SendMessage(player, "You must supply a player name"); }
public static void roll(Server server, ISender sender, ArgumentList args) { Random random = new Random(); int result = 0; int times = 1; int die = 6; if (args.Count > 0) { string[] arg = args[0].Split('d'); times = Int32.Parse(arg[0]); die = Int32.Parse(arg[1]); } for (int i = 0; i < times; i++) { result += random.Next(1, die); } Player player = server.GetPlayerByName(sender.Name); if (! player.PluginData.ContainsKey("roll")) { player.PluginData.Add("roll", result); } else { player.PluginData["roll"] = result; } server.notifyAll(player.Name + " rolled a " + player.PluginData["roll"] + " on " + times.ToString() + "d" + die.ToString(), true); }
/// <summary> /// 3rd person talking. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="message">Message to send</param> public static void Action(Server server, ISender sender, string message) { ProgramLog.Chat.Log("* " + sender.Name + " " + message); if (sender is Player) NetMessage.SendData(25, -1, -1, "* " + sender.Name + " " + message, 255, 200, 100, 0); else NetMessage.SendData(25, -1, -1, "* " + sender.Name + " " + message, 255, 238, 130, 238); }
public World(Server Server, int MaxTilesX, int MaxTilesY) { maxTilesY = MaxTilesY; maxTilesX = MaxTilesX; server = Server; UpdateWorldCoords(false); }
public static void AddUser(Server server, ISender sender, ArgumentList args) { String User = "", IP = ""; Int32 Slot; args.TryParseOne<String>("-ip", out IP); //Optional //IP or name? if (args.TryParseTwo<String, Int32>("-name", out User, "-slot", out Slot)) { String[] exceptions = new String[2]; if (User.Length > 0) { exceptions[0] = User; } if (IP.Length > 0) { exceptions[1] = IP; } Region.Region region = null; for (int i = 0; i < Regions.regionManager.Regions.Count; i++) { if (Slot == i) region = Regions.regionManager.Regions[i]; break; } if (region == null) throw new CommandError("Specified Region Slot was incorrect."); //List<String> users = new List<String>(); int usersAdded = 0; foreach (String toInflate in exceptions) { if (toInflate != null) foreach (String inflatee in toInflate.Split(',')) { region.UserList.Add(inflatee); usersAdded++; } } if (usersAdded > 0) { sender.sendMessage(string.Format("{0} users were added to {1}", usersAdded, region.Name), 255, 0, 255, 0); Regions.Log(sender.Name + " created region {0} with {1} user/s", region.Name, usersAdded); } else throw new CommandError("A user was not able to be added to a Region."); } else throw new CommandError("Invalid arguments, Please review your command."); }
public World(Server server, int MaxTilesX, int MaxTilesY) { BottomWorld = DEFAULT_BOTTOM_WORLD; TopWorld = DEFAULT_TOP_WORLD; LeftWorld = DEFAULT_LEFT_WORLD; RightWorld = DEFAULT_RIGHT_WORLD; maxTilesY = MaxTilesY; maxTilesX = MaxTilesX; Server = server; UpdateWorldCoords(false); }
public static void Create(Server server, ISender sender, ArgumentList args) { if (sender is Player) { String Name = ""; String Desc = ""; Boolean Restrict = args.TryPop("-res"); Boolean RestrictNPC = args.TryPop("-npcres"); if (args.TryParseTwo<String, String>("-name", out Name, "-desc", out Desc) && Name.Trim().Length > 0) { var player = sender as Player; if (Selection.isInSelectionlist(player)) { Vector2[] regionAxis = Selection.GetSelection(player); Region.Region rgn = new Region.Region(); rgn.Name = Name; rgn.Description = Desc; rgn.Point1 = regionAxis[0]; rgn.Point2 = regionAxis[1]; rgn.Restricted = Restrict; rgn.RestrictedNPCs = RestrictNPC; if (rgn.IsValidRegion()) { Regions.regionManager.Regions.Add(rgn); if(Regions.regionManager.SaveRegion(rgn)) player.sendMessage("Region '" + Name + "' was successfully created.", ChatColour.Green); else player.sendMessage("There was an issue while saving the region", ChatColour.Red); } else { player.sendMessage("There was an issue while creating the region", ChatColour.Red); } } else { player.sendMessage("You need to select a region first!", ChatColour.Red); } } else { throw new CommandError("You have not specified certain arguments"); } } }
/// <summary> /// Adds a player or ip (Exception) to the ban list. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void Ban(Server server, ISender sender, ArgumentList args) { if (args != null && args.Count > 0) { //We now should check to make sure they are off the server... Player banee = Program.server.GetPlayerByName(args[0]); if (banee == null) { foreach (Player player in Program.server.PlayerList) { var ip = Netplay.slots[player.whoAmi].remoteAddress.Split(':')[0]; if (ip == args[0]) { banee = player; } } } Program.server.BanList.addException(args[0]); if (banee != null) { banee.Kick("You have been banned from this Server."); Program.server.BanList.addException(Netplay.slots[banee.whoAmi]. remoteAddress.Split(':')[0]); } Program.server.notifyOps(args[0] + " has been banned {" + sender.Name + "}", true); if (!Program.server.BanList.Save()) { Program.server.notifyOps("BanList Failed to Save due to " + sender.Name + "'s command", true); } } else { sender.sendMessage("Please review that command"); } }
/// <summary> /// Settles water like in the startup routine. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void SettleWater(Server server, ISender sender, ArgumentList args) { if (!Liquid.panicMode) { sender.sendMessage("Settling Liquids..."); Liquid.StartPanic(); sender.sendMessage("Complete."); } else { sender.sendMessage("Liquids are already settling"); } }
/// <summary> /// Sends a Server Message to all online Players. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="message">Message to send</param> public static void Say(Server server, ISender sender, string message) { ProgramLog.Chat.Log("<" + sender.Name + "> " + message); if (sender is Player) NetMessage.SendData(25, -1, -1, "<" + sender.Name + "> " + message, 255, 255, 255, 255); else NetMessage.SendData(25, -1, -1, "<" + sender.Name + "> " + message, 255, 238, 180, 238); }
/// <summary> /// Executes the world data save routine. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void SaveAll(Server server, ISender sender, ArgumentList args) { Program.server.notifyOps("Saving World...", true); WorldIO.saveWorld(Program.server.World.SavePath, false); while (WorldModify.saveLock) { } Program.server.notifyOps("Saving Data...", true); Program.server.BanList.Save(); Program.server.WhiteList.Save(); Program.server.notifyOps("Saving Complete.", true); }
/// <summary> /// De-OPs a given Player. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void DeopPlayer(Server server, ISender sender, ArgumentList args) { if (args.Count > 0) { String player = string.Join(" ", args).Trim(); server.notifyOps("De-Opping " + player + " {" + sender.Name + "}", true); if (Player.isInOpList(player, server)) { Program.server.OpList.removeException(player + ":" + Player.GetPlayerPassword(player, server)); } if (!server.OpList.Save()) { server.notifyOps("OpList Failed to Save due. {" + sender.Name + "}", true); return; } Player playerInstance = server.GetPlayerByName(player); if (playerInstance != null) { if (playerInstance.Op && playerInstance.HasClientMod) //Deop the client too { playerInstance.Op = false; if (playerInstance.HasClientMod) { NetMessage.SendData(Packet.CLIENT_MOD, playerInstance.whoAmi); } } else { playerInstance.Op = false; } playerInstance.sendMessage("You have been De-Opped!.", ChatColour.Green); } } else { sender.sendMessage("Please review that command"); } }
/// <summary> /// Lists currently enabled plugins. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void ListPlugins(Server server, ISender sender, ArgumentList args) { if (server.PluginManager.PluginList.Count > 0) { String plugins = ""; foreach (Plugin.Plugin plugin in server.PluginManager.PluginList.Values) { if (!plugin.Enabled || plugin.Name.Trim().Length > 0) { plugins += ", " + plugin.Name.Trim(); } } if (plugins.StartsWith(",")) { plugins = plugins.Remove(0, 1).Trim(); //Remove the ', ' from the start and trim the ends } sender.sendMessage("Loaded Plugins: " + plugins + "."); } else { sender.sendMessage("There are no loaded plugins."); } }
public void setServer(Server Server) { server = Server; }
public static void Reload(Server server) { server.getPluginManager().ReloadPlugins(); }
/// <summary> /// Sets OP status to a given Player. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void OpPlayer(Server server, ISender sender, ArgumentList args) { if (args.Count > 1) { String Password = args[args.Count - 1]; String player = string.Join(" ", args); player = player.Remove(player.IndexOf(Password), Password.Length).Trim().ToLower(); server.notifyOps("Opping " + player + " {" + sender.Name + "}", true); server.OpList.addException(player + ":" + Password, true, player.Length + 1); if (!server.OpList.Save()) { server.notifyOps("OpList Failed to Save due. {" + sender.Name + "}", true); return; } Player playerInstance = server.GetPlayerByName(player); if (playerInstance != null) { playerInstance.sendMessage("You are now OP!", ChatColour.Green); playerInstance.Op = true; if (playerInstance.HasClientMod) { NetMessage.SendData(Packet.CLIENT_MOD, playerInstance.whoAmi); } } } else { sender.sendMessage("Please review that command"); } }
/// <summary> /// Allows Operators to login. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void OpLogin(Server server, ISender sender, ArgumentList args) { if (sender is Player) { Player player = sender as Player; String Password = string.Join(" ", args).Trim(); if (player.isInOpList()) { if (player.Password.Equals(Password)) { player.Op = true; player.sendMessage("Successfully Logged in as OP.", ChatColour.DarkGreen); if (player.HasClientMod) { NetMessage.SendData(Packet.CLIENT_MOD, player.whoAmi); } } else { player.sendMessage("Incorrect OP Password.", ChatColour.DarkRed); } } else { player.sendMessage("You need to be Assigned OP Privledges.", ChatColour.DarkRed); } } }
/// <summary> /// Prints a Playerlist. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void OldList(Server server, ISender sender, ArgumentList args) { args.ParseNone(); var players = from p in Server.players where p.Active select p.Name; sender.sendMessage(string.Concat("Current players: ", string.Join(", ", players), "."), 255, 255, 240, 20); }
/// <summary> /// Enables or disables NPC spawning /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void NPCSpawns(Server server, ISender sender, ArgumentList args) { args.ParseNone(); Main.stopSpawns = !Main.stopSpawns; sender.sendMessage("NPC Spawning is now " + ((Main.stopSpawns) ? "off" : "on") + "!"); }
/// <summary> /// Enable/disable and get details about specific plugins. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void ManagePlugins(Server server, ISender sender, ArgumentList args) { /* * Commands: * list - shows all plugins * info - shows a plugin's author & description etc * disable - disables a plugin * enable - enables a plugin */ if (args.Count > 0 && args[0] != null && args[0].Trim().Length > 0) { String command = args[0].Trim(); args.RemoveAt(0); //Allow the commands to use any additional arguments without also getting the command switch (command) { case "list": { if (server.PluginManager.PluginList.Count > 0) { String plugins = ""; foreach (Plugin.Plugin plugin in server.PluginManager.PluginList.Values) { if (plugin.Name.Trim().Length > 0) { plugins += ", " + plugin.Name.Trim() + ((!plugin.Enabled) ? "[DISABLED] " : " "); } } if (plugins.StartsWith(",")) { plugins = plugins.Remove(0, 1).Trim(); //Remove the ', ' from the start and trim the ends } sender.sendMessage("Plugins: " + plugins + "."); } else { sender.sendMessage("There are no installed plugins."); } break; } case "info": { if (!(args.Count > 1 && args[1] != null && args[0].Trim().Length > 0)) { sender.sendMessage("Please review your argument count."); } String pluginName = string.Join(" ", args); if (server.PluginManager.PluginList.Count > 0) { Plugin.Plugin fplugin = server.PluginManager.GetPlugin(pluginName); if (fplugin != null) { sender.sendMessage("Plugin Name: " + fplugin.Name); sender.sendMessage("Plugin Author: " + fplugin.Author); sender.sendMessage("Plugin Description: " + fplugin.Description); sender.sendMessage("Plugin Enabled: " + fplugin.Enabled.ToString()); } else { sender.sendMessage("The plugin \"" + args[1] + "\" was not found."); } } else { sender.sendMessage("There are no plugins loaded."); } break; } case "disable": { if (!(args.Count > 1 && args[1] != null && args[1].Trim().Length > 0)) { sender.sendMessage("Please review your argument count."); } String pluginName = string.Join(" ", args); if (server.PluginManager.PluginList.Count > 0) { Plugin.Plugin fplugin = server.PluginManager.GetPlugin(pluginName); if (fplugin != null) { if (fplugin.Enabled) { if (server.PluginManager.DisablePlugin(fplugin.Name)) { sender.sendMessage(pluginName + " was disabled!"); } else { sender.sendMessage("There was an issue disabling plugin \"" + pluginName + "\"."); } } else { sender.sendMessage("The plugin \"" + pluginName + "\" is already disabled."); } } else { sender.sendMessage("The plugin \"" + pluginName + "\" could not be found."); } } else { sender.sendMessage("There are no plugins loaded."); } break; } case "enable": { if (!(args.Count > 1 && args[1] != null && args[0].Trim().Length > 0)) { sender.sendMessage("Please review your argument count."); } String pluginName = string.Join(" ", args); if (server.PluginManager.PluginList.Count > 0) { Plugin.Plugin fplugin = server.PluginManager.GetPlugin(pluginName); if (fplugin != null) { if (!fplugin.Enabled) { if (server.PluginManager.EnablePlugin(fplugin.Name)) { sender.sendMessage(args[1] + " was enabled!"); } else { sender.sendMessage("There was an issue enabling plugin \"" + pluginName + "\"."); } } else { sender.sendMessage("The plugin \"" + pluginName + "\" is already enabled."); } } else { sender.sendMessage("The plugin \"" + pluginName + "\" could not be found."); } } else { sender.sendMessage("There are no plugins loaded."); } break; } default: { sender.sendMessage("Please review your argument count"); break; } } } }
/// <summary> /// Sends the help list to the requesting player's chat. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void ShowHelp(Server server, ISender sender, ArgumentList args) { if (args == null || args.Count < 1) { for (int i = 0; i < Program.commandParser.serverCommands.Values.Count; i++) { String Key = Program.commandParser.serverCommands.Keys.ToArray()[i]; CommandInfo cmdInfo = Program.commandParser.serverCommands.Values.ToArray()[i]; if (CommandParser.CheckAccessLevel(cmdInfo, sender) && !Key.StartsWith(".")) { String tab = "\t"; if (Key.Length < 8) { tab = "\t\t"; } String Message = "\t" + Key + tab + "- " + cmdInfo.description; if (sender is Player) { Message = Message.Replace("\t", ""); } sender.sendMessage(Message); } } } else { int maxPages = (Program.commandParser.serverCommands.Values.Count / 5) + 1; if (maxPages > 0 && args.Count > 1 && args[0] != null) { try { int selectingPage = Int32.Parse(args[0].Trim()); if (selectingPage < maxPages) { for (int i = 0; i < maxPages; i++) { if ((selectingPage <= i)) { selectingPage = i * ((Program.commandParser.serverCommands.Values.Count / 5) + 1); break; } } int toPage = Program.commandParser.serverCommands.Values.Count; if (selectingPage + 5 < toPage) { toPage = selectingPage + 5; } for (int i = selectingPage; i < toPage; i++) { String Key = Program.commandParser.serverCommands.Keys.ToArray()[i]; CommandInfo cmdInfo = Program.commandParser.serverCommands.Values.ToArray()[i]; if (CommandParser.CheckAccessLevel(cmdInfo, sender) && !Key.StartsWith(".")) { String tab = "\t"; if (Key.Length < 8) { tab = "\t\t"; } String Message = "\t" + Key + tab + "- " + cmdInfo.description; if (sender is Player) { Message = Message.Replace("\t", ""); } sender.sendMessage(Message); } } } else { sender.sendMessage("Invalid page! Use: 0 -> " + (maxPages - 1).ToString()); } } catch (Exception) { ShowHelp(server, sender, null); } } else { ShowHelp(server, sender, null); } } }
public static void Exit(Server server) { server.StopServer(); }
/// <summary> /// Purge Server data /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void Purge(Server server, ISender sender, ArgumentList args) { var all = args.TryPop("all"); var something = false; if (all || args.TryPop("proj") || args.TryPop("projectiles")) { something = true; ProgramLog.Admin.Log("Purging all projectiles."); var msg = NetMessage.PrepareThreadInstance(); msg.PlayerChat(255, "<Server> Purging all projectiles.", 255, 180, 100); lock (Main.updatingProjectiles) { foreach (var projectile in Main.projectile) { projectile.Active = false; projectile.type = ProjectileType.UNKNOWN; msg.Projectile(projectile); } msg.Broadcast(); } } if (all || args.TryPop("npc") || args.TryPop("npcs")) { something = true; ProgramLog.Admin.Log("Purging all NPCs."); var msg = NetMessage.PrepareThreadInstance(); msg.PlayerChat(255, "<Server> Purging all NPCs.", 255, 180, 100); lock (Main.updatingNPCs) { foreach (var npc in Main.npcs) { if (npc.Active) { npc.Active = false; npc.life = 0; npc.netUpdate = false; npc.Name = ""; msg.NPCInfo(npc.whoAmI); } } msg.Broadcast(); } } if (all || args.TryPop("item") || args.TryPop("items")) { something = true; ProgramLog.Admin.Log("Purging all items."); var msg = NetMessage.PrepareThreadInstance(); msg.PlayerChat(255, "<Server> Purging all items.", 255, 180, 100); lock (Main.updatingItems) { for (int i = 0; i < 200; i++) { var item = Main.item[i]; if (item.Active) { Main.item[i] = new Item(); // this is what Main does when ignoreErrors is on *shrug* msg.ItemInfo(i); msg.ItemOwnerInfo(i); } } msg.Broadcast(); } } if (!something) throw new CommandError(""); }
public static void Restart(Sender sender, Server server) { if (sender is Player) { Player player = ((Player)sender); if (!player.Op) { player.sendMessage("You Cannot Perform That Action.", 255, 238f, 130f, 238f); return; } } Statics.keepRunning = true; server.StopServer(); while (Statics.serverStarted); Program.tConsole.WriteLine("Starting the Server"); server.Initialize(); WorldGen.loadWorld(); server.StartServer(); Program.updateThread = new Thread(Program.Updater); Statics.keepRunning = false; }
/// <summary> /// Reloads Plugins. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void Reload(Server server, ISender sender, ArgumentList args) { Boolean parseData = args.TryPop("-data"); server.notifyOps("Reloading plugins.", true); server.PluginManager.ReloadPlugins(); if (parseData) { server.notifyOps("Reloading properties.", true); Program.properties.Save(); Program.properties.Load(); } return; }
/// <summary> /// Allows Operators to logout. /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void OpLogout(Server server, ISender sender, ArgumentList args) { if (sender is Player) { var player = sender as Player; if (sender.Op) { player.Op = false; player.sendMessage("Successfully Logged Out.", ChatColour.DarkRed); if (player.HasClientMod) { NetMessage.SendData(Packet.CLIENT_MOD, player.whoAmi); } } else { player.sendMessage("You need to be Assigned OP Privledges.", ChatColour.DarkRed); } } }
/// <summary> /// Restarts the server /// </summary> /// <param name="server">Current Server instance</param> /// <param name="sender">Sending player</param> /// <param name="args">Arguments sent with command</param> public static void Restart(Server server, ISender sender, ArgumentList args) { server.notifyOps("Restarting the Server {" + sender.Name + "}", true); Statics.keepRunning = true; server.StopServer(); while (Statics.serverStarted) { Thread.Sleep(10); } ProgramLog.Log("Starting the Server"); server.Initialize(); WorldIO.loadWorld(); Program.updateThread = new ProgramThread ("Updt", Program.UpdateLoop); server.StartServer(); Statics.keepRunning = false; }