From c06502faf60f001740b24a3968a6a0445191fddd Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 22 Jun 2011 13:34:35 +1000 Subject: [PATCH 01/24] Added warp premission to use warp. Added managewarp premission to add/remove wrap positions. Moved time to time premission (from cfg). Moved butcher to butcher permission (from cheat). Moved whitelist to cfg premission (from maintenance). Added all the available premission in the group.txt with short description for each. --- TShockAPI/Commands.cs | 116 +++++++++++++++++++----------------- TShockAPI/config/groups.txt | 36 ++++++++--- 2 files changed, 88 insertions(+), 64 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 729cf227..ae3aefa1 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -120,16 +120,21 @@ namespace TShockAPI ChatCommands.Add(new Command("spawn", "tp", Spawn)); ChatCommands.Add(new Command("tp", "tp", TP)); ChatCommands.Add(new Command("tphere", "tp", TPHere)); + ChatCommands.Add(new Command("warp", "warp", UseWarp)); + ChatCommands.Add(new Command("setwarp", "managewarp", SetWarp)); + ChatCommands.Add(new Command("delwarp", "managewarp", DeleteWarp)); ChatCommands.Add(new Command("reload", "cfg", Reload)); ChatCommands.Add(new Command("debug-config", "cfg", DebugConfiguration)); ChatCommands.Add(new Command("password", "cfg", Password)); ChatCommands.Add(new Command("save", "cfg", Save)); ChatCommands.Add(new Command("maxspawns", "cfg", MaxSpawns)); ChatCommands.Add(new Command("spawnrate", "cfg", SpawnRate)); - ChatCommands.Add(new Command("time", "cfg", Time)); + ChatCommands.Add(new Command("whitelist", "cfg", Whitelist)); + ChatCommands.Add(new Command("time", "time", Time)); ChatCommands.Add(new Command("slap", "pvpfun", Slap)); ChatCommands.Add(new Command("antibuild", "editspawn", ToggleAntiBuild)); ChatCommands.Add(new Command("protectspawn", "editspawn", ProtectSpawn)); + ChatCommands.Add(new Command("region", "editspawn", Region)); ChatCommands.Add(new Command("help", "", Help)); ChatCommands.Add(new Command("playing", "", Playing)); ChatCommands.Add(new Command("online", "", Playing)); @@ -138,15 +143,10 @@ namespace TShockAPI ChatCommands.Add(new Command("me", "", ThirdPerson)); ChatCommands.Add(new Command("p", "", PartyChat)); ChatCommands.Add(new Command("rules", "", Rules)); - ChatCommands.Add(new Command("whitelist", "maintenance", Whitelist)); - ChatCommands.Add(new Command("region", "editspawn", Region)); - ChatCommands.Add(new Command("warp", "", UseWarp)); - ChatCommands.Add(new Command("setwarp", "cfg", SetWarp)); - ChatCommands.Add(new Command("delwarp", "cfg", DeleteWarp)); if (ConfigurationManager.DistributationAgent != "terraria-online") { ChatCommands.Add(new Command("kill", "kill", Kill)); - ChatCommands.Add(new Command("butcher", "cheat", Butcher)); + ChatCommands.Add(new Command("butcher", "butcher", Butcher)); ChatCommands.Add(new Command("i", "cheat", Item)); ChatCommands.Add(new Command("item", "cheat", Item)); ChatCommands.Add(new Command("give", "cheat", Give)); @@ -884,6 +884,21 @@ namespace TShockAPI Tools.Broadcast(string.Format("{0} changed the spawn rate to: {1}", args.Player.Name, amount)); } + public static void Whitelist(CommandArgs args) + { + if (args.Parameters.Count == 1) + { + TextWriter tw = new StreamWriter(FileTools.WhitelistPath, true); + tw.WriteLine(args.Parameters[0]); + tw.Close(); + args.Player.SendMessage("Added " + args.Parameters[0] + " to the whitelist."); + } + } + + #endregion Server Config Commands + + #region Time/PvpFun Commands + private static void Time(CommandArgs args) { if (args.Parameters.Count != 1) @@ -920,7 +935,44 @@ namespace TShockAPI } } - #endregion Server Config Commands + private static void Slap(CommandArgs args) + { + if (args.Parameters.Count < 1 || args.Parameters.Count > 2) + { + args.Player.SendMessage("Invalid syntax! Proper syntax: /slap [dmg]", Color.Red); + return; + } + if (args.Parameters[0].Length == 0) + { + args.Player.SendMessage("Missing player name", Color.Red); + return; + } + + string plStr = args.Parameters[0]; + var players = Tools.FindPlayer(plStr); + if (players.Count == 0) + { + args.Player.SendMessage("Invalid player!", Color.Red); + } + else if (players.Count > 1) + { + args.Player.SendMessage("More than one player matched!", Color.Red); + } + else + { + var plr = players[0]; + int damage = 5; + if (args.Parameters.Count == 2) + { + int.TryParse(args.Parameters[1], out damage); + } + plr.DamagePlayer(damage); + Tools.Broadcast(string.Format("{0} slapped {1} for {2} damage.", + args.Player.Name, plr.Name, damage)); + } + } + + #endregion Time/PvpFun Commands #region World Protection Commands @@ -1062,17 +1114,6 @@ namespace TShockAPI #region General Commands - public static void Whitelist(CommandArgs args) - { - if (args.Parameters.Count == 1) - { - TextWriter tw = new StreamWriter(FileTools.WhitelistPath, true); - tw.WriteLine(args.Parameters[0]); - tw.Close(); - args.Player.SendMessage("Added " + args.Parameters[0] + " to the whitelist."); - } - } - private static void Help(CommandArgs args) { args.Player.SendMessage("TShock Commands:"); @@ -1177,43 +1218,6 @@ namespace TShockAPI #region Cheat Commands - private static void Slap(CommandArgs args) - { - if (args.Parameters.Count < 1 || args.Parameters.Count > 2) - { - args.Player.SendMessage("Invalid syntax! Proper syntax: /slap [dmg]", Color.Red); - return; - } - if (args.Parameters[0].Length == 0) - { - args.Player.SendMessage("Missing player name", Color.Red); - return; - } - - string plStr = args.Parameters[0]; - var players = Tools.FindPlayer(plStr); - if (players.Count == 0) - { - args.Player.SendMessage("Invalid player!", Color.Red); - } - else if (players.Count > 1) - { - args.Player.SendMessage("More than one player matched!", Color.Red); - } - else - { - var plr = players[0]; - int damage = 5; - if (args.Parameters.Count == 2) - { - int.TryParse(args.Parameters[1], out damage); - } - plr.DamagePlayer(damage); - Tools.Broadcast(string.Format("{0} slapped {1} for {2} damage.", - args.Player.Name, plr.Name, damage)); - } - } - private static void Kill(CommandArgs args) { if (args.Parameters.Count < 1) diff --git a/TShockAPI/config/groups.txt b/TShockAPI/config/groups.txt index 481ab561..d83c15f3 100644 --- a/TShockAPI/config/groups.txt +++ b/TShockAPI/config/groups.txt @@ -8,14 +8,34 @@ #ALWAYS DECLARE A GROUP'S PARENT BEFORE YOU DECLARE THE GROUP #currently avaliable permissions: -#kick ban ignorecheatdetection -#maintenance cfg causeevents spawnboss tp -#spawnmob cheat kill pvpfun -#immunetoban immunetokick editspawn -#ignoregriefdetection reservedslot +#reservedslot - reserved slot for player +#canwater - allow players to use water +#canlava - allow playes to use lava +#warp - allow players to use warps +#kick - kick users +#ban - ban players by name or ip +#unban - unban players by name or ip +#maintenance - check for updates/turn off server +#causeevents - allow player to drop star/meteor and start invasion/bloodmoon +#spawnboss - allow player to spawn bosses +#spawnmob - allow player to spawn any npcs +#tp - allow player to teleport +#managewarp - allow player to add/delete warp locations +#editspawn - allow player to enable/disable build protection +#cfg - allow player to view/change tshock configuration +#time - allow player to change time +#pvpfun - enable pvpfun commands +#logs - notify player when any command is executed +#kill - allow player to kill others +#butcher - allow player to kill all alive monsters +#cheat - allow player to spawn items and heal self +#immunetokick - player can't be kick +#immunetoban - player can't be banned +#ignorecheatdetection - allow player to cheat (health/mana cheats) +#ignoregriefdetection - allow player to grief (use explosives, water, lava even if they dont have premission to) -default null canwater canlava +default null canwater canlava warp vip default reservedslot newadmin default kick editspawn reservedslot -admin newadmin ban unban causeevents spawnboss spawnmob tp immunetokick kill logs -trustedadmin admin maintenance cfg cheat pvpfun ignorecheatdetection immunetoban ignoregriefdetection \ No newline at end of file +admin newadmin ban unban causeevents spawnboss spawnmob managewarp time tp pvpfun kill logs immunetokick +trustedadmin admin maintenance cfg butcher cheat immunetoban ignorecheatdetection ignoregriefdetection \ No newline at end of file From 28b1267079262d3dbd5f57dad5e775b2a6151162 Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 22 Jun 2011 13:52:55 +1000 Subject: [PATCH 02/24] Fixed BanKillTileAbusers/KickKillTileAbusers using wrong propert when writing config --- TShockAPI/ConfigFile.cs | 4 ++-- TShockAPI/ConfigurationManager.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TShockAPI/ConfigFile.cs b/TShockAPI/ConfigFile.cs index a197a333..7dcc74a5 100644 --- a/TShockAPI/ConfigFile.cs +++ b/TShockAPI/ConfigFile.cs @@ -30,8 +30,8 @@ namespace TShockAPI public bool BanCheaters = true; public bool KickGriefers = true; public bool BanGriefers = true; - public bool BanKillTileAbusers; - public bool KickKillTileAbusers; + public bool BanKillTileAbusers = true; + public bool KickKillTileAbusers = true; public bool BanExplosives = true; public bool KickExplosives = true; public bool SpawnProtection = true; diff --git a/TShockAPI/ConfigurationManager.cs b/TShockAPI/ConfigurationManager.cs index 00fc8d6c..47844ae4 100644 --- a/TShockAPI/ConfigurationManager.cs +++ b/TShockAPI/ConfigurationManager.cs @@ -126,8 +126,8 @@ namespace TShockAPI cfg.BanCheaters = BanCheater; cfg.KickGriefers = KickGriefer; cfg.BanGriefers = BanGriefer; - cfg.BanKillTileAbusers = BanGriefer; - cfg.KickKillTileAbusers = KickGriefer; + cfg.BanKillTileAbusers = BanTnt; + cfg.KickKillTileAbusers = KickTnt; cfg.BanExplosives = BanBoom; cfg.KickExplosives = KickBoom; cfg.SpawnProtection = SpawnProtect; From 43cd69b330dee66fd2c74abb9965aef6d62ffd3e Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 22 Jun 2011 13:56:12 +1000 Subject: [PATCH 03/24] Moved whitelist in its own premission. --- TShockAPI/Commands.cs | 24 ++++++++++++------------ TShockAPI/config/groups.txt | 3 ++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index ae3aefa1..a4dd98de 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -102,6 +102,7 @@ namespace TShockAPI ChatCommands.Add(new Command("banip", "ban", BanIP)); ChatCommands.Add(new Command("unban", "unban", UnBan)); ChatCommands.Add(new Command("unbanip", "unban", UnBanIP)); + ChatCommands.Add(new Command("whitelist", "whitelist", Whitelist)); ChatCommands.Add(new Command("off", "maintenance", Off)); ChatCommands.Add(new Command("off-nosave", "maintenance", OffNoSave)); ChatCommands.Add(new Command("checkupdates", "maintenance", CheckUpdates)); @@ -129,7 +130,6 @@ namespace TShockAPI ChatCommands.Add(new Command("save", "cfg", Save)); ChatCommands.Add(new Command("maxspawns", "cfg", MaxSpawns)); ChatCommands.Add(new Command("spawnrate", "cfg", SpawnRate)); - ChatCommands.Add(new Command("whitelist", "cfg", Whitelist)); ChatCommands.Add(new Command("time", "time", Time)); ChatCommands.Add(new Command("slap", "pvpfun", Slap)); ChatCommands.Add(new Command("antibuild", "editspawn", ToggleAntiBuild)); @@ -417,6 +417,17 @@ namespace TShockAPI } } + public static void Whitelist(CommandArgs args) + { + if (args.Parameters.Count == 1) + { + TextWriter tw = new StreamWriter(FileTools.WhitelistPath, true); + tw.WriteLine(args.Parameters[0]); + tw.Close(); + args.Player.SendMessage("Added " + args.Parameters[0] + " to the whitelist."); + } + } + #endregion Player Management Commands #region Server Maintenence Commands @@ -884,17 +895,6 @@ namespace TShockAPI Tools.Broadcast(string.Format("{0} changed the spawn rate to: {1}", args.Player.Name, amount)); } - public static void Whitelist(CommandArgs args) - { - if (args.Parameters.Count == 1) - { - TextWriter tw = new StreamWriter(FileTools.WhitelistPath, true); - tw.WriteLine(args.Parameters[0]); - tw.Close(); - args.Player.SendMessage("Added " + args.Parameters[0] + " to the whitelist."); - } - } - #endregion Server Config Commands #region Time/PvpFun Commands diff --git a/TShockAPI/config/groups.txt b/TShockAPI/config/groups.txt index d83c15f3..6235e54b 100644 --- a/TShockAPI/config/groups.txt +++ b/TShockAPI/config/groups.txt @@ -15,6 +15,7 @@ #kick - kick users #ban - ban players by name or ip #unban - unban players by name or ip +#whitelist - add ip to whitelist #maintenance - check for updates/turn off server #causeevents - allow player to drop star/meteor and start invasion/bloodmoon #spawnboss - allow player to spawn bosses @@ -37,5 +38,5 @@ default null canwater canlava warp vip default reservedslot newadmin default kick editspawn reservedslot -admin newadmin ban unban causeevents spawnboss spawnmob managewarp time tp pvpfun kill logs immunetokick +admin newadmin ban unban whitelist causeevents spawnboss spawnmob managewarp time tp pvpfun kill logs immunetokick trustedadmin admin maintenance cfg butcher cheat immunetoban ignorecheatdetection ignoregriefdetection \ No newline at end of file From 25472ea497d2f7ac1a054f78991f378102ee902b Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 22 Jun 2011 13:59:24 +1000 Subject: [PATCH 04/24] Notify player if wrap is unavaiable --- TShockAPI/Commands.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index a4dd98de..b09f8c35 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -690,7 +690,7 @@ namespace TShockAPI if (args.Player.Teleport(Main.spawnTileX, Main.spawnTileY)) args.Player.SendMessage("Teleported to the map's spawnpoint."); else - args.Player.SendMessage("Teleport unavailable custom spawnpoint set (to unset die after bed is destroyed).", Color.Red); + args.Player.SendMessage("Teleport unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); } private static void TP(CommandArgs args) @@ -719,7 +719,7 @@ namespace TShockAPI if (args.Player.Teleport(plr.TileX, plr.TileY)) args.Player.SendMessage(string.Format("Teleported to {0}", plr.Name)); else - args.Player.SendMessage("Teleport unavailable custom spawnpoint set (to unset die after bed is destroyed).", Color.Red); + args.Player.SendMessage("Teleport unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); } } @@ -794,12 +794,15 @@ namespace TShockAPI { if (WarpsManager.FindWarp(args.Parameters[0]) != Vector2.Zero) { - args.Player.Teleport((int)WarpsManager.FindWarp(args.Parameters[0]).X, (int)WarpsManager.FindWarp(args.Parameters[0]).Y); - args.Player.SendMessage("Warped to " + args.Parameters[0], Color.Yellow); + if (args.Player.Teleport((int)WarpsManager.FindWarp(args.Parameters[0]).X, (int)WarpsManager.FindWarp(args.Parameters[0]).Y)) + args.Player.SendMessage("Warped to " + args.Parameters[0], Color.Yellow); + else + args.Player.SendMessage("Warp unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); + } else { - args.Player.SendMessage("Specified warp not found", Color.Yellow); + args.Player.SendMessage("Specified warp not found", Color.Red); } } else From db1edd3f98e558e27bee59e0d2679d9e9fa9b504 Mon Sep 17 00:00:00 2001 From: Twitchy Date: Wed, 22 Jun 2011 16:26:12 +1200 Subject: [PATCH 05/24] Added world specific regions and warps. Added logging. reagions and warps will require redoing --- TShockAPI/Commands.cs | 4 ++-- TShockAPI/RegionManager.cs | 48 ++++++++++++++++++++++++++------------ TShockAPI/WarpsManager.cs | 37 +++++++++++++++++++++-------- 3 files changed, 62 insertions(+), 27 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index b09f8c35..c58b0a24 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -764,7 +764,7 @@ namespace TShockAPI private static void SetWarp(CommandArgs args) { if (args.Parameters.Count > 0) - if (WarpsManager.AddWarp(args.Player.TileX, args.Player.TileY, args.Parameters[0])) + if (WarpsManager.AddWarp(args.Player.TileX, args.Player.TileY, args.Parameters[0], Main.worldName)) { args.Player.SendMessage("Set warp " + args.Parameters[0], Color.Yellow); WarpsManager.WriteSettings(); @@ -1039,7 +1039,7 @@ namespace TShockAPI { if (!args.Player.TempArea.IsEmpty) { - if (RegionManager.AddRegion(args.Player.TempArea.X, args.Player.TempArea.Y, args.Player.TempArea.Width, args.Player.TempArea.Height, args.Parameters[1], true)) + if (RegionManager.AddRegion(args.Player.TempArea.X, args.Player.TempArea.Y, args.Player.TempArea.Width, args.Player.TempArea.Height, args.Parameters[1], Main.worldName)) { RegionManager.WriteSettings(); args.Player.TempArea = Rectangle.Empty; diff --git a/TShockAPI/RegionManager.cs b/TShockAPI/RegionManager.cs index de7f0f52..06465c4a 100644 --- a/TShockAPI/RegionManager.cs +++ b/TShockAPI/RegionManager.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Xml; using Microsoft.Xna.Framework; +using Terraria; namespace TShockAPI { @@ -11,7 +12,7 @@ namespace TShockAPI { public static List Regions = new List(); - public static bool AddRegion(int tx, int ty, int width, int height, string name, bool state) + public static bool AddRegion(int tx, int ty, int width, int height, string name, string worldname) { foreach (Region nametest in Regions) { @@ -20,7 +21,7 @@ namespace TShockAPI return false; } } - Regions.Add(new Region(new Rectangle(tx, ty, width, height), name, true)); + Regions.Add(new Region(new Rectangle(tx, ty, width, height), name, true, worldname)); return true; } @@ -28,7 +29,7 @@ namespace TShockAPI { foreach (Region nametest in Regions) { - if (name.ToLower() == nametest.RegionName.ToLower()) + if (name.ToLower() == nametest.RegionName.ToLower() && nametest.WorldRegionName == Main.worldName) { Regions.Remove(nametest); WriteSettings(); @@ -56,7 +57,7 @@ namespace TShockAPI { foreach(Region region in Regions) { - if (X >= region.RegionArea.Left && X <= region.RegionArea.Right && Y >= region.RegionArea.Top && Y <= region.RegionArea.Bottom && region.DisableBuild) + if (X >= region.RegionArea.Left && X <= region.RegionArea.Right && Y >= region.RegionArea.Top && Y <= region.RegionArea.Bottom && region.DisableBuild && Main.worldName == region.WorldRegionName) { return true; } @@ -86,6 +87,7 @@ namespace TShockAPI settingsw.WriteElementString("Point2X", region.RegionArea.Width.ToString()); settingsw.WriteElementString("Point2Y", region.RegionArea.Height.ToString()); settingsw.WriteElementString("Protected", region.DisableBuild.ToString()); + settingsw.WriteElementString("WorldName", region.WorldRegionName); settingsw.WriteEndElement(); } @@ -96,7 +98,7 @@ namespace TShockAPI } catch { - Log.Info("Could not write Regions"); + Log.Warn("Could not write Regions"); } } @@ -123,15 +125,20 @@ namespace TShockAPI { if (settingr.Read()) { - string name; + string name = null; int x = 0; int y = 0; int width = 0; int height = 0; bool state = true; + string worldname = null; settingr.Read(); - name = settingr.Value; + if (settingr.Value != "" || settingr.Value != null) + name = settingr.Value; + else + Log.Warn("Region name is empty"); + settingr.Read(); settingr.Read(); @@ -139,7 +146,7 @@ namespace TShockAPI if (settingr.Value != "" || settingr.Value != null) Int32.TryParse(settingr.Value, out x); else - Console.WriteLine("Could not parse x"); + Log.Warn("x for region " + name + " is empty"); settingr.Read(); settingr.Read(); @@ -147,7 +154,7 @@ namespace TShockAPI if (settingr.Value != "" || settingr.Value != null) Int32.TryParse(settingr.Value, out y); else - Console.WriteLine("Could not parse y"); + Log.Warn("y for region " + name + " is empty"); settingr.Read(); settingr.Read(); @@ -155,7 +162,7 @@ namespace TShockAPI if (settingr.Value != "" || settingr.Value != null) Int32.TryParse(settingr.Value, out width); else - Console.WriteLine("Could not parse width"); + Log.Warn("Width for region " + name + " is empty"); settingr.Read(); settingr.Read(); @@ -163,7 +170,7 @@ namespace TShockAPI if (settingr.Value != "" || settingr.Value != null) Int32.TryParse(settingr.Value, out height); else - Console.WriteLine("Could not parse height"); + Log.Warn("Height for region " + name + " is empty"); settingr.Read(); settingr.Read(); @@ -171,9 +178,17 @@ namespace TShockAPI if (settingr.Value != "" || settingr.Value != null) bool.TryParse(settingr.Value, out state); else - Console.WriteLine("Could not parse state"); + Log.Warn("State for region " + name + " is empty"); - AddRegion(x, y, width, height, name, state); + settingr.Read(); + settingr.Read(); + settingr.Read(); + if (settingr.Value != "" || settingr.Value != null) + worldname = settingr.Value; + else + Log.Warn("Worldname for region " + name + " is empty"); + + AddRegion(x, y, width, height, name, worldname); } break; } @@ -185,7 +200,7 @@ namespace TShockAPI } catch { - Log.Info("Could not read Regions"); + Log.Warn("Could not read Regions"); WriteSettings(); } } @@ -196,12 +211,14 @@ namespace TShockAPI public Rectangle RegionArea { get; set; } public string RegionName { get; set; } public bool DisableBuild { get; set; } + public string WorldRegionName { get; set; } - public Region(Rectangle region, string name, bool disablebuild) + public Region(Rectangle region, string name, bool disablebuild, string worldname) { RegionArea = region; RegionName = name; DisableBuild = disablebuild; + WorldRegionName = worldname; } public Region() @@ -209,6 +226,7 @@ namespace TShockAPI RegionArea = Rectangle.Empty; RegionName = string.Empty; DisableBuild = true; + WorldRegionName = string.Empty; } } } diff --git a/TShockAPI/WarpsManager.cs b/TShockAPI/WarpsManager.cs index 21193bda..69ef985f 100644 --- a/TShockAPI/WarpsManager.cs +++ b/TShockAPI/WarpsManager.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using Microsoft.Xna.Framework; using System.Xml; +using Terraria; namespace TShockAPI { @@ -11,7 +12,7 @@ namespace TShockAPI { public static List Warps = new List(); - public static bool AddWarp(int x, int y, string name) + public static bool AddWarp(int x, int y, string name, string worldname) { foreach (Warp nametest in Warps) { @@ -20,7 +21,7 @@ namespace TShockAPI return false; } } - Warps.Add(new Warp(new Vector2(x, y), name)); + Warps.Add(new Warp(new Vector2(x, y), name, worldname)); return true; } @@ -28,7 +29,7 @@ namespace TShockAPI { foreach (Warp nametest in Warps) { - if (name.ToLower() == nametest.WarpName.ToLower()) + if (name.ToLower() == nametest.WarpName.ToLower() && nametest.WorldWarpName == Main.worldName) { Warps.Remove(nametest); WriteSettings(); @@ -42,7 +43,7 @@ namespace TShockAPI { foreach (Warp nametest in Warps) { - if (name.ToLower() == nametest.WarpName.ToLower()) + if (name.ToLower() == nametest.WarpName.ToLower() && nametest.WorldWarpName == Main.worldName) { return nametest.WarpPos; } @@ -69,6 +70,7 @@ namespace TShockAPI settingsw.WriteElementString("WarpName", warp.WarpName); settingsw.WriteElementString("X", warp.WarpPos.X.ToString()); settingsw.WriteElementString("Y", warp.WarpPos.Y.ToString()); + settingsw.WriteElementString("WorldName", warp.WorldWarpName); settingsw.WriteEndElement(); } @@ -106,12 +108,16 @@ namespace TShockAPI { if (settingr.Read()) { - string name; + string name = string.Empty; int x = 0; int y = 0; + string worldname = string.Empty; settingr.Read(); - name = settingr.Value; + if (settingr.Value != "" || settingr.Value != null) + name = settingr.Value; + else + Log.Warn("Warp name is empty, This warp will not work"); settingr.Read(); settingr.Read(); @@ -119,7 +125,7 @@ namespace TShockAPI if (settingr.Value != "" || settingr.Value != null) Int32.TryParse(settingr.Value, out x); else - Console.WriteLine("Could not parse x"); + Log.Warn("x for warp " + name + " is empty"); settingr.Read(); settingr.Read(); @@ -127,9 +133,17 @@ namespace TShockAPI if (settingr.Value != "" || settingr.Value != null) Int32.TryParse(settingr.Value, out y); else - Console.WriteLine("Could not parse y"); + Log.Warn("y for warp " + name + " is empty"); - AddWarp(x, y, name); + settingr.Read(); + settingr.Read(); + settingr.Read(); + if (settingr.Value != "" || settingr.Value != null) + worldname = settingr.Value; + else + Log.Warn("Worldname for warp " + name + " is empty"); + + AddWarp(x, y, name, worldname); } break; } @@ -151,17 +165,20 @@ namespace TShockAPI { public Vector2 WarpPos { get; set; } public string WarpName { get; set; } + public string WorldWarpName { get; set; } - public Warp(Vector2 warppos, string name) + public Warp(Vector2 warppos, string name, string worldname) { WarpPos = warppos; WarpName = name; + WorldWarpName = worldname; } public Warp() { WarpPos = Vector2.Zero; WarpName = null; + WorldWarpName = string.Empty; } } } From 6b1310ba4c5781741ee3cb4d01e17b8b66540764 Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 22 Jun 2011 14:48:44 +1000 Subject: [PATCH 06/24] Add/Delete warp handles name with spaces if not wrapped in quotes. Added warp list which shows 15 warps at a time Disallowed addition of warp with name list --- TShockAPI/Commands.cs | 84 ++++++++++++++++++++++++++++++------------- 1 file changed, 60 insertions(+), 24 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index c58b0a24..252a4985 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -763,26 +763,34 @@ namespace TShockAPI private static void SetWarp(CommandArgs args) { - if (args.Parameters.Count > 0) - if (WarpsManager.AddWarp(args.Player.TileX, args.Player.TileY, args.Parameters[0], Main.worldName)) + if (args.Parameters.Count > 1) + { + string warpName = String.Join(" ", args.Parameters); + if (warpName.Equals("list")) { - args.Player.SendMessage("Set warp " + args.Parameters[0], Color.Yellow); + args.Player.SendMessage("Name reserved, use a different name", Color.Red); + } + else if (WarpsManager.AddWarp(args.Player.TileX, args.Player.TileY, warpName, Main.worldName)) + { + args.Player.SendMessage("Set warp " + warpName, Color.Yellow); WarpsManager.WriteSettings(); } else { - args.Player.SendMessage("Warp " + args.Parameters[0] + " already exists", Color.Red); + args.Player.SendMessage("Warp " + warpName + " already exists", Color.Red); } + } else args.Player.SendMessage("Invalid syntax! Proper syntax: /setwarp [name]", Color.Red); } private static void DeleteWarp(CommandArgs args) { - if (args.Parameters.Count > 0) + if (args.Parameters.Count > 1) { - if (WarpsManager.DeleteWarp(args.Parameters[0])) - args.Player.SendMessage("Deleted warp " + args.Parameters[0], Color.Yellow); + string warpName = String.Join(" ", args.Parameters); + if (WarpsManager.DeleteWarp(warpName)) + args.Player.SendMessage("Deleted warp " + warpName, Color.Yellow); else args.Player.SendMessage("Could not find specified warp", Color.Red); } @@ -790,31 +798,59 @@ namespace TShockAPI private static void UseWarp(CommandArgs args) { - if (args.Parameters.Count > 0) + if (args.Parameters.Count > 1) { - if (WarpsManager.FindWarp(args.Parameters[0]) != Vector2.Zero) + if (args.Parameters[0].Equals("list")) { - if (args.Player.Teleport((int)WarpsManager.FindWarp(args.Parameters[0]).X, (int)WarpsManager.FindWarp(args.Parameters[0]).Y)) - args.Player.SendMessage("Warped to " + args.Parameters[0], Color.Yellow); - else - args.Player.SendMessage("Warp unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); - + args.Player.SendMessage("Current Warps:", Color.Green); + int page = 1; + if (args.Parameters.Count > 1) + int.TryParse(args.Parameters[1], out page); + var sb = new StringBuilder(); + if (WarpsManager.Warps.Count > (15 * (page - 1))) + { + for (int j = (15 * (page - 1)); j < (15 * page); j++) + { + if (sb.Length != 0) + sb.Append(", "); + sb.Append("/").Append(WarpsManager.Warps[j].WarpName); + if (j == WarpsManager.Warps.Count - 1) + { + args.Player.SendMessage(sb.ToString(), Color.Yellow); + break; + } + if ((j + 1) % 5 == 0) + { + args.Player.SendMessage(sb.ToString(), Color.Yellow); + sb.Clear(); + } + } + } + if (WarpsManager.Warps.Count > (15 * page)) + { + args.Player.SendMessage(string.Format("Type /warp list {0} for more warps.", (page + 1)), Color.Yellow); + } } else { - args.Player.SendMessage("Specified warp not found", Color.Red); + string warpName = String.Join(" ", args.Parameters); + var warp = WarpsManager.FindWarp(warpName); + if (warp != Vector2.Zero) + { + if (args.Player.Teleport((int)warp.X, (int)warp.Y)) + args.Player.SendMessage("Warped to " + warpName, Color.Yellow); + else + args.Player.SendMessage("Warp unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); + + } + else + { + args.Player.SendMessage("Specified warp not found", Color.Red); + } } } else - { - args.Player.SendMessage("Current Warps:", Color.Green); - - //Someone needs to make it list - for (int i = 0; i < (WarpsManager.Warps.Count); i++) - { - args.Player.SendMessage(WarpsManager.Warps[i].WarpName, Color.Yellow); - } - } + args.Player.SendMessage("Invalid syntax! Proper syntax: /warp [name] or warp list", Color.Red); } #endregion Teleport Commands From 2f6c6bd1a49968cfe3a9af61c98e3278019ae0ab Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 22 Jun 2011 15:09:20 +1000 Subject: [PATCH 07/24] region define/delete handles names with spaces not wrapped in quotes (protect requires quotes around the name since region name is not the last argument). --- TShockAPI/Commands.cs | 172 ++++++++++++++++++++++-------------------- 1 file changed, 91 insertions(+), 81 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 252a4985..c5cc9382 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1029,122 +1029,132 @@ namespace TShockAPI private static void Region(CommandArgs args) { + string cmd = "help"; if (args.Parameters.Count > 0) { - switch (args.Parameters[0].ToLower()) - { - case "set": + cmd = args.Parameters[0].ToLower(); + } + switch (cmd) + { + case "set": + { + if (args.Parameters.Count == 2) { - if (args.Parameters.Count > 1) + if (args.Parameters[1] == "1") { - if (args.Parameters[1] == "1") + args.Player.TempArea.X = args.Player.TileX; + args.Player.TempArea.Y = args.Player.TileY; + args.Player.SendMessage("Set Temp Point 1", Color.Yellow); + } + else if (args.Parameters[1] == "2") + { + if (args.Player.TempArea.X != 0) { - args.Player.TempArea.X = args.Player.TileX; - args.Player.TempArea.Y = args.Player.TileY; - args.Player.SendMessage("Set Temp Point 1", Color.Yellow); - } - else if (args.Parameters[1] == "2") - { - if (args.Player.TempArea.X != 0) + if (args.Player.TileX > args.Player.TempArea.X && args.Player.TileY > args.Player.TempArea.Y) { - if (args.Player.TileX > args.Player.TempArea.X && args.Player.TileY > args.Player.TempArea.Y) - { - args.Player.TempArea.Width = args.Player.TileX - args.Player.TempArea.X; - args.Player.TempArea.Height = (args.Player.TileY + 3) - args.Player.TempArea.Y; - args.Player.SendMessage("Set Temp Point 2", Color.Yellow); - } - else - { - args.Player.SendMessage("Point 2 must be below and right of Point 1", Color.Yellow); - args.Player.SendMessage("Use /region clear to start again", Color.Yellow); - } + args.Player.TempArea.Width = args.Player.TileX - args.Player.TempArea.X; + args.Player.TempArea.Height = (args.Player.TileY + 3) - args.Player.TempArea.Y; + args.Player.SendMessage("Set Temp Point 2", Color.Yellow); } else { - args.Player.SendMessage("You have not set Point 1 yet", Color.Red); + args.Player.SendMessage("Point 2 must be below and right of Point 1", Color.Yellow); + args.Player.SendMessage("Use /region clear to start again", Color.Yellow); } } + else + { + args.Player.SendMessage("You have not set Point 1 yet", Color.Red); + } } else args.Player.SendMessage("Invalid syntax! Proper syntax: /region set [1/2]", Color.Red); - break; } - case "define": + else + args.Player.SendMessage("Invalid syntax! Proper syntax: /region set [1/2]", Color.Red); + break; + } + case "define": + { + if (args.Parameters.Count > 1) { - if (args.Parameters.Count > 1) + if (!args.Player.TempArea.IsEmpty) { - if (!args.Player.TempArea.IsEmpty) + string regionName = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)); + if (RegionManager.AddRegion(args.Player.TempArea.X, args.Player.TempArea.Y, + args.Player.TempArea.Width, args.Player.TempArea.Height, + regionName, Main.worldName)) { - if (RegionManager.AddRegion(args.Player.TempArea.X, args.Player.TempArea.Y, args.Player.TempArea.Width, args.Player.TempArea.Height, args.Parameters[1], Main.worldName)) - { - RegionManager.WriteSettings(); - args.Player.TempArea = Rectangle.Empty; - args.Player.SendMessage("Set region " + args.Parameters[1], Color.Yellow); - } - else - { - args.Player.SendMessage("Region " + args.Parameters[1] + " already exists", Color.Red); - } + RegionManager.WriteSettings(); + args.Player.TempArea = Rectangle.Empty; + args.Player.SendMessage("Set region " + regionName, Color.Yellow); } else - args.Player.SendMessage("Points not set up yet", Color.Red); + { + args.Player.SendMessage("Region " + regionName + " already exists", Color.Red); + } } else - args.Player.SendMessage("Invalid syntax! Proper syntax: /region define [name]", Color.Red); - break; + args.Player.SendMessage("Points not set up yet", Color.Red); } - case "protect": + else + args.Player.SendMessage("Invalid syntax! Proper syntax: /region define [name]", Color.Red); + break; + } + case "protect": + { + if (args.Parameters.Count == 3) { - if (args.Parameters.Count > 2) + string regionName = args.Parameters[1]; + if (args.Parameters[2].ToLower() == "true") { - if (args.Parameters[2].ToLower() == "true") - { - if(RegionManager.SetRegionState(args.Parameters[1],true)) - args.Player.SendMessage("Protected region " + args.Parameters[1], Color.Yellow); - else - args.Player.SendMessage("Could not find specified region", Color.Red); - } - else if (args.Parameters[2].ToLower() == "false") - { - if (RegionManager.SetRegionState(args.Parameters[1], false)) - args.Player.SendMessage("Unprotected region " + args.Parameters[1], Color.Yellow); - else - args.Player.SendMessage("Could not find specified region", Color.Red); - } + if (RegionManager.SetRegionState(regionName, true)) + args.Player.SendMessage("Protected region " + regionName, Color.Yellow); else - args.Player.SendMessage("Invalid syntax! Proper syntax: /region protected [name] [true/false]", Color.Red); + args.Player.SendMessage("Could not find specified region", Color.Red); } - else - args.Player.SendMessage("Invalid syntax! Proper syntax: /region protected [name] [true/false]", Color.Red); - break; - } - case "delete": - { - if (args.Parameters.Count > 1) + else if (args.Parameters[2].ToLower() == "false") { - if (RegionManager.DeleteRegion(args.Parameters[1])) - args.Player.SendMessage("Deleted region " + args.Parameters[1], Color.Yellow); + if (RegionManager.SetRegionState(regionName, false)) + args.Player.SendMessage("Unprotected region " + regionName, Color.Yellow); else args.Player.SendMessage("Could not find specified region", Color.Red); } else - args.Player.SendMessage("Invalid syntax! Proper syntax: /region delete [name]", Color.Red); - break; + args.Player.SendMessage("Invalid syntax! Proper syntax: /region protected [name] [true/false]", Color.Red); } - case "clear": + else + args.Player.SendMessage("Invalid syntax! Proper syntax: /region protected [name] [true/false]", Color.Red); + break; + } + case "delete": + { + if (args.Parameters.Count > 1) { - args.Player.TempArea = Rectangle.Empty; - args.Player.SendMessage("Cleared temp area", Color.Yellow); - break; + string regionName = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)); + if (RegionManager.DeleteRegion(regionName)) + args.Player.SendMessage("Deleted region " + regionName, Color.Yellow); + else + args.Player.SendMessage("Could not find specified region", Color.Red); } - case "help": - { - args.Player.SendMessage("Avialable region commands:", Color.Green); - args.Player.SendMessage("/region set [1/2] /region define [name] /region protect [name] [true/false]", Color.Yellow); - args.Player.SendMessage("/region delete [name] /region clear (temporary region)", Color.Yellow); - break; - } - } + else + args.Player.SendMessage("Invalid syntax! Proper syntax: /region delete [name]", Color.Red); + break; + } + case "clear": + { + args.Player.TempArea = Rectangle.Empty; + args.Player.SendMessage("Cleared temp area", Color.Yellow); + break; + } + case "help": + default: + { + args.Player.SendMessage("Avialable region commands:", Color.Green); + args.Player.SendMessage("/region set [1/2] /region define [name] /region protect [name] [true/false]", Color.Yellow); + args.Player.SendMessage("/region delete [name] /region clear (temporary region)", Color.Yellow); + break; + } } } From 0a5b14644dd23a058e75a79da8d674565cf89296 Mon Sep 17 00:00:00 2001 From: Twitchy Date: Wed, 22 Jun 2011 17:11:27 +1200 Subject: [PATCH 08/24] Allowed /warp list without page num --- TShockAPI/Commands.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index c5cc9382..262e949c 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -798,7 +798,7 @@ namespace TShockAPI private static void UseWarp(CommandArgs args) { - if (args.Parameters.Count > 1) + if (args.Parameters.Count > 0) { if (args.Parameters[0].Equals("list")) { From 2807bb70abf4d001703c53fcaa6399af65ee3eb2 Mon Sep 17 00:00:00 2001 From: ricky Date: Wed, 22 Jun 2011 15:23:38 +1000 Subject: [PATCH 09/24] Fixed my mistake in if condition --- TShockAPI/Commands.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 262e949c..2e329415 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -763,7 +763,7 @@ namespace TShockAPI private static void SetWarp(CommandArgs args) { - if (args.Parameters.Count > 1) + if (args.Parameters.Count > 0) { string warpName = String.Join(" ", args.Parameters); if (warpName.Equals("list")) @@ -786,7 +786,7 @@ namespace TShockAPI private static void DeleteWarp(CommandArgs args) { - if (args.Parameters.Count > 1) + if (args.Parameters.Count > 0) { string warpName = String.Join(" ", args.Parameters); if (WarpsManager.DeleteWarp(warpName)) @@ -794,6 +794,8 @@ namespace TShockAPI else args.Player.SendMessage("Could not find specified warp", Color.Red); } + else + args.Player.SendMessage("Invalid syntax! Proper syntax: /delwarp [name]", Color.Red); } private static void UseWarp(CommandArgs args) From c86f9ec792e6a60572a4585aca641a181093fb90 Mon Sep 17 00:00:00 2001 From: Graham Cantin Date: Tue, 21 Jun 2011 23:11:56 -0800 Subject: [PATCH 10/24] Updated text for various Warp & Teleport commands --- TShockAPI/Commands.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 2e329415..987bd102 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -671,7 +671,7 @@ namespace TShockAPI { if (!args.Player.RealPlayer) { - args.Player.SendMessage("You cant use teleport commands!"); + args.Player.SendMessage("You cannot use teleport commands!"); return; } @@ -683,21 +683,21 @@ namespace TShockAPI { if (!args.Player.RealPlayer) { - args.Player.SendMessage("You cant use teleport commands!"); + args.Player.SendMessage("You cannot use teleport commands!"); return; } if (args.Player.Teleport(Main.spawnTileX, Main.spawnTileY)) args.Player.SendMessage("Teleported to the map's spawnpoint."); else - args.Player.SendMessage("Teleport unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); + args.Player.SendMessage("Teleport unavailable - Spawn point set to Bed. To unset, destroy Bed and suicide at least once.", Color.Red); } private static void TP(CommandArgs args) { if (!args.Player.RealPlayer) { - args.Player.SendMessage("You cant use teleport commands!"); + args.Player.SendMessage("You cannot use teleport commands!"); return; } @@ -719,7 +719,7 @@ namespace TShockAPI if (args.Player.Teleport(plr.TileX, plr.TileY)) args.Player.SendMessage(string.Format("Teleported to {0}", plr.Name)); else - args.Player.SendMessage("Teleport unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); + args.Player.SendMessage("Teleport unavailable - Spawn point set to Bed. To unset, destroy Bed and suicide at least once.", Color.Red); } } @@ -727,7 +727,7 @@ namespace TShockAPI { if (!args.Player.RealPlayer) { - args.Player.SendMessage("You cant use teleport commands!"); + args.Player.SendMessage("You cannot use teleport commands!"); return; } @@ -756,7 +756,7 @@ namespace TShockAPI args.Player.SendMessage(string.Format("You brought {0} here.", plr.Name)); } else - args.Player.SendMessage("Teleport unavailable target player has custom spawnpoint set.", Color.Red); + args.Player.SendMessage("Teleport unavailable - Target player has spawn point set to Bed.", Color.Red); } } @@ -842,7 +842,7 @@ namespace TShockAPI if (args.Player.Teleport((int)warp.X, (int)warp.Y)) args.Player.SendMessage("Warped to " + warpName, Color.Yellow); else - args.Player.SendMessage("Warp unavailable custom spawnpoint set (to unset sucide atleast once after bed is destroyed).", Color.Red); + args.Player.SendMessage("Warp unavailable - Spawn point set to Bed. To unset, destroy Bed and suicide at least once.", Color.Red); } else @@ -1479,4 +1479,4 @@ namespace TShockAPI #endregion Cheat Comamnds } -} \ No newline at end of file +} From d2c1082c5990266b776263b5e21675f6b87a9c21 Mon Sep 17 00:00:00 2001 From: Twitchy Date: Wed, 22 Jun 2011 19:51:10 +1200 Subject: [PATCH 11/24] Adds banned items. Delete groups.txt and run server once. --- TShockAPI/Commands.cs | 1 + TShockAPI/FileTools.cs | 2 + TShockAPI/ItemManager.cs | 76 +++++++++++++++++++++++++++++++++ TShockAPI/Resources.Designer.cs | 18 ++++++-- TShockAPI/Resources.resx | 20 ++------- TShockAPI/TShock.cs | 14 ++++++ TShockAPI/TShockAPI.csproj | 6 ++- TShockAPI/config/groups.txt | 3 +- TShockAPI/config/itembans.txt | 2 + 9 files changed, 119 insertions(+), 23 deletions(-) create mode 100644 TShockAPI/ItemManager.cs create mode 100644 TShockAPI/config/itembans.txt diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 2e329415..69504bf5 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1383,6 +1383,7 @@ namespace TShockAPI } var items = Tools.GetItemByIdOrName(args.Parameters[0]); + if (items.Count == 0) { args.Player.SendMessage("Invalid item type!", Color.Red); diff --git a/TShockAPI/FileTools.cs b/TShockAPI/FileTools.cs index a87f94af..3998b8b3 100644 --- a/TShockAPI/FileTools.cs +++ b/TShockAPI/FileTools.cs @@ -29,6 +29,7 @@ namespace TShockAPI public static readonly string WhitelistPath = Path.Combine(TShock.SavePath, "whitelist.txt"); public static readonly string GroupsPath = Path.Combine(TShock.SavePath, "groups.txt"); public static readonly string UsersPath = Path.Combine(TShock.SavePath, "users.txt"); + public static readonly string ItemBansPath = Path.Combine(TShock.SavePath, "itembans.txt"); public static readonly string ConfigPath = Path.Combine(TShock.SavePath, "config.json"); public static void CreateFile(string file) @@ -60,6 +61,7 @@ namespace TShockAPI CreateIfNot(WhitelistPath); CreateIfNot(GroupsPath, Resources.groups); CreateIfNot(UsersPath, Resources.users); + CreateIfNot(ItemBansPath, Resources.itembans); try { diff --git a/TShockAPI/ItemManager.cs b/TShockAPI/ItemManager.cs new file mode 100644 index 00000000..1a139ee0 --- /dev/null +++ b/TShockAPI/ItemManager.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using Terraria; + +namespace TShockAPI +{ + class ItemManager + { + public static List BannedItems = new List(); + + public static void LoadBans() + { + try + { + if (!File.Exists(FileTools.ItemBansPath)) + return; + + BannedItems.Clear(); + + foreach (var line in File.ReadAllLines(FileTools.ItemBansPath)) + { + int ID = -1; + if (Int32.TryParse(line, out ID)) + { + if (ID <= Main.item.Length) + { + var item = Tools.GetItemById(ID); + BannedItems.Add(new ItemBan(ID, item.name)); + Log.Info("Item: " + item.name + " is banned"); + } + else + { + Log.Warn("Invalid ID " + ID); + } + } + } + } + catch (Exception e) + { + Log.Error(e.ToString()); + } + } + + public static bool ItemIsBanned(string ID) + { + foreach (ItemBan item in BannedItems) + { + if (ID == item.Name) + return true; + } + return false; + } + } + + public class ItemBan + { + public int ID { get; set; } + + public string Name { get; set; } + + public ItemBan(int id, string name) + { + ID = id; + Name = name; + } + + public ItemBan() + { + ID = -1; + Name = string.Empty; + } + } +} diff --git a/TShockAPI/Resources.Designer.cs b/TShockAPI/Resources.Designer.cs index 24f858b6..69d5beef 100644 --- a/TShockAPI/Resources.Designer.cs +++ b/TShockAPI/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.225 +// Runtime Version:4.0.30319.1 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -71,9 +71,9 @@ namespace TShockAPI { ///#ALWAYS DECLARE A GROUP'S PARENT BEFORE YOU DECLARE THE GROUP /// ///#currently avaliable permissions: - ///#kick ban ignorecheatdetection - ///#maintenance cfg causeevents spawnboss tp - ///#spawnmob che [rest of string was truncated]";. + ///#reservedslot - reserved slot for player + ///#canwater - allow players to use water + ///#canlav [rest of string was truncated]";. /// internal static string groups { get { @@ -81,6 +81,16 @@ namespace TShockAPI { } } + /// + /// Looks up a localized string similar to #see https://github.com/TShock/TShock/wiki/Item-List for a list of groups + ///#List each banned item below this with spaces. + /// + internal static string itembans { + get { + return ResourceManager.GetString("itembans", resourceCulture); + } + } + /// /// Looks up a localized string similar to #format ///#ip group diff --git a/TShockAPI/Resources.resx b/TShockAPI/Resources.resx index e260f5f5..21b8b3ab 100644 --- a/TShockAPI/Resources.resx +++ b/TShockAPI/Resources.resx @@ -1,21 +1,4 @@  -