diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index f58c249d..8ae511bb 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -28,79 +28,63 @@ using Terraria; namespace TShockAPI { - public class Commands + public delegate void CommandDelegate(CommandArgs args); + public class CommandArgs : EventArgs { - public delegate void CommandDelegate(CommandArgs args); + public string Message { get; private set; } + public TSPlayer Player { get; private set; } + /// + /// Parameters passed to the arguement. Does not include the command name. + /// IE '/kick "jerk face"' will only have 1 argument + /// + public List Parameters { get; private set; } - public static List commands = new List(); - - public struct CommandArgs + public int PlayerID { - public string Message; - public int PlayerX; - public int PlayerY; - public int PlayerID; - /// - /// Parameters passed to the arguement. Does not include the command name. - /// IE '/kick "jerk face"' will only have 1 argument - /// - public List Parameters; - - public CommandArgs(string message, int x, int y, int id, List args) - { - Message = message; - PlayerX = x; - PlayerY = y; - PlayerID = id; - Parameters = args; - } + get { return Player.Index; } } - public class Command + public CommandArgs(string message, TSPlayer ply, List args) { - private string name; - private string permission; - private CommandDelegate command; - - public Command(string cmdName, string permissionNeeded, CommandDelegate cmd) - { - name = cmdName; - permission = permissionNeeded; - command = cmd; - } - - public bool Run(string msg, TSPlayer ply, List parms) - { - if (!ply.Group.HasPermission(permission)) - { - return false; - } - - CommandArgs args = new CommandArgs(); - args.Message = msg; - args.PlayerX = (int)ply.Player.position.X; - args.PlayerY = (int)ply.Player.position.Y; - args.PlayerID = ply.Index; - args.Parameters = parms; - - command(args); - return true; - } - - public string Name() - { - return name; - } - - public bool CanRun(TSPlayer ply) - { - if (!ply.Group.HasPermission(permission)) - { - return false; - } - return true; - } + Message = message; + Player = ply; + Parameters = args; } + } + public class Command + { + public string Name { get; protected set; } + private string permission; + private CommandDelegate command; + + public Command(string cmdname, string permissionneeded, CommandDelegate cmd) + { + Name = cmdname; + permission = permissionneeded; + command = cmd; + } + + public bool Run(string msg, TSPlayer ply, List parms) + { + if (!ply.Group.HasPermission(permission)) + return false; + + command(new CommandArgs(msg, ply, parms)); + return true; + } + + public bool CanRun(TSPlayer ply) + { + if (!ply.Group.HasPermission(permission)) + { + return false; + } + return true; + } + } + public static class Commands + { + public static List ChatCommands = new List(); /// /// Parses a string of parameters into a list. Handles quotes. @@ -186,53 +170,53 @@ namespace TShockAPI public static void InitCommands() { - commands.Add(new Command("kick", "kick", Kick)); - commands.Add(new Command("ban", "ban", Ban)); - commands.Add(new Command("banip", "ban", BanIP)); - commands.Add(new Command("unban", "unban", UnBan)); - commands.Add(new Command("unbanip", "unbanip", UnBanIP)); - commands.Add(new Command("off", "maintenance", Off)); - commands.Add(new Command("off-nosave", "maintenance", OffNoSave)); - commands.Add(new Command("checkupdates", "maintenance", CheckUpdates)); - commands.Add(new Command("dropmeteor", "causeevents", DropMeteor)); - commands.Add(new Command("star", "causeevents", Star)); - commands.Add(new Command("bloodmoon", "causeevents", Bloodmoon)); - commands.Add(new Command("invade", "causeevents", Invade)); - commands.Add(new Command("eater", "spawnboss", Eater)); - commands.Add(new Command("eye", "spawnboss", Eye)); - commands.Add(new Command("skeletron", "spawnboss", Skeletron)); - commands.Add(new Command("hardcore", "spawnboss", Hardcore)); - commands.Add(new Command("spawnmob", "spawnmob", SpawnMob)); - commands.Add(new Command("home", "tp", Home)); - commands.Add(new Command("spawn", "tp", Spawn)); - commands.Add(new Command("tp", "tp", TP)); - commands.Add(new Command("tphere", "tp", TPHere)); - commands.Add(new Command("reload", "cfg", Reload)); - commands.Add(new Command("debug-config", "cfg", DebugConfiguration)); - commands.Add(new Command("password", "cfg", Password)); - commands.Add(new Command("save", "cfg", Save)); - commands.Add(new Command("maxspawns", "cfg", MaxSpawns)); - commands.Add(new Command("spawnrate", "cfg", SpawnRate)); - commands.Add(new Command("time", "cfg", Time)); - commands.Add(new Command("slap", "pvpfun", Slap)); - commands.Add(new Command("protectspawn", "editspawn", ProtectSpawn)); - commands.Add(new Command("help", "", Help)); - commands.Add(new Command("playing", "", Playing)); - commands.Add(new Command("online", "", Playing)); - commands.Add(new Command("who", "", Playing)); - commands.Add(new Command("auth", "", AuthToken)); - commands.Add(new Command("me", "", ThirdPerson)); - commands.Add(new Command("p", "", PartyChat)); - commands.Add(new Command("rules", "", Rules)); - commands.Add(new Command("antibuild", "editspawn", ToggleAntiBuild)); + ChatCommands.Add(new Command("kick", "kick", Kick)); + ChatCommands.Add(new Command("ban", "ban", Ban)); + ChatCommands.Add(new Command("banip", "ban", BanIP)); + ChatCommands.Add(new Command("unban", "unban", UnBan)); + ChatCommands.Add(new Command("unbanip", "unbanip", UnBanIP)); + ChatCommands.Add(new Command("off", "maintenance", Off)); + ChatCommands.Add(new Command("off-nosave", "maintenance", OffNoSave)); + ChatCommands.Add(new Command("checkupdates", "maintenance", CheckUpdates)); + ChatCommands.Add(new Command("dropmeteor", "causeevents", DropMeteor)); + ChatCommands.Add(new Command("star", "causeevents", Star)); + ChatCommands.Add(new Command("bloodmoon", "causeevents", Bloodmoon)); + ChatCommands.Add(new Command("invade", "causeevents", Invade)); + ChatCommands.Add(new Command("eater", "spawnboss", Eater)); + ChatCommands.Add(new Command("eye", "spawnboss", Eye)); + ChatCommands.Add(new Command("skeletron", "spawnboss", Skeletron)); + ChatCommands.Add(new Command("hardcore", "spawnboss", Hardcore)); + ChatCommands.Add(new Command("spawnmob", "spawnmob", SpawnMob)); + ChatCommands.Add(new Command("home", "tp", Home)); + ChatCommands.Add(new Command("spawn", "tp", Spawn)); + ChatCommands.Add(new Command("tp", "tp", TP)); + ChatCommands.Add(new Command("tphere", "tp", TPHere)); + ChatCommands.Add(new Command("reload", "cfg", Reload)); + ChatCommands.Add(new Command("debug-config", "cfg", DebugConfiguration)); + ChatCommands.Add(new Command("password", "cfg", Password)); + ChatCommands.Add(new Command("save", "cfg", Save)); + ChatCommands.Add(new Command("maxspawns", "cfg", MaxSpawns)); + ChatCommands.Add(new Command("spawnrate", "cfg", SpawnRate)); + ChatCommands.Add(new Command("time", "cfg", Time)); + ChatCommands.Add(new Command("slap", "pvpfun", Slap)); + ChatCommands.Add(new Command("protectspawn", "editspawn", ProtectSpawn)); + ChatCommands.Add(new Command("help", "", Help)); + ChatCommands.Add(new Command("playing", "", Playing)); + ChatCommands.Add(new Command("online", "", Playing)); + ChatCommands.Add(new Command("who", "", Playing)); + ChatCommands.Add(new Command("auth", "", AuthToken)); + ChatCommands.Add(new Command("me", "", ThirdPerson)); + ChatCommands.Add(new Command("p", "", PartyChat)); + ChatCommands.Add(new Command("rules", "", Rules)); + ChatCommands.Add(new Command("antibuild", "editspawn", ToggleAntiBuild)); if (ConfigurationManager.DistributationAgent != "terraria-online") { - commands.Add(new Command("kill", "kill", Kill)); - commands.Add(new Command("butcher", "cheat", Butcher)); - commands.Add(new Command("i", "cheat", Item)); - commands.Add(new Command("item", "cheat", Item)); - commands.Add(new Command("give", "cheat", Give)); - commands.Add(new Command("heal", "cheat", Heal)); + ChatCommands.Add(new Command("kill", "kill", Kill)); + ChatCommands.Add(new Command("butcher", "cheat", Butcher)); + ChatCommands.Add(new Command("i", "cheat", Item)); + ChatCommands.Add(new Command("item", "cheat", Item)); + ChatCommands.Add(new Command("give", "cheat", Give)); + ChatCommands.Add(new Command("heal", "cheat", Heal)); } } @@ -520,39 +504,31 @@ namespace TShockAPI public static void Eater(CommandArgs args) { - int x = args.PlayerX; - int y = args.PlayerY; int ply = args.PlayerID; - Tools.NewNPC((int)ConfigurationManager.NPCList.WORLD_EATER, x, y, ply); + Tools.NewNPC((int)ConfigurationManager.NPCList.WORLD_EATER, args.Player.X, args.Player.Y, ply); Tools.Broadcast(string.Format("{0} has spawned an eater of worlds!", Tools.FindPlayer(ply))); } public static void Eye(CommandArgs args) { - int x = args.PlayerX; - int y = args.PlayerY; int ply = args.PlayerID; - Tools.NewNPC((int)ConfigurationManager.NPCList.EYE, x, y, ply); + Tools.NewNPC((int)ConfigurationManager.NPCList.EYE, args.Player.X, args.Player.Y, ply); Tools.Broadcast(string.Format("{0} has spawned an eye!", Tools.FindPlayer(ply))); } public static void Skeletron(CommandArgs args) { - int x = args.PlayerX; - int y = args.PlayerY; int ply = args.PlayerID; - Tools.NewNPC((int)ConfigurationManager.NPCList.SKELETRON, x, y, ply); + Tools.NewNPC((int)ConfigurationManager.NPCList.SKELETRON, args.Player.X, args.Player.Y, ply); Tools.Broadcast(string.Format("{0} has spawned skeletron!", Tools.FindPlayer(ply))); } public static void Hardcore(CommandArgs args) { - int x = args.PlayerX; - int y = args.PlayerY; int ply = args.PlayerID; for (int i = 0; i <= 2; i++) { - Tools.NewNPC(i, x, y, ply); + Tools.NewNPC(i, args.Player.X, args.Player.Y, ply); } Tools.Broadcast(string.Format("{0} has spawned all 3 bosses!", Tools.FindPlayer(ply))); } @@ -689,8 +665,6 @@ namespace TShockAPI return; } - int x = args.PlayerX; - int y = args.PlayerY; int type = -1; int amount = 1; @@ -706,7 +680,7 @@ namespace TShockAPI { int npcid = -1; for (int i = 0; i < amount; i++) - npcid = NPC.NewNPC(x, y, type, 0); + npcid = NPC.NewNPC((int)args.Player.X, (int)args.Player.Y, type, 0); Tools.Broadcast(string.Format("{0} was spawned {1} time(s).", Main.npc[npcid].name, amount)); } else @@ -746,8 +720,8 @@ namespace TShockAPI //Main.player[ply].inventory[i].SetDefaults(type); //Main.player[ply].inventory[i].stack = Main.player[ply].inventory[i].maxStack; int id = Terraria.Item.NewItem(0, 0, 0, 0, type, 1, true); - Main.item[id].position.X = args.PlayerX; - Main.item[id].position.Y = args.PlayerY; + Main.item[id].position.X = args.Player.X; + Main.item[id].position.Y = args.Player.Y; Main.item[id].stack = Main.item[id].maxStack; //TShock.SendDataAll(21, -1, "", id); NetMessage.SendData(21, -1, -1, "", id, 0f, 0f, 0f); @@ -858,12 +832,12 @@ namespace TShockAPI } else { - DropHearts(args.PlayerX, args.PlayerY, 20); + DropHearts(args.Player.X, args.Player.Y, 20); Tools.SendMessage(adminplr, "You just got healed!"); } } - private static void DropHearts(int x, int y, int count) + private static void DropHearts(float x, float y, int count) { for (int i = 0; i < count; i++) { @@ -933,11 +907,11 @@ namespace TShockAPI if (args.Parameters.Count > 0) int.TryParse(args.Parameters[0], out page); List cmdlist = new List(); - for (int j = 0; j < commands.Count; j++) + for (int j = 0; j < ChatCommands.Count; j++) { - if (commands[j].CanRun(TShock.Players[ply])) + if (ChatCommands[j].CanRun(TShock.Players[ply])) { - cmdlist.Add(commands[j]); + cmdlist.Add(ChatCommands[j]); } } var sb = new StringBuilder(); @@ -947,7 +921,7 @@ namespace TShockAPI { if (sb.Length != 0) sb.Append(", "); - sb.Append("/").Append(cmdlist[j].Name()); + sb.Append("/").Append(cmdlist[j].Name); if (j == cmdlist.Count - 1) { Tools.SendMessage(ply, sb.ToString(), Color.Yellow); diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index f6d808ba..113f3224 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -29,12 +29,33 @@ namespace TShockAPI public Group Group { get; set; } public bool ReceivedInfo { get; set; } - public int Index {get;private set;} - public Player Player + public int Index { get; private set; } + + /// + /// Terraria Player + /// + public Player TPlayer { get { return Main.player[Index]; } } + public float X + { + get { return TPlayer.position.X; } + } + public float Y + { + get { return TPlayer.position.Y; } + } + public int TileX + { + get { return (int)(TPlayer.position.X / 16); } + } + public int TileY + { + get { return (int)(TPlayer.position.Y / 16); } + } + public TSPlayer(int ply) { TilesDestroyed = new Dictionary(); diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 164b0d83..d212588a 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -621,12 +621,12 @@ namespace TShockAPI string scmd = args[0]; args.RemoveAt(0); - Commands.Command cmd = null; - for (int i = 0; i < Commands.commands.Count; i++) + Command cmd = null; + for (int i = 0; i < Commands.ChatCommands.Count; i++) { - if (Commands.commands[i].Name().Equals(scmd)) + if (Commands.ChatCommands[i].Name.Equals(scmd)) { - cmd = Commands.commands[i]; + cmd = Commands.ChatCommands[i]; } } @@ -638,7 +638,7 @@ namespace TShockAPI { if (!cmd.CanRun(Players[ply])) { - Tools.SendLogs(string.Format("{0} tried to execute {1}", Tools.FindPlayer(ply), cmd.Name()), Color.Red); + Tools.SendLogs(string.Format("{0} tried to execute {1}", Tools.FindPlayer(ply), cmd.Name), Color.Red); Tools.SendMessage(ply, "You do not have access to that command.", Color.Red); } else diff --git a/TShockAPI/Tools.cs b/TShockAPI/Tools.cs index f062fe76..f1825927 100755 --- a/TShockAPI/Tools.cs +++ b/TShockAPI/Tools.cs @@ -215,14 +215,14 @@ namespace TShockAPI /// X coord of the desired npc /// Y coord of the desired npc /// int player that the npc targets - public static void NewNPC(int type, int x, int y, int target) + public static void NewNPC(int type, float x, float y, int target) { switch (type) { case 0: //World Eater WorldGen.shadowOrbSmashed = true; WorldGen.shadowOrbCount = 3; - int w = NPC.NewNPC(x, y, 13, 1); + int w = NPC.NewNPC((int)x, (int)y, 13, 1); Main.npc[w].target = target; break; case 1: //Eye @@ -231,7 +231,7 @@ namespace TShockAPI WorldGen.spawnEye = true; break; case 2: //Skeletron - int enpeecee = NPC.NewNPC(x, y, 0x23, 0); + int enpeecee = NPC.NewNPC((int)x, (int)y, 0x23, 0); Main.npc[enpeecee].netUpdate = true; break; } diff --git a/TShockAPI/UpdateManager.cs b/TShockAPI/UpdateManager.cs index 26de9a63..043f0d29 100644 --- a/TShockAPI/UpdateManager.cs +++ b/TShockAPI/UpdateManager.cs @@ -67,7 +67,7 @@ namespace TShockAPI public static void EnableUpdateCommand() { - Commands.commands.Add(new Commands.Command("updatenow", "maintenance", Commands.UpdateNow)); + Commands.ChatCommands.Add(new Command("updatenow", "maintenance", Commands.UpdateNow)); updateCmd = true; }