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 2fdb3101..6332eecc 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} {PacketTypes.PlayerSlot, HandlePlayerSlot}, }; } @@ -329,6 +331,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)))) @@ -577,7 +584,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) @@ -715,5 +722,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; + } } } diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index e2b82c31..e717c063 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; }