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)); }