示例#1
0
        private void PBRegion(CommandArgs args)
        {
            //regionbuff <add/del> <region> <buff>

            if (args.Parameters.Count < 3 || args.Parameters.Count > 4)
            {
                args.Player.SendErrorMessage("Invalid Syntax: {0}regionbuff <add/del> <region name> <buff name/ID> [duration]", (args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier));
                return;
            }

            if (args.Parameters[0].Equals("add", StringComparison.CurrentCultureIgnoreCase))
            {
                string regionname = args.Parameters[1];
                Region region     = TShock.Regions.GetRegionByName(regionname);
                string buffinput  = args.Parameters[2];
                if (args.Parameters.Count != 4)
                {
                    args.Player.SendErrorMessage("Invalid Syntax: {0}regionbuff <add/del> <region name> <buff name/ID> [duration]", (args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier));
                    return;
                }
                string durationinput = args.Parameters[3];
                int    bufftype      = -1;

                if (region == null)
                {
                    args.Player.SendErrorMessage("Invalid region: {0}", regionname);
                    return;
                }

                if (!int.TryParse(buffinput, out bufftype))
                {
                    List <int> bufflist = TShock.Utils.GetBuffByName(buffinput);

                    if (bufflist.Count == 0)
                    {
                        args.Player.SendErrorMessage("No buffs found by the name {0}.", buffinput);
                        return;
                    }

                    if (bufflist.Count > 1)
                    {
                        TShock.Utils.SendMultipleMatchError(args.Player, bufflist.Select(p => TShock.Utils.GetBuffName(p)));
                        return;
                    }

                    bufftype = bufflist[0];
                }

                if (bufftype < 0 || bufftype > Main.maxBuffTypes)
                {
                    args.Player.SendErrorMessage("Invalid buff ID: {0}", bufftype.ToString());
                    return;
                }

                int duration = -1;

                if (!int.TryParse(durationinput, out duration) || (duration < 1 || duration > 540))
                {
                    args.Player.SendErrorMessage("Invalid duration!");
                    return;
                }

                bool found = false;

                for (int i = 0; i < config.regionbuffs.Length; i++)
                {
                    if (config.regionbuffs[i].regionName == region.Name)
                    {
                        found = true;
                        if (config.regionbuffs[i].buffs.Keys.Contains(bufftype))
                        {
                            args.Player.SendErrorMessage("Region {0} already contains buff {1}!", region.Name, TShock.Utils.GetBuffName(bufftype));
                            return;
                        }
                        else
                        {
                            config.regionbuffs[i].buffs.Add(bufftype, duration);
                            args.Player.SendSuccessMessage("Added buff {0} to region {1} with a duration of {2} seconds!", TShock.Utils.GetBuffName(bufftype), region.Name, duration.ToString());
                            config.Write(configPath);
                            return;
                        }
                    }
                }

                if (!found)
                {
                    List <RegionBuff> temp = config.regionbuffs.ToList();
                    temp.Add(new RegionBuff()
                    {
                        buffs = new Dictionary <int, int>()
                        {
                            { bufftype, duration }
                        }, regionName = region.Name
                    });
                    config.regionbuffs = temp.ToArray();
                    args.Player.SendSuccessMessage("Added buff {0} to region {1} with a duration of {2} seconds!", TShock.Utils.GetBuffName(bufftype), region.Name, duration.ToString());
                    config.Write(configPath);
                    return;
                }
            }

            if (args.Parameters[0].Equals("del", StringComparison.CurrentCultureIgnoreCase) || args.Parameters[0].Equals("delete", StringComparison.CurrentCultureIgnoreCase))
            {
                string regionname = args.Parameters[1];
                Region region     = TShock.Regions.GetRegionByName(regionname);
                string buffinput  = args.Parameters[2];
                int    bufftype   = -1;

                if (region == null)
                {
                    args.Player.SendErrorMessage("Invalid region: {0}", regionname);
                    return;
                }

                if (!int.TryParse(buffinput, out bufftype))
                {
                    List <int> bufflist = TShock.Utils.GetBuffByName(buffinput);

                    if (bufflist.Count == 0)
                    {
                        args.Player.SendErrorMessage("No buffs found by the name {0}.", buffinput);
                        return;
                    }

                    if (bufflist.Count > 1)
                    {
                        TShock.Utils.SendMultipleMatchError(args.Player, bufflist.Select(p => TShock.Utils.GetBuffName(p)));
                        return;
                    }

                    bufftype = bufflist[0];
                }

                if (bufftype < 0 || bufftype > Main.maxBuffTypes)
                {
                    args.Player.SendErrorMessage("Invalid buff ID: {0}", bufftype.ToString());
                    return;
                }

                bool found = false;

                for (int i = 0; i < config.regionbuffs.Length; i++)
                {
                    if (config.regionbuffs[i].regionName == region.Name)
                    {
                        if (config.regionbuffs[i].buffs.ContainsKey(bufftype))
                        {
                            config.regionbuffs[i].buffs.Remove(bufftype);
                            args.Player.SendSuccessMessage("Removed buff {0} from region {1}!", TShock.Utils.GetBuffName(bufftype), region.Name);
                            config.Write(configPath);
                            found = true;
                            return;
                        }
                    }
                }

                if (!found)
                {
                    args.Player.SendSuccessMessage("Buff {0} is not a region buff in region {1}!", TShock.Utils.GetBuffName(bufftype), region.Name);
                    return;
                }
            }

            args.Player.SendErrorMessage("Invalid syntax: {0}regionbuff <add/del> <region name> <buff name/ID>", (args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier));
        }