internal int HasMiner(List <TSPlayer> team) { int MinerCount = 0; foreach (TSPlayer p in team) { if (Classes.GetClass(Players.GetClassPlaying(p.Name)).category == "Miner") { MinerCount++; } } return(MinerCount); }
private void ClassMod(CommandArgs args) { TSPlayer player = args.Player; #region help if (args.Parameters.Count == 0 || args.Parameters[0] == "help") { player.SendErrorMessage("Aliases: /cwmod, /cwm"); player.SendErrorMessage("/cwm select [class name]"); player.SendErrorMessage("/cwm add [class name]"); player.SendErrorMessage("/cwm del"); player.SendErrorMessage("/cwm set {inv | stats}"); player.SendErrorMessage("/cwm buff {add | del | clear} [buff name/id] [duration] <itemHeld>"); player.SendErrorMessage("/cwm itemgen {add | del | clear} [refresh] [maxQuantity]"); player.SendErrorMessage("/cwm link {set | clear}"); player.SendErrorMessage("/cwm desc {get | set} [line] [description text]"); player.SendErrorMessage("/cwm category {get | set | list} [category]"); return; } #endregion /*wheeee, first command is done, on to the other three. But first, have some command syntax before i forget to write this down anywhere outside of the source code.*/ #region select if (args.Parameters[0] == "select") { if (args.Parameters.Count == 1) { player.SendErrorMessage("Usage: /cwm select [class name]"); player.SendErrorMessage("This selects a class for other class modifying commands to reference"); return; } int resultType = 0; args.Parameters.RemoveAt(0); string search = string.Join(" ", args.Parameters); string results = CUtil.ClassExists(search, ref resultType); switch (resultType) { case -1: player.SendErrorMessage(results); break; case 0: case 1: PInfo.SelectClass(player.Name, results); player.SendSuccessMessage("Class " + results + " selected."); break; case 2: player.SendErrorMessage("Multiple classes found: "); player.SendErrorMessage(results); break; } return; } #endregion #region add if (args.Parameters[0] == "add") { if (args.Parameters.Count == 0) { player.SendErrorMessage("Usage: /cwm add [class name]"); player.SendErrorMessage("This adds a new class with the given name, using your current inventory and stats"); return; } int resultType = 0; args.Parameters.RemoveAt(0); string name = string.Join(" ", args.Parameters); string results = CUtil.ClassExists(name, ref resultType); if (resultType == 0) { player.SendErrorMessage("There is already a class named " + name); return; } CUtil.AddClass(player, name); player.SendSuccessMessage("Class " + name + " successfully added."); PInfo.SelectClass(player.Name, name); player.SendSuccessMessage("Class " + name + " has been automatically selected."); return; } #endregion #region checkSelected string selectedClass = PInfo.GetClassEdit(player.Name); if (selectedClass == "none") { player.SendErrorMessage("Please select a class using \"/cwm select\"before using this command."); return; } CWClass c = CUtil.GetClass(selectedClass); #endregion #region del if (args.Parameters[0].ToLower() == "del") { if (CUtil.DelClass(c.name)) { player.SendSuccessMessage("Class " + c.name + " successfully deleted."); } else { player.SendErrorMessage("Warning: Unknown class selected: " + c.name); player.SendErrorMessage("Deselecting unknown class."); } PInfo.SelectClass(player.Name, "none"); return; } #endregion #region set if (args.Parameters[0].ToLower() == "set") { if (args.Parameters.Count == 1 || (args.Parameters[1].ToLower() != "inv" && args.Parameters[1].ToLower() != "stats" && args.Parameters[1].ToLower() != "stat")) { player.SendErrorMessage("Usage: /cwm set {inv | stats}"); player.SendErrorMessage("This sets the inventory or health/mana of a class to that of your current player."); return; } if (args.Parameters[1].ToLower() == "inv") { c.inventory = player.PlayerData.inventory; } if (args.Parameters[1].ToLower() == "stat" || args.Parameters[1].ToLower() == "stats") { c.maxHealth = player.PlayerData.maxHealth; c.maxMana = player.PlayerData.maxMana; c.extraSlot = player.PlayerData.extraSlot; } CUtil.UpdateClass(c); player.SendSuccessMessage("Successfully updated " + c.name); return; } #endregion #region buff if (args.Parameters[0].ToLower() == "buff") { if (args.Parameters.Count == 1 || (args.Parameters[1].ToLower() != "del" && args.Parameters[1].ToLower() != "add" && args.Parameters[1].ToLower() != "clear")) { player.SendErrorMessage("Usage: /cwm buff {add | del | clear} [buff name/id] [duration] <itemHeld>"); player.SendErrorMessage("This allows modifications of a class's buffs and itembuffs."); player.SendErrorMessage("<itemHeld> should be 0 or empty for permanent buffs, 1 for buffs while holding an item, and 2 for buffs while not holding an item."); player.SendErrorMessage("if <itemheld> is not 0, the currently item you are currently holding is used."); return; } if (args.Parameters[1].ToLower() == "clear") { c.buffs = new List <Buff>(); CUtil.UpdateClass(c); player.SendSuccessMessage("All buffs cleared from class " + c.name); return; } if (args.Parameters[1].ToLower() == "add") { if (args.Parameters.Count < 4) { player.SendErrorMessage("Usage: /cwm buff add [buff name/id] [duration] <itemHeld>"); player.SendErrorMessage("<itemHeld> should be 0 or empty for permanent buffs, 1 for buffs while holding an item, and 2 for buffs while not holding an item."); player.SendErrorMessage("if <itemheld> is not 0, the currently item you are currently holding is used."); return; } int buffID; if (!int.TryParse(args.Parameters[2].ToLower(), out buffID)) { List <int> t = TShock.Utils.GetBuffByName(args.Parameters[2].ToLower()); if (t.Count > 1) { player.SendErrorMessage("Multiple buff IDs found: " + string.Join(", ", t)); return; } else if (t.Count == 1) { buffID = t[0]; } else if (t.Count == 0) { player.SendErrorMessage("Buff " + args.Parameters[2] + " not found."); return; } } float duration; if (!float.TryParse(args.Parameters[3].ToLower(), out duration)) { player.SendErrorMessage("Please only use numerical durations."); return; } if (args.Parameters.Count == 5 && args.Parameters[4].ToLower() != "0" && args.Parameters[4].ToLower() != "no") { Item tempItem = player.TPlayer.HeldItem; switch (args.Parameters[4].ToLower()) { case "1": c.buffs.Add(new Buff(buffID, (int)duration * 10, tempItem.netID, 1)); CUtil.UpdateClass(c); player.SendSuccessMessage("Buff " + TShock.Utils.GetBuffName(buffID) + " has been added to " + c.name + " with a duration of " + duration + " seconds, while holding " + tempItem.Name); return; case "2": c.buffs.Add(new Buff(buffID, (int)duration * 10, tempItem.netID, 0)); CUtil.UpdateClass(c); player.SendSuccessMessage("Buff " + TShock.Utils.GetBuffName(buffID) + " has been added to " + c.name + " with a duration of " + duration + " seconds, while not holding " + tempItem.Name); return; } } c.buffs.Add(new Buff(buffID, (int)duration * 10)); CUtil.UpdateClass(c); player.SendSuccessMessage("Buff " + TShock.Utils.GetBuffName(buffID) + " has been added to " + c.name + " with a duration of " + duration + " seconds."); return; } if (args.Parameters[1].ToLower() == "del") { int buffID; if (!int.TryParse(args.Parameters[2].ToLower(), out buffID)) { List <int> t = TShock.Utils.GetBuffByName(args.Parameters[2].ToLower()); if (t.Count > 1) { player.SendErrorMessage("Multiple buff IDs found: " + string.Join(", ", t)); return; } else if (t.Count == 1) { buffID = t[0]; } else if (t.Count == 0) { player.SendErrorMessage("Buff " + args.Parameters[2] + " not found."); return; } } c.buffs.RemoveAll(b => b.id == buffID); CUtil.UpdateClass(c); player.SendSuccessMessage("All instances of " + TShock.Utils.GetBuffName(buffID) + " have been removed from " + c.name + "."); return; } return; } #endregion #region itemgen if (args.Parameters[0].ToLower() == "itemGen") { if (args.Parameters.Count == 1 || (args.Parameters[1].ToLower() != "del" && args.Parameters[1].ToLower() != "add" && args.Parameters[1].ToLower() != "clear")) { player.SendErrorMessage("Usage: /cwm itemgen {add | del | clear} [refresh] [maxQuantity]"); player.SendErrorMessage("This allows modification of a class's regenerating items."); player.SendErrorMessage("'/cwm itemgen add' utilizes the prefix, quantity, and item id of the player's currently selected item."); player.SendErrorMessage("The stack size of the currently held item determines the number of items given at one time."); return; } if (args.Parameters[1].ToLower() == "clear") { c.items = new List <ItemRestock>(); CUtil.UpdateClass(c); player.SendSuccessMessage("Class " + c.name + " has been cleared of itemgens."); return; } if (args.Parameters[1].ToLower() == "add") { if (args.Parameters.Count < 4) { player.SendErrorMessage("Usage: /cwm itemgen add [refresh] [maxQuantity]"); return; } float refresh; if (!float.TryParse(args.Parameters[2], out refresh)) { player.SendErrorMessage("Please use numerals for the refresh time."); return; } int maxCount; if (!int.TryParse(args.Parameters[3], out maxCount)) { player.SendErrorMessage("Please use numerals for the maximum item count."); return; } Item tempItem = player.TPlayer.HeldItem; c.items.Add(new ItemRestock((int)refresh * 10, tempItem.netID, tempItem.stack, maxCount, tempItem.prefix)); CUtil.UpdateClass(c); if (tempItem.prefix == 0) { player.SendSuccessMessage(c.name + " will now receive " + tempItem.stack + " " + tempItem.Name + " every " + (float)refresh / 10 + " seconds."); } else { player.SendSuccessMessage(c.name + " will now receive " + tempItem.stack + " " + TShock.Utils.GetPrefixById(tempItem.prefix) + " " + tempItem.Name + " every " + (float)refresh / 10 + " seconds."); } return; } if (args.Parameters[1].ToLower() == "del") { Item tempItem = player.TPlayer.HeldItem; player.SendSuccessMessage(c.items.RemoveAll(i => i.item == tempItem.netID) + " itemgen(s) removed from " + c.name + "."); CUtil.UpdateClass(c); return; } return; } #endregion #region link if (args.Parameters[0].ToLower() == "link") { if (args.Parameters.Count == 1 || (args.Parameters[1].ToLower() != "set" && args.Parameters[1].ToLower() != "clear")) { player.SendErrorMessage("Usage: /cwm link {set | clear}"); player.SendErrorMessage("This command allows you set and remove locations that will cause a player to automatically preview a class."); return; } if (args.Parameters[1].ToLower() == "clear") { c.locations = new List <LocationLink>(); CUtil.UpdateClass(c); player.SendSuccessMessage("All location links removed from " + c.name); return; } if (args.Parameters[1].ToLower() == "set") { c.locations.Add(new LocationLink(player.TileX, player.TileY)); player.SendSuccessMessage("New location link set at your current location for " + c.name); CUtil.UpdateClass(c); return; } } #endregion #region description if (args.Parameters[0].ToLower() == "desc" || args.Parameters[0].ToLower() == "description") { if (args.Parameters.Count == 1 || (args.Parameters[1].ToLower() != "get" && args.Parameters[1].ToLower() != "set")) { player.SendErrorMessage("Usage: /cwm desc {get | set} [line] [description text]"); player.SendErrorMessage("This command allows you to check and set the description of a class, one line at a time."); return; } if (args.Parameters[1].ToLower() == "get") { if (c.description.Count == 0) { player.SendErrorMessage(c.name + " does not have a description."); return; } foreach (string s in c.description) { player.SendSuccessMessage(s); } return; } if (args.Parameters[1].ToLower() == "set") { if (args.Parameters.Count < 4) { player.SendErrorMessage("Usage: /cwm desc set [line] [description text]"); return; } int line; if (!int.TryParse(args.Parameters[2], out line)) { player.SendErrorMessage("Unable to parse line number."); return; } args.Parameters.RemoveAt(0); args.Parameters.RemoveAt(0); args.Parameters.RemoveAt(0); c.description[line - 1] = string.Join(" ", args.Parameters); player.SendSuccessMessage("Description line " + line + " of " + c.name + " set."); player.SendSuccessMessage("Current description for " + c.name + " is now:"); foreach (string s in c.description) { player.SendSuccessMessage(s); } return; } } #endregion #region category if (args.Parameters[0] == "cat" || args.Parameters[0] == "category") { if (args.Parameters.Count == 1 || (args.Parameters[1].ToLower() != "get" && args.Parameters[1].ToLower() != "set" && args.Parameters[1].ToLower() != "list")) { player.SendErrorMessage("Usage: /cwm category {get | set | list} [category]"); player.SendErrorMessage("This command allows you to retrieve or specify the category of a class."); player.SendErrorMessage("Categories should be a single word, and cannot consist entirely of numbers."); return; } if (args.Parameters[1].ToLower() == "get") { if (c.category == "none") { player.SendErrorMessage(c.name + " does not have a category yet."); } else { player.SendSuccessMessage(c.name + " is in the \"" + c.category + "\" category."); } return; } if (args.Parameters[1].ToLower() == "set") { if (args.Parameters.Count == 2) { player.SendErrorMessage("Usage: /cwm category set [category]"); player.SendErrorMessage("This specifies the category of the currently selected class."); return; } float YouMotherFucker; if (float.TryParse(args.Parameters[2], out YouMotherFucker)) { player.SendErrorMessage("Didn't you read the help text? What kind of category is " + args.Parameters[2] + " anyways?"); TShockAPI.Commands.HandleCommand(TSPlayer.Server, "/slap " + player.Name + " 5"); return; } TextInfo TI = new CultureInfo("en-US", false).TextInfo; c.category = TI.ToTitleCase(args.Parameters[2]); CUtil.UpdateClass(c); player.SendSuccessMessage(c.name + " is now categorized under \"" + c.category + "\""); return; } if (args.Parameters[1].ToLower() == "list") { List <string> categories = new List <string>(); foreach (CWClass x in CUtil.classes) { categories.Add(x.category); } categories = categories.Distinct().ToList(); player.SendSuccessMessage("Categories: "); player.SendSuccessMessage(string.Join(", ", categories)); return; } } #endregion }