public void ProcessCommandCallback(object obj) { int activeLine = (int)((ParamObject)obj).Param[0]; string command = (string)((ParamObject)obj).Param[1]; Command fullCommand = Server.CommandProcessor.ParseCommand(command); string fullArgs = CommandProcessor.JoinArgs(fullCommand.CommandArgs.ToArray()); switch (fullCommand.CommandArgs[0].ToLower()) { case "/help": { DisplayHelp(); } break; case "/clear": { } break; case "/global": { Messenger.GlobalMsg(fullArgs, Text.White); ServerConsole.WriteLine("Global: " + fullArgs); } break; case "/masskick": { foreach (Client i in ClientManager.GetClients()) { if (i.IsPlaying() && Ranks.IsDisallowed(i, Enums.Rank.Monitor)) { Messenger.GlobalMsg(i.Player.Name + " has been kicked by the server!", Text.White); Messenger.AlertMsg(i, "You have been kicked by the server!"); } } ServerConsole.WriteLine("Everyone has been kicked."); } break; case "/dumpstats": { Statistics.PacketStatistics.DumpStatistics(); ServerConsole.WriteLine("Packet statistics dumped to database."); } break; case "/clearstats": { Statistics.PacketStatistics.ClearStatistics(); ServerConsole.WriteLine("Packet statistics cleared."); } break; case "/masswarp": { if (fullCommand.CommandArgs.Count == 4) { int map = fullCommand.CommandArgs[1].ToInt(-1); int x = fullCommand.CommandArgs[2].ToInt(-1); int y = fullCommand.CommandArgs[3].ToInt(-1); if (map <= 0) { ServerConsole.WriteLine("Invalid Map."); break; } else if (x == -1) { ServerConsole.WriteLine("Invalid X coordinate."); break; } else if (y == -1) { ServerConsole.WriteLine("Invalid Y coordinate."); break; } // TODO: Mass Warp //if (x > MapManager.Maps[map].MaxX) { // ServerConsole.WriteLine("Invalid X coordinate."); // break; //} //if (y > MapManager.Maps[map].MaxY) { // ServerConsole.WriteLine("Invalid Y coordinate."); // break; //} foreach (Client i in ClientManager.GetClients()) { if (i.IsPlaying() && Ranks.IsDisallowed(i, Enums.Rank.Monitor)) { Messenger.GlobalMsg("The server has warped everyone!", Text.White); Messenger.PlayerWarp(i, map, x, y); } } ServerConsole.WriteLine("Everyone has been warped."); } else { ServerConsole.WriteLine("Invalid arguments."); } } break; case "/kick": { if (fullCommand.CommandArgs.Count == 2) { Client client = ClientManager.FindClient(fullCommand.CommandArgs[1]); if (client == null) { ServerConsole.WriteLine("Player is offline."); } else { Messenger.GlobalMsg(client.Player.Name + " has been kicked by the server!", Text.White); Messenger.AlertMsg(client, "You have been kicked by the server!"); ServerConsole.WriteLine(client.Player.Name + " has been kicked!"); } } else { ServerConsole.WriteLine("Invalid arguments."); } } break; case "/warp": { if (fullCommand.CommandArgs.Count == 5) { Client client = ClientManager.FindClient(fullCommand.CommandArgs[1]); if (client == null) { ServerConsole.WriteLine("Player is offline."); } else { int mapNum = fullCommand.CommandArgs[2].ToInt(-1); int x = fullCommand.CommandArgs[3].ToInt(-1); int y = fullCommand.CommandArgs[4].ToInt(-1); if (mapNum <= 0) { ServerConsole.WriteLine("Invalid Map."); break; } else if (x == -1) { ServerConsole.WriteLine("Invalid X coordinate."); break; } else if (y == -1) { ServerConsole.WriteLine("Invalid Y coordinate."); break; } IMap map; if (MapManager.IsMapActive(MapManager.GenerateMapID(mapNum))) { map = MapManager.RetrieveActiveMap(MapManager.GenerateMapID(mapNum)); } else { using (Database.DatabaseConnection dbConnection = new Database.DatabaseConnection(Database.DatabaseID.Data)) { map = MapManager.LoadStandardMap(dbConnection, MapManager.GenerateMapID(mapNum)); } } if (x > map.MaxX) { ServerConsole.WriteLine("Invalid X coordinate."); break; } if (y > map.MaxY) { ServerConsole.WriteLine("Invalid Y coordinate."); break; } Messenger.PlayerMsg(client, "You have been warped by the server!", Text.White); Messenger.PlayerWarp(client, mapNum, x, y); ServerConsole.WriteLine(client.Player.Name + " has been warped."); } } else { ServerConsole.WriteLine("Invalid arguments."); } } break; case "/mapmsg": { if (fullCommand.CommandArgs.Count == 3) { string map = fullCommand.CommandArgs[1]; // Check if the map is active if (!MapManager.IsMapActive(map)) { ServerConsole.WriteLine("Invalid Map."); break; } Messenger.MapMsg(map, fullCommand.CommandArgs[2], Text.DarkGrey); ServerConsole.WriteLine("Map Msg (Map " + map.ToString() + "): " + fullCommand.CommandArgs[2]); } else { ServerConsole.WriteLine("Invalid arguments."); } } break; case "/reloadscripts": { Scripting.ScriptManager.Reload(); ServerConsole.WriteLine("Scripts reloaded."); } break; case "/players": { string players = ""; int count = 0; foreach (Client i in ClientManager.GetClients()) { if (i.IsPlaying()) { count++; players += i.Player.Name + "\r\n"; } } ServerConsole.WriteLine("Players online: \r\n" + players); ServerConsole.WriteLine("There are " + count.ToString() + " players online"); } break; case "/test": { //Email.Email.SendEmail("test"); //ServerConsole.WriteLine("Mail sent!"); //ServerConsole.WriteLine("There are currently no benchmarking tests"); //System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); //watch.Start(); //MapGeneralInfo genInfo = MapManager.RetrieveMapGeneralInfo(10); //watch.Stop(); //ServerConsole.WriteLine("Elapsed, New: " + watch.Elapsed.ToString()); //watch.Reset(); //watch.Start(); //Map map = MapManager.LoadMap(10); //watch.Stop(); //ServerConsole.WriteLine("Elapsed, Old: " + watch.Elapsed.ToString()); //ServerConsole.WriteLine("Name: " + genInfo.Name); } break; case "/finditem": { int itemsFound = 0; for (int i = 0; i < Server.Items.ItemManager.Items.MaxItems; i++) { if (ItemManager.Items[i].Name.ToLower().StartsWith(fullCommand.CommandArgs[1].ToLower())) { ServerConsole.WriteLine(ItemManager.Items[i].Name + "'s number is " + i.ToString()); itemsFound++; //return; } } if (itemsFound == 0) { ServerConsole.WriteLine("Unable to find an item that starts with '" + fullCommand.CommandArgs[1] + "'"); } } break; case "/finditemc": { int itemsFound = 0; for (int i = 0; i < Server.Items.ItemManager.Items.MaxItems; i++) { if (ItemManager.Items[i].Name.ToLower().Contains(fullCommand.CommandArgs[1].ToLower())) { ServerConsole.WriteLine(ItemManager.Items[i].Name + "'s number is " + i.ToString()); itemsFound++; //return; } } if (itemsFound == 0) { ServerConsole.WriteLine("Unable to find an item that starts with '" + fullCommand.CommandArgs[1] + "'"); } } break; case "/calcwm": { ServerConsole.WriteLine("Factorial: " + Server.Math.CalculateFactorial(fullCommand.CommandArgs[1].ToInt()).ToString("R")); } break; case "/gmmode": { Globals.GMOnly = !Globals.GMOnly; ServerConsole.WriteLine("GM Only Mode Active: " + Globals.GMOnly); } break; default: { Scripting.ScriptManager.InvokeSub("ProcessServerCommand", fullCommand, fullArgs); } break; } }