public PlayerStorage() { regionStorage = new RegionStorage(region: null, flags: new List<string> { }, healinterval: 2, healamount: 20, manainterval: 2, damageinterval: 2, damageamount: 20, tempgroup: null, bannedItems: new List<string>(), bannedNPCs: new List<int>(), bannedTiles: new List<int>(), bannedProjectiles: new List<int>(), command: null, fromgroup: null, togroup: null, groupOnly: new List<string>(), message: null, effectOwner: false, effectAllowed: true); regionWarned = 0; lastPos = new Vector2(); gotWarnMessage = false; inEventRegion = false; hostile = false; killed = false; groupset = false; executedcommand = false; promoted = false; gotmessage = false; muted = false; }
private static void SetFlag(CommandArgs args) { if (args.Parameters.Count < 3) { args.Player.SendErrorMessage("Syntax: /re setflag <region> <FLAG>"); return; } Region region = TShock.Regions.GetRegionByName(args.Parameters[1]); if (region == null) { args.Player.SendErrorMessage("Could not find region {0}!", args.Parameters[1]); return; } if (!RegionEvent.flagTypes.ContainsKey(args.Parameters[2])) { args.Player.SendErrorMessage("Error: No such flag type exists!"); args.Player.SendErrorMessage("Type /re list flags, for a list of available flags!"); return; } RegionStorage tempStorage = new RegionStorage(region, new List<string>() { args.Parameters[2] }, healinterval: 20, healamount: 2, manainterval: 2, damageinterval: 2, damageamount: 20, tempgroup: Group.DefaultGroup, bannedItems: new List<string>(), bannedNPCs: new List<int>(), bannedTiles: new List<int>(), bannedProjectiles: new List<int>(), command: "", fromgroup: "", togroup: "", groupOnly: new List<string>(), message: "", effectOwner:false, effectAllowed:true); if (RegionEvent.regionStorage.ContainsKey(region)) { tempStorage = RegionEvent.regionStorage[region]; if (RegionEvent.regionStorage[region].flags.Contains(args.Parameters[2])) { args.Player.SendErrorMessage("Region \"{0}\" already contains {1} flag!", region.Name, args.Parameters[1]); return; } } switch (args.Parameters[2]) { case "HEAL": { if (args.Parameters.Count != 5) { args.Player.SendErrorMessage("Syntax: /re setflag <region> HEAL <interval> <amount>"); return; } int healinterval = -1; int healamount = -1; if (!int.TryParse(args.Parameters[3], out healinterval)) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[3]); return; } if (!int.TryParse(args.Parameters[4], out healamount)) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[4]); return; } tempStorage.healinterval = healinterval; tempStorage.healamount = healamount; break; } case "MANA": { // /re setflag MANA <interval> if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> MANA <interval>"); return; } int interval = -1; if (!int.TryParse(args.Parameters[3], out interval)) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[3]); return; } tempStorage.manainterval = interval; break; } case "HURT": { if (args.Parameters.Count != 5) { args.Player.SendErrorMessage("Syntax: /re setflag <region> HURT <interval> <amount>"); return; } int interval = -1; int amount = -1; if (!int.TryParse(args.Parameters[3], out interval)) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[3]); return; } if (!int.TryParse(args.Parameters[4], out amount)) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[4]); return; } tempStorage.damageinterval = interval; tempStorage.damageamount = amount; break; } case "TEMPGROUP": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> TEMPGROUP <group>"); return; } Group tempgroup = TShock.Groups.GetGroupByName(args.Parameters[3]); if (tempgroup == null) { args.Player.SendErrorMessage("Could not find group!"); return; } tempStorage.tempgroup = tempgroup; break; } case "COMMAND": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> COMMAND <command>"); return; } //check if they have permission for command if (args.Parameters[3] != null && args.Parameters[3] != "") tempStorage.command = args.Parameters[3]; break; } case "PROMOTE": { if (args.Parameters.Count != 5) { args.Player.SendErrorMessage("Syntax: /re setflag <region> PROMOTE <fromgroup> <togroup>"); return; } Group fromgroup = TShock.Groups.GetGroupByName(args.Parameters[3]); Group togroup = TShock.Groups.GetGroupByName(args.Parameters[4]); if (fromgroup == null && args.Parameters[3] != "*") { args.Player.SendErrorMessage("Could not find fromgroup {0}!", args.Parameters[3]); return; } if (togroup == null) { args.Player.SendErrorMessage("Could not find togroup {0}!", args.Parameters[4]); return; } tempStorage.fromgroup = args.Parameters[3]; tempStorage.togroup = togroup.Name; break; } case "BANITEM": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> BANITEM <ID/Name>"); return; } List<Item> item = TShock.Utils.GetItemByIdOrName(args.Parameters[3]); if (item.Count == 0) { args.Player.SendErrorMessage("Could not find item \"{0}\"!", args.Parameters[3]); return; } else if (item.Count > 1) { TShock.Utils.SendMultipleMatchError(args.Player, item); return; } tempStorage.bannedItems.Add(item[0].name); break; } case "BANTILE": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> BANTILE <ID>"); return; } int ID = -1; if (!int.TryParse(args.Parameters[3], out ID) || ID < 0 || ID >= Main.maxTileSets) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[3]); return; } tempStorage.bannedTiles.Add(ID); break; } case "BANPROJ": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> BANPROJ <ID>"); return; } int ID = -1; if (!int.TryParse(args.Parameters[3], out ID) || ID < 0 || ID >= Main.maxProjectileTypes) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[3]); return; } tempStorage.bannedProjectiles.Add(ID); break; } case "BANMOB": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> BANMOB <ID>"); return; } int ID = -1; if (!int.TryParse(args.Parameters[3], out ID) || ID < 0 || ID >= Main.maxNPCTypes) { args.Player.SendErrorMessage("{0} is not a valid number!", args.Parameters[3]); return; } tempStorage.bannedNPCs.Add(ID); break; } case "GROUPONLY": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> GROUPONLY <group>"); return; } Group grouponly = TShock.Groups.GetGroupByName(args.Parameters[3]); if (grouponly == null) { args.Player.SendErrorMessage("Could not find group!"); return; } tempStorage.groupOnly.Add(grouponly.Name); break; } case "MESSAGE": { if (args.Parameters.Count != 4) { args.Player.SendErrorMessage("Syntax: /re setflag <region> MESSAGE <message>"); return; } if (args.Parameters[3] != null && args.Parameters[3] != "") tempStorage.message = args.Parameters[3]; break; } default: break; } if (!RegionEvent.regionStorage.ContainsKey(region)) { RegionEvent.regionStorage.Add(region, tempStorage); string flags = JsonConvert.SerializeObject(RegionEvent.regionStorage[region].flags, Formatting.Indented); string bannedItems = JsonConvert.SerializeObject(RegionEvent.regionStorage[region].bannedItems, Formatting.Indented); string bannedNPCs = JsonConvert.SerializeObject(RegionEvent.regionStorage[region].bannedNPCs, Formatting.Indented); string bannedTiles = JsonConvert.SerializeObject(RegionEvent.regionStorage[region].bannedTiles, Formatting.Indented); string bannedProjectiles = JsonConvert.SerializeObject(RegionEvent.regionStorage[region].bannedProjectiles, Formatting.Indented); int a = -1; string query = "INSERT INTO RegionEvent (Name, Flags, HealInterval, HealAmount, ManaInterval, DamageInterval, DamageAmount, TempGroup, BannedItems, BannedNPCs, BannedTiles, BannedProjectiles, Command, FromGroup, ToGroup, Message, EffectOwner, EffectAllowed) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17)"; a = RegionEvent.db.Query(query, region.Name, flags, tempStorage.healinterval, tempStorage.healamount, tempStorage.manainterval, tempStorage.damageinterval, tempStorage.damageamount, tempStorage.tempgroup.Name, bannedItems, bannedNPCs, bannedTiles, bannedProjectiles, tempStorage.command, tempStorage.fromgroup, tempStorage.togroup, tempStorage.message, tempStorage.effectOwner ? 1 : 0, tempStorage.effectAllowed ? 1 : 0); if (a < 0) { RegionEvent.regionStorage[region].flags.Remove(args.Parameters[2]); args.Player.SendErrorMessage("Failed to save to DB!"); return; } args.Player.SendSuccessMessage("Added flag {0} to region \"{1}\"!", args.Parameters[2], region.Name); } else { tempStorage.flags.Add(args.Parameters[2]); string flags = JsonConvert.SerializeObject(tempStorage.flags, Formatting.Indented); string bannedItems = JsonConvert.SerializeObject(tempStorage.bannedItems, Formatting.Indented); string bannedNPCs = JsonConvert.SerializeObject(tempStorage.bannedNPCs, Formatting.Indented); string bannedTiles = JsonConvert.SerializeObject(tempStorage.bannedTiles, Formatting.Indented); int a = -1; string query = "UPDATE RegionEvent SET `Flags`=@0, `HealInterval`=@1, HealAmount=@2, ManaInterval=@3, DamageInterval=@4, DamageAmount=@5, TempGroup=@6, BannedItems=@7, BannedNPCs=@8, BannedTiles=@9, BannedProjectiles=10, Command=@10, FromGroup=@11, ToGroup=@12, Message=@14, EffectOwner=@15, EffectAllowed=@16 WHERE Name=@17"; a = RegionEvent.db.Query(query, flags, tempStorage.healinterval, tempStorage.healamount, tempStorage.manainterval, tempStorage.damageinterval, tempStorage.damageamount, tempStorage.tempgroup.Name, bannedItems, bannedNPCs, bannedTiles, tempStorage.command, tempStorage.fromgroup, tempStorage.togroup, tempStorage.message, tempStorage.effectOwner ? 1 : 0, tempStorage.effectAllowed ? 1 : 0, region.Name); if (a < 0) { args.Player.SendErrorMessage("Failed to save to DB!"); return; } RegionEvent.regionStorage[region] = tempStorage; args.Player.SendSuccessMessage("Added flag {0} to region \"{1}\"!", args.Parameters[2], region.Name); } }