From 4f66e660d48d99f7251a85648645b62b6acf5ed8 Mon Sep 17 00:00:00 2001 From: Patrikkk Date: Tue, 9 Jun 2020 00:01:57 +0200 Subject: [PATCH 1/3] Bouncer OnTileEdit - Add tile replace action to tileban check. Tiny change, but a pressing matter. My smallest PR ever? hahah. --- CHANGELOG.md | 1 + TShockAPI/Bouncer.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9883b79..c73fa5b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Installed new sprinklers! +* Fix issue where players could replace tiles with banned tiles without permission. (@Patrikkk) ## TShock 4.4.0 (Pre-release 11) * New permission `tshock.tp.pylon` to enable teleporting via Teleportation Pylons (@QuiCM) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 117c8aac..3a0fa623 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -259,7 +259,7 @@ namespace TShockAPI int lastKilledProj = args.Player.LastKilledProjectile; ITile tile = Main.tile[tileX, tileY]; - if (action == EditAction.PlaceTile) + if (action == EditAction.PlaceTile || action == EditAction.ReplaceTile) { if (TShock.TileBans.TileIsBanned(editData, args.Player)) { From 0d0641c8c0ddbb556ef6c810aea73250070ea93a Mon Sep 17 00:00:00 2001 From: Patrikkk Date: Tue, 9 Jun 2020 00:23:23 +0200 Subject: [PATCH 2/3] Bouncer OnTileEdit - Adding more checks on ReplaceTile action. --- TShockAPI/Bouncer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 3a0fa623..934793e9 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -358,7 +358,7 @@ namespace TShockAPI } } - if (editData >= (action == EditAction.PlaceTile ? Main.maxTileSets : Main.maxWallTypes)) + if (editData >= ((action == EditAction.PlaceTile || action == EditAction.ReplaceTile) ? Main.maxTileSets : Main.maxWallTypes)) { TShock.Log.ConsoleDebug("Bouncer / OnTileEdit rejected from (ms3) {0} {1} {2}", args.Player.Name, action, editData); args.Player.SendTileSquare(tileX, tileY, 4); @@ -536,7 +536,7 @@ namespace TShockAPI return; } - if ((action == EditAction.PlaceTile || action == EditAction.PlaceWall) && !args.Player.HasPermission(Permissions.ignoreplacetiledetection)) + if ((action == EditAction.PlaceTile || action == EditAction.ReplaceTile || action == EditAction.PlaceWall) && !args.Player.HasPermission(Permissions.ignoreplacetiledetection)) { args.Player.TilePlaceThreshold++; var coords = new Vector2(tileX, tileY); From 6c22cfd57c1d3aac6348f84f5d63017b244b335d Mon Sep 17 00:00:00 2001 From: Patrikkk Date: Tue, 9 Jun 2020 00:39:04 +0200 Subject: [PATCH 3/3] Bouncer OnTileData - Add more checks on ReplaceTile/ReplaceWall --- CHANGELOG.md | 6 +++++- TShockAPI/Bouncer.cs | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c73fa5b3..947c640c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,11 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Installed new sprinklers! -* Fix issue where players could replace tiles with banned tiles without permission. (@Patrikkk) +* Fix multiple holes in Bouncer OnTileData. (@Patrikkk, @hakusaro) + * Issue where players could replace tiles with banned tiles without permission. + * Including replace action in TilePlace threshold incrementation, so players cannot bypass the threshold while replacing tiles/walls. + * Including check for maxTileSets when player is replacing tiles, so players cannot send invalid tile data through the replace tile action. + * Including a check for ReplaceWall when the tile is a Breakable/CutTile. ## TShock 4.4.0 (Pre-release 11) * New permission `tshock.tp.pylon` to enable teleporting via Teleportation Pylons (@QuiCM) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 934793e9..2de3b614 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -330,7 +330,7 @@ namespace TShockAPI return; } } - else if (action == EditAction.PlaceTile || action == EditAction.PlaceWall) + else if (action == EditAction.PlaceTile || action == EditAction.ReplaceTile || action == EditAction.PlaceWall || action == EditAction.ReplaceWall) { if ((action == EditAction.PlaceTile && TShock.Config.PreventInvalidPlaceStyle) && (MaxPlaceStyles.ContainsKey(editData) && style > MaxPlaceStyles[editData]) && @@ -437,7 +437,7 @@ namespace TShockAPI } if (TShock.Config.AllowCutTilesAndBreakables && Main.tileCut[tile.type]) { - if (action == EditAction.KillWall) + if (action == EditAction.KillWall || action == EditAction.ReplaceWall) { TShock.Log.ConsoleDebug("Bouncer / OnTileEdit rejected from sts allow cut from {0} {1} {2}", args.Player.Name, action, editData); args.Player.SendTileSquare(tileX, tileY, 1); @@ -536,7 +536,7 @@ namespace TShockAPI return; } - if ((action == EditAction.PlaceTile || action == EditAction.ReplaceTile || action == EditAction.PlaceWall) && !args.Player.HasPermission(Permissions.ignoreplacetiledetection)) + if ((action == EditAction.PlaceTile || action == EditAction.ReplaceTile || action == EditAction.PlaceWall || action == EditAction.ReplaceWall) && !args.Player.HasPermission(Permissions.ignoreplacetiledetection)) { args.Player.TilePlaceThreshold++; var coords = new Vector2(tileX, tileY); @@ -545,7 +545,7 @@ namespace TShockAPI args.Player.TilesCreated.Add(coords, Main.tile[tileX, tileY]); } - if ((action == EditAction.KillTile || action == EditAction.KillTileNoItem || action == EditAction.KillWall) && Main.tileSolid[Main.tile[tileX, tileY].type] && + if ((action == EditAction.KillTile || action == EditAction.KillTileNoItem || action == EditAction.ReplaceTile || action == EditAction.KillWall || action == EditAction.ReplaceWall) && Main.tileSolid[Main.tile[tileX, tileY].type] && !args.Player.HasPermission(Permissions.ignorekilltiledetection)) { args.Player.TileKillThreshold++;