From e24df84d9a484f6319678f34781a766649cf8786 Mon Sep 17 00:00:00 2001 From: Deathmax Date: Sat, 13 Aug 2011 20:04:00 +0800 Subject: [PATCH 1/4] Prevent invalid walls from hiding stuff. --- TShockAPI/ConfigFile.cs | 2 +- TShockAPI/GetDataHandlers.cs | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/TShockAPI/ConfigFile.cs b/TShockAPI/ConfigFile.cs index 1c9bccbe..2f99581d 100644 --- a/TShockAPI/ConfigFile.cs +++ b/TShockAPI/ConfigFile.cs @@ -95,7 +95,7 @@ namespace TShockAPI public string MediumcoreBanReason = "Death results in a ban"; public string MediumcoreKickReason = "Death results in a kick"; public string ProjectileAbuseReason = "Projectile abuse"; - + public string TileAbuseReason = "Tile abuse ({0})"; public bool EnableDNSHostResolution; diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index ab621e69..557cde13 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -335,6 +335,12 @@ namespace TShockAPI return true; } } + if (type == 3) + if (tiletype >= Main.maxWallTypes) + { + Tools.HandleGriefer(args.Player, string.Format(TShock.Config.TileAbuseReason, "Wall type out of bounds")); + return true; + } if (!args.Player.Group.HasPermission("editspawn") && !TShock.Regions.CanBuild(x, y, args.Player) && TShock.Regions.InArea(x, y)) { if ((DateTime.UtcNow - args.Player.LastTileChangeNotify).TotalMilliseconds > 1000) From 9119eab63918d6080ffd67c31aaf78f9c022af9f Mon Sep 17 00:00:00 2001 From: Deathmax Date: Sat, 13 Aug 2011 20:14:59 +0800 Subject: [PATCH 2/4] Reset world info to client if teleport fails. --- TShockAPI/TSPlayer.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 7ec18de9..6d553079 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -202,6 +202,8 @@ namespace TShockAPI //Try 300 if it does not work (Higher number - Longer load times - Less chance of error) if (!SendTileSquare(tilex, tiley, 150)) { + InitSpawn = true; + SendWorldInfo(Main.spawnTileX, Main.spawnTileY, false); SendMessage("Warning, teleport failed due to being too close to the edge of the map.", Color.Red); return false; } From 0392149afad327ca88b1b35ef8d51d03aaf4b2ac Mon Sep 17 00:00:00 2001 From: Deathmax Date: Sat, 13 Aug 2011 20:28:16 +0800 Subject: [PATCH 3/4] Added checks for invalid tile types --- TShockAPI/GetDataHandlers.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 557cde13..bde05a79 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -318,6 +318,11 @@ namespace TShockAPI int tileX = Math.Abs(x); int tileY = Math.Abs(y); + if (tiletype >= ((type == 1) ? Main.maxTileSets : Main.maxWallTypes)) + { + Tools.HandleGriefer(args.Player, string.Format(TShock.Config.TileAbuseReason, "Invalid tile type")); + return true; + } if (TShock.Config.RangeChecks && ((Math.Abs(plyX - tileX) > 32) || (Math.Abs(plyY - tileY) > 32))) { if (!(type == 1 && ((tiletype == 0 && args.Player.TPlayer.selectedItem == 114) || (tiletype == 53 && args.Player.TPlayer.selectedItem == 266)))) @@ -335,12 +340,6 @@ namespace TShockAPI return true; } } - if (type == 3) - if (tiletype >= Main.maxWallTypes) - { - Tools.HandleGriefer(args.Player, string.Format(TShock.Config.TileAbuseReason, "Wall type out of bounds")); - return true; - } if (!args.Player.Group.HasPermission("editspawn") && !TShock.Regions.CanBuild(x, y, args.Player) && TShock.Regions.InArea(x, y)) { if ((DateTime.UtcNow - args.Player.LastTileChangeNotify).TotalMilliseconds > 1000) From 2ed25e57a54ffc39cef26c2ae76071ebfa638796 Mon Sep 17 00:00:00 2001 From: Deathmax Date: Sat, 13 Aug 2011 21:08:38 +0800 Subject: [PATCH 4/4] Add range checks to chest openings and sign edits. --- TShockAPI/GetDataHandlers.cs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index bde05a79..f243de42 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -111,6 +111,8 @@ namespace TShockAPI {PacketTypes.LiquidSet, HandleLiquidSet}, {PacketTypes.PlayerSpawn, HandleSpawn}, {PacketTypes.SyncPlayers, HandleSync}, + {PacketTypes.ChestGetContents, HandleChest}, + {PacketTypes.SignNew, HandleSign} }; } @@ -571,7 +573,7 @@ namespace TShockAPI { Log.Debug(string.Format("Liquid(PlyXY:{0}_{1}, TileXY:{2}_{3}, Result:{4}_{5}, Amount:{6})", plyX, plyY, tileX, tileY, Math.Abs(plyX - tileX), Math.Abs(plyY - tileY), liquid)); - return Tools.HandleGriefer(args.Player, TShock.Config.LiquidAbuseReason); ; + return Tools.HandleGriefer(args.Player, TShock.Config.LiquidAbuseReason); } if (TShock.Config.SpawnProtection) @@ -709,5 +711,28 @@ namespace TShockAPI return false; } + + private static bool HandleChest(GetDataHandlerArgs args) + { + var x = args.Data.ReadInt32(); + var y = args.Data.ReadInt32(); + if (TShock.Config.RangeChecks && ((Math.Abs(args.Player.TileX - x) > 32) || (Math.Abs(args.Player.TileY - y) > 32))) + { + return Tools.HandleGriefer(args.Player, TShock.Config.RangeCheckBanReason); + } + return false; + } + + private static bool HandleSign(GetDataHandlerArgs args) + { + var id = args.Data.ReadInt16(); + var x = args.Data.ReadInt32(); + var y = args.Data.ReadInt32(); + if (TShock.Config.RangeChecks && ((Math.Abs(args.Player.TileX - x) > 32) || (Math.Abs(args.Player.TileY - y) > 32))) + { + return Tools.HandleGriefer(args.Player, TShock.Config.RangeCheckBanReason); + } + return false; + } } }