Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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
        }
Esempio n. 4
0
        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;
                }
            }
        }