public void Invoke(CommandArgs args) { int num; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out num)) { return; } List <string> strs = _cmds.Select(x => string.Format("{0} - {1}.", x.Value.Usage, x.Value.Description)).ToList(); PaginationTools.Settings setting = new PaginationTools.Settings(); setting.HeaderFormat = "Buff Ban Sub-Commands ({0}/{1}):"; setting.FooterFormat = StringExt.SFormat("Type {0}banbuff help {{0}} for more sub-commands.", TShockAPI.Commands.Specifier); PaginationTools.SendPage(args.Player, num, strs, setting); }
public void Invoke(CommandArgs args) { int num; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out num)) { return; } IEnumerable <string> buffBans = from BuffBan in _buffManager.BuffBans select BuffBan.Name; List <string> strs = PaginationTools.BuildLinesFromTerms(buffBans, null, ", ", 80); PaginationTools.Settings setting = new PaginationTools.Settings(); setting.HeaderFormat = "Buff Bans ({0}/{1}):"; setting.FooterFormat = StringExt.SFormat("Type {0}banbuff list {{0}} for more.", TShockAPI.Commands.Specifier); setting.NothingToDisplayString = "There are currently no banned buffs."; PaginationTools.SendPage(args.Player, num, strs, setting); }
private void ClassAccess(CommandArgs args) { TSPlayer player = args.Player; #region help if (args.Parameters.Count == 0 || args.Parameters[0] == "help") { player.SendErrorMessage("Aliases: /class, /cs"); player.SendErrorMessage("/class list <category>"); player.SendErrorMessage("/class select <class name>"); player.SendErrorMessage("/class preview <class name>"); player.SendErrorMessage("/class random <category>"); player.SendErrorMessage("/class stop"); player.SendErrorMessage("If a class name is not specified, this command will attempt to use the most recently used class from /cwm select."); player.SendErrorMessage("/class stop will attempt to restore your inventory and set you to not playing or previewing any class."); return; } #endregion #region list if (args.Parameters[0].ToLower() == "list") { int page = 1; bool categoryExists = false; string category; List <string> results = new List <string>(); PaginationTools.Settings settings = new PaginationTools.Settings { HeaderFormat = "Class Wars Classes: ", FooterFormat = "type /class list {{0}}", NothingToDisplayString = "There are no classes presently defined." }; if (args.Parameters.Count > 1) { if (!int.TryParse(args.Parameters[1], out page)) { categoryExists = true; category = args.Parameters[1]; TextInfo TI = new CultureInfo("en-US", false).TextInfo; category = TI.ToTitleCase(category); //sets to title case for minor improvement to pagination appearance later. foreach (CWClass c in CUtil.classes) { if (c.category.ToLower() == category.ToLower()) { results.Add(c.name); } } settings = new PaginationTools.Settings { HeaderFormat = category + " Classes: ", FooterFormat = "type /class list " + category + " {{0}}", NothingToDisplayString = "There are no classes in the " + category + " category." }; } } if (!categoryExists) { foreach (CWClass c in CUtil.classes) { results.Add(c.name); } } results.Sort(); PaginationTools.SendPage(player, page, PaginationTools.BuildLinesFromTerms(results), settings); return; } #endregion #region select if (args.Parameters[0].ToLower() == "select" || args.Parameters[0].ToLower() == "pick" || args.Parameters[0].ToLower() == "sel") { if (args.Parameters.Count == 1 && PInfo.GetClassEdit(player.Name) == "none") { player.SendErrorMessage("Usage: /class select <class name>"); player.SendErrorMessage("Alternatively, select a class using /cwm select before using /class select."); return; } args.Parameters.RemoveAt(0); string className = PInfo.GetClassEdit(player.Name); if (args.Parameters.Count > 0) { string c = string.Join(" ", args.Parameters); int resultType = -100; string results = CUtil.ClassExists(c, ref resultType); switch (resultType) { case -1: player.SendErrorMessage(results); return; case 0: case 1: className = results; break; case 2: player.SendErrorMessage("Multiple classes found: "); player.SendErrorMessage(results); return; } } CUtil.SetClass(player, className, ref PInfo); player.SendSuccessMessage("You have selected " + className + "."); //game logic here, moron. Don't forget it. } #endregion #region preview if (args.Parameters[0].ToLower() == "select" || args.Parameters[0].ToLower() == "pick" || args.Parameters[0].ToLower() == "sel") { if (args.Parameters.Count == 1 && PInfo.GetClassEdit(player.Name) == "none") { player.SendErrorMessage("Usage: /class select <class name>"); player.SendErrorMessage("Alternatively, select a class using /cwm select before using /class select."); return; } args.Parameters.RemoveAt(0); string className = PInfo.GetClassEdit(player.Name); if (args.Parameters.Count > 0) { string c = string.Join(" ", args.Parameters); int resultType = -100; string results = CUtil.ClassExists(c, ref resultType); switch (resultType) { case -1: player.SendErrorMessage(results); return; case 0: case 1: className = results; break; case 2: player.SendErrorMessage("Multiple classes found: "); player.SendErrorMessage(results); return; } } CUtil.SetClass(player, className, ref PInfo); PInfo.SetPreviewing(player.Name, true); player.SendSuccessMessage("You are now previewing " + className + "."); } #endregion #region stop if (args.Parameters[0].ToLower() == "stop") { PInfo.RestoreInv(player); PInfo.SetPlaying(player.Name, "none"); PInfo.SetPreviewing(player.Name, false); CWGame.GTFO(player); player.SendSuccessMessage("Inventory restore attempted, you are no longer playing or previewing a class."); return; } #endregion #region random if (args.Parameters[0].ToLower() == "random") { string category = "none"; List <CWClass> classesToPick = new List <CWClass>(); if (args.Parameters.Count > 1) { args.Parameters.RemoveAt(0); category = string.Join(" ", args.Parameters); foreach (CWClass c in CUtil.classes) { if (c.category.ToLower() == category.ToLower()) { classesToPick.Add(c); } } if (classesToPick.Count == 0) { player.SendErrorMessage("No classes found in category " + category); return; } } else { classesToPick = CUtil.classes; } if (classesToPick.Count == 0) { player.SendErrorMessage("No classes are presently defined."); return; } Random rand = new Random(); TShockAPI.Commands.HandleCommand(player, "/class select " + classesToPick[rand.Next(classesToPick.Count)].name); return; } #endregion }
private void WarpplateCommands(CommandArgs args) { TSPlayer player = args.Player; if (args.Parameters.Count < 1 || args.Parameters.Count > 4) { sendInvalidSyntaxError(); return; } string baseCmd = args.Parameters[0].ToLower(); string specifier = args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier; switch (baseCmd) { //warpplate add <name> case "add": if (args.Parameters.Count < 2) { args.Player.SendErrorMessage($"Invalid syntax: {specifier}warpplate add <warpplate name>"); return; } if (Utils.GetNearbyWarpplates(args.Player.TileX, args.Player.TileY) != null) { args.Player.SendErrorMessage($"There is already a warpplate here!"); return; } Warpplate newWarpplate = new Warpplate(string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)), args.Player.TileX, args.Player.TileY); DB.AddWarpplate(newWarpplate); args.Player.SendSuccessMessage($"Added warpplate {string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))} at your current location."); break; //warpplate del <name> case "del": case "delete": if (args.Parameters.Count < 2) { args.Player.SendErrorMessage($"Invalid syntax: {specifier}warpplate del <warpplate name>"); return; } Warpplate warpplate = Utils.GetWarpplateByName(string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))); if (warpplate == null) { args.Player.SendErrorMessage($"There is no warpplate by the name of {string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))}!"); return; } DB.RemoveWarpplate(warpplate); args.Player.SendSuccessMessage($"Removed warpplate {string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))}."); break; //warpplate mod <name> <type> <value> case "mod": case "modify": if (args.Parameters.Count != 4) { args.Player.SendErrorMessage($"Invalid syntax: {specifier}warpplate mod <name> <type> <value>"); return; } //Throwing this to separate method for cleaner code processModification(); break; //warpplate info <name> case "info": if (args.Parameters.Count < 2) { args.Player.SendErrorMessage($"Invalid syntax: {specifier}warpplate del <warpplate name>"); return; } Warpplate warpplateInfo = Utils.GetWarpplateByName(string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))); if (warpplateInfo == null) { args.Player.SendErrorMessage($"There is no warpplate by the name of {string.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1))}!"); return; } args.Player.SendInfoMessage($"Warpplate Name: {warpplateInfo.Name} ({warpplateInfo.Area.X}, {warpplateInfo.Area.Y})"); args.Player.SendInfoMessage($"Destination Warpplate Name: {warpplateInfo.DestinationWarpplate}"); args.Player.SendInfoMessage($"Delay: {warpplateInfo.Delay} | Width: {warpplateInfo.Area.Width} | Height: {warpplateInfo.Area.Height}"); break; default: sendInvalidSyntaxError(); break; } //Sends paginated list of commands. void sendInvalidSyntaxError() { args.Player.SendErrorMessage("Invalid syntax!"); List <string> listOfData = new List <string>() { "/warpplate add <name>", "/warpplate del <name>", "/warpplate info <name>", "/warpplate mod <name> <type> <value> - Type '/warpplate help mod 1' for mod sub-commands." }; PaginationTools.Settings settings = new PaginationTools.Settings() { HeaderFormat = "Warpplate Sub-Commands ({0}/{1}):", FooterFormat = $"Type {specifier}warpplate help {{0}} for more sub-commands." }; if (args.Parameters.Count == 2 && args.Parameters[0].ToLower() == "help" && int.TryParse(args.Parameters[1], out int pageNumber)) { PaginationTools.SendPage(args.Player, pageNumber, listOfData, settings); return; } else if (args.Parameters.Count == 3 && args.Parameters[0].ToLower() == "help" && args.Parameters[1].ToLower() == "mod" && int.TryParse(args.Parameters[2], out int pageNumber2)) { List <string> listOfData2 = new List <string>() { "/warpplate mod <name> name <new name>", "/warpplate mod <name> size <w,h>", "/warppalte mod <name> delay <delay in seconds>", "/warppalte mod <name> destination <destination warpplate name>" }; PaginationTools.Settings settings2 = new PaginationTools.Settings() { HeaderFormat = "Warpplate Mod Sub-Commands ({0}/{1}):", FooterFormat = $"Type {specifier}warpplate help mod {{0}} for more sub-commands." }; PaginationTools.SendPage(args.Player, pageNumber2, listOfData2, settings2); return; } PaginationTools.SendPage(args.Player, 1, listOfData, settings); } //Processes warpplate mod commands void processModification() { Warpplate warpplate = Utils.GetWarpplateByName(args.Parameters[1]); if (warpplate == null) { args.Player.SendErrorMessage($"No warpplate found by the name {warpplate.Name}!"); return; } string subcmd = args.Parameters[2].ToLower(); switch (subcmd) { //warpplate mod <name> dest <new destination> case "dest": case "destination": string destinationWarpplateName = string.Join(" ", args.Parameters[3]); if (destinationWarpplateName == "-n") { warpplate.DestinationWarpplate = null; DB.UpdateWarpplate(warpplate, DB.UpdateType.Destination); args.Player.SendSuccessMessage("Removed destination warpplate."); return; } if (Utils.GetWarpplateByName(destinationWarpplateName) == null) { args.Player.SendErrorMessage($"No warpplate found by the name {destinationWarpplateName}!"); return; } warpplate.DestinationWarpplate = destinationWarpplateName; DB.UpdateWarpplate(warpplate, DB.UpdateType.Destination); args.Player.SendSuccessMessage($"Set destination warpplate to {destinationWarpplateName}."); break; //warpplate mod <name> delay <delay> case "delay": if (int.TryParse(args.Parameters[3], out int newDelay)) { warpplate.Delay = newDelay; DB.UpdateWarpplate(warpplate, DB.UpdateType.Delay); args.Player.SendSuccessMessage($"Updated delay time to {newDelay} for warpplate {warpplate.Name}!"); } else { args.Player.SendErrorMessage("Invalid delay value!"); } break; //warpplate mod <name> size w,h case "size": string size = args.Parameters[3]; if (!size.Contains(",") || size.Split(',').Length != 2) { args.Player.SendErrorMessage("Invalid syntax: {specifier}warpplate mod <name> size w,h"); return; } if (int.TryParse(size.Split(',')[0], out int width) && (int.TryParse(size.Split(',')[1], out int height))) { //TODO: Set config for max width/height if (width < 1 || height < 1) { args.Player.SendErrorMessage("Invalid size!"); return; } warpplate.Area = new Rectangle(warpplate.Area.X, warpplate.Area.Y, width, height); DB.UpdateWarpplate(warpplate, DB.UpdateType.Size); args.Player.SendSuccessMessage($"Updated size of warpplate {warpplate.Name}!"); } else { args.Player.SendErrorMessage("Invalid size values!"); return; } break; //warpplate mod <name> name <new name> case "name": case "label": string name = string.Join(" ", args.Parameters.GetRange(3, args.Parameters.Count - 3)); string oldName = warpplate.Name; warpplate.Name = name; DB.UpdateWarpplate(warpplate, DB.UpdateType.Name, oldName); args.Player.SendSuccessMessage($"Updated name of warpplate to {warpplate.Name}!"); break; } } }