From 4d98dd4d24f4542d0d0d5845b85ddb5fe4dfbba7 Mon Sep 17 00:00:00 2001 From: ProfessorXZ Date: Sun, 14 Aug 2016 23:10:24 +0200 Subject: [PATCH 1/4] Explosives are no longer blocked by range checks --- TShockAPI/GetDataHandlers.cs | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 27cee024..5b4fb7c6 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2030,7 +2030,6 @@ namespace TShockAPI // If they aren't selecting a hammer, they could be hacking. if (selectedItem.hammer == 0 && !ItemID.Sets.Explosives[selectedItem.netID] && args.Player.RecentFuse == 0 && selectedItem.createWall == 0) { - args.Player.SendTileSquare(tileX, tileY, 1); return true; } @@ -2149,13 +2148,30 @@ namespace TShockAPI } // Ignore rope placement range - if ((editData != TileID.Rope - && editData != TileID.SilkRope - && editData != TileID.VineRope - && editData != TileID.WebRope - && action == EditAction.PlaceTile) - && TShock.CheckRangePermission(args.Player, tileX, tileY)) + //if ((editData != TileID.Rope + // && editData != TileID.SilkRope + // && editData != TileID.VineRope + // && editData != TileID.WebRope + // && action == EditAction.PlaceTile) + // && TShock.CheckRangePermission(args.Player, tileX, tileY)) + //{ + // args.Player.SendTileSquare(tileX, tileY, 4); + // return true; + //} + if (TShock.CheckRangePermission(args.Player, tileX, tileY)) { + if (action == EditAction.PlaceTile && (editData == TileID.Rope || editData == TileID.SilkRope || editData == TileID.VineRope || editData == TileID.WebRope)) + { + args.Player.SendTileSquare(tileX, tileY, 4); + return false; + } + + if ((action == EditAction.KillTile || action == EditAction.KillWall) && ItemID.Sets.Explosives[selectedItem.netID] && args.Player.RecentFuse == 0) + { + args.Player.SendTileSquare(tileX, tileY, 4); + return false; + } + args.Player.SendTileSquare(tileX, tileY, 4); return true; } From 30fcf83fa1f9260b6585291244a98fbc2f8e031a Mon Sep 17 00:00:00 2001 From: ProfessorXZ Date: Sun, 14 Aug 2016 23:21:17 +0200 Subject: [PATCH 2/4] Clients are no longer able to bypass tile checks --- TShockAPI/GetDataHandlers.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 5b4fb7c6..a3dd6f28 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2048,6 +2048,13 @@ namespace TShockAPI return true; } + // If they aren't selecting the item which creates the correct tile or wall, they're hacking. + if (editData != (action == EditAction.PlaceTile ? selectedItem.createTile : selectedItem.createWall)) + { + args.Player.SendTileSquare(tileX, tileY, 4); + return true; + } + // If they aren't selecting the item which creates the tile or wall, they're hacking. if ((editData != TileID.MagicalIceBlock && editData != TileID.Rope From c305b3616867813f4b8f05b812ccca611d787e8e Mon Sep 17 00:00:00 2001 From: ProfessorXZ Date: Mon, 15 Aug 2016 00:13:55 +0200 Subject: [PATCH 3/4] Fix explosives range checks --- CHANGELOG.md | 2 ++ TShockAPI/GetDataHandlers.cs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 329ac726..e31dac52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin * The Drill Containment Unit breaks blocks properly now (@ProfessorXZ) * Fixed Expert mode coin duplication (@ProfessorXZ) * Players are no longer able to place liquids using LoadNetModule packet (@ProfessorXZ) +* Explosives are no longer blocked by range checks (@ProfessorXZ) +* Players can no longer bypass tile checks by using the Tile packet (@ProfessorXZ) * Fixed a bug where players couldn't hammer a Junction Box without "allowclientsideworldedit" permission (@Patrikkk) ## TShock 4.3.17 diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index a3dd6f28..cef3ff80 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2173,7 +2173,7 @@ namespace TShockAPI return false; } - if ((action == EditAction.KillTile || action == EditAction.KillWall) && ItemID.Sets.Explosives[selectedItem.netID] && args.Player.RecentFuse == 0) + if (action == EditAction.KillTile || action == EditAction.KillWall && ItemID.Sets.Explosives[selectedItem.netID] && args.Player.RecentFuse == 0) { args.Player.SendTileSquare(tileX, tileY, 4); return false; From f2cc3ce89f30d7cf8867a68b4eba48dde84ee9c4 Mon Sep 17 00:00:00 2001 From: ProfessorXZ Date: Wed, 17 Aug 2016 21:45:44 +0200 Subject: [PATCH 4/4] Remove unnecessary code from HandleTile() --- TShockAPI/GetDataHandlers.cs | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index cef3ff80..9280dbe9 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -2154,28 +2154,15 @@ namespace TShockAPI return true; } - // Ignore rope placement range - //if ((editData != TileID.Rope - // && editData != TileID.SilkRope - // && editData != TileID.VineRope - // && editData != TileID.WebRope - // && action == EditAction.PlaceTile) - // && TShock.CheckRangePermission(args.Player, tileX, tileY)) - //{ - // args.Player.SendTileSquare(tileX, tileY, 4); - // return true; - //} if (TShock.CheckRangePermission(args.Player, tileX, tileY)) { if (action == EditAction.PlaceTile && (editData == TileID.Rope || editData == TileID.SilkRope || editData == TileID.VineRope || editData == TileID.WebRope)) { - args.Player.SendTileSquare(tileX, tileY, 4); return false; } if (action == EditAction.KillTile || action == EditAction.KillWall && ItemID.Sets.Explosives[selectedItem.netID] && args.Player.RecentFuse == 0) { - args.Player.SendTileSquare(tileX, tileY, 4); return false; } @@ -4036,7 +4023,7 @@ namespace TShockAPI /// /// For use with a ToggleGemLock event /// - public class GemLockToggleEventArgs : HandledEventArgs + public class GemLockToggleEventArgs : HandledEventArgs { /// /// X Location @@ -4057,12 +4044,12 @@ namespace TShockAPI /// public static HandlerList GemLockToggle; - private static bool OnGemLockToggle(Int32 x, Int32 y, bool on) + private static bool OnGemLockToggle(Int32 x, Int32 y, bool on) { if (GemLockToggle == null) return false; - var args = new GemLockToggleEventArgs + var args = new GemLockToggleEventArgs { X = x, Y = y, @@ -4078,12 +4065,12 @@ namespace TShockAPI var y = (int)args.Data.ReadInt16(); var on = args.Data.ReadBoolean(); - if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY) + if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY) { return true; } - if (OnGemLockToggle(x, y, on)) + if (OnGemLockToggle(x, y, on)) { return true; } @@ -4093,17 +4080,17 @@ namespace TShockAPI return false; } - if (!TShock.Utils.TilePlacementValid(x, y) || (args.Player.Dead && TShock.Config.PreventDeadModification)) + if (!TShock.Utils.TilePlacementValid(x, y) || (args.Player.Dead && TShock.Config.PreventDeadModification)) { return true; } - if (TShock.CheckIgnores(args.Player)) + if (TShock.CheckIgnores(args.Player)) { return true; } - if (TShock.CheckTilePermission(args.Player, x, y)) + if (TShock.CheckTilePermission(args.Player, x, y)) { return true; }