diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7286ea27..88ba267a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -60,6 +60,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
* Added `TSPlayer.CheckIgnores()` and removed `TShock.CheckIgnores(TSPlayer)`. (@hakusaro)
* Hooks inside TShock can now be registered with their `Register` method and can be prioritized according to the TShock HandlerList system. (@hakusaro)
* Fix message requiring login not using the command specifier set in the config file. (@hakusaro)
+* Move `TShock.CheckRangePermission()` to `TSPlayer.IsInRange` which **returns the opposite** of what the previous method did (see updated docs). (@hakusaro)
## TShock 4.3.25
* Fixed a critical exploit in the Terraria protocol that could cause massive unpreventable world corruption as well as a number of other problems. Thanks to @bartico6 for reporting. Fixed by the efforts of @QuiCM, @hakusaro, and tips in the right directioon from @bartico6.
diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs
index 8e81d802..d4727962 100644
--- a/TShockAPI/Bouncer.cs
+++ b/TShockAPI/Bouncer.cs
@@ -83,7 +83,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, args.X, args.Y))
+ if (!args.Player.IsInRange(args.X, args.Y))
{
NetMessage.SendData((int)PacketTypes.UpdateTileEntity, -1, -1, NetworkText.Empty, args.ItemFrame.ID, 0, 1);
args.Handled = true;
@@ -138,7 +138,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, args.X, args.Y))
+ if (!args.Player.IsInRange(args.X, args.Y))
{
args.Handled = true;
return;
@@ -253,7 +253,7 @@ namespace TShockAPI
}
if (TShock.Config.RangeChecks &&
- TShock.CheckRangePermission(args.Player, (int)(Main.npc[id].position.X / 16f), (int)(Main.npc[id].position.Y / 16f), 128))
+ !args.Player.IsInRange((int)(Main.npc[id].position.X / 16f), (int)(Main.npc[id].position.Y / 16f), 128))
{
args.Player.SendData(PacketTypes.NpcUpdate, "", id);
args.Handled = true;
@@ -319,7 +319,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, TShock.Players[id].TileX, TShock.Players[id].TileY, 100))
+ if (!args.Player.IsInRange(TShock.Players[id].TileX, TShock.Players[id].TileY, 100))
{
args.Player.SendData(PacketTypes.PlayerHp, "", id);
args.Player.SendData(PacketTypes.PlayerUpdate, "", id);
@@ -373,7 +373,7 @@ namespace TShockAPI
// client side (but only if it passed the range check) (i.e., return false)
if (type == 0)
{
- if (TShock.CheckRangePermission(args.Player, (int)(Main.item[id].position.X / 16f), (int)(Main.item[id].position.Y / 16f)))
+ if (!args.Player.IsInRange((int)(Main.item[id].position.X / 16f), (int)(Main.item[id].position.Y / 16f)))
{
// Causes item duplications. Will be re added if necessary
//args.Player.SendData(PacketTypes.ItemDrop, "", id);
@@ -385,7 +385,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, (int)(pos.X / 16f), (int)(pos.Y / 16f)))
+ if (!args.Player.IsInRange((int)(pos.X / 16f), (int)(pos.Y / 16f)))
{
args.Player.SendData(PacketTypes.ItemDrop, "", id);
args.Handled = true;
@@ -465,7 +465,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, TShock.Players[id].TileX, TShock.Players[id].TileY, 50))
+ if (!args.Player.IsInRange(TShock.Players[id].TileX, TShock.Players[id].TileY, 50))
{
args.Player.SendData(PacketTypes.PlayerAddBuff, "", id);
args.Handled = true;
@@ -516,7 +516,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, Main.chest[id].x, Main.chest[id].y))
+ if (!args.Player.IsInRange(Main.chest[id].x, Main.chest[id].y))
{
args.Handled = true;
return;
@@ -544,7 +544,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, x, y))
+ if (!args.Player.IsInRange(x, y))
{
args.Player.SendData(PacketTypes.UpdateNPCHome, "", id, Main.npc[id].homeTileX, Main.npc[id].homeTileY,
Convert.ToByte(Main.npc[id].homeless));
@@ -564,7 +564,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, args.X, args.Y))
+ if (!args.Player.IsInRange(args.X, args.Y))
{
args.Handled = true;
return;
@@ -632,7 +632,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, tileX, tileY))
+ if (!args.Player.IsInRange(tileX, tileY))
{
args.Player.SendTileSquare(tileX, tileY, 3);
args.Handled = true;
@@ -765,7 +765,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, tileX, tileY, 16))
+ if (!args.Player.IsInRange(tileX, tileY, 16))
{
args.Player.SendTileSquare(tileX, tileY, 1);
args.Handled = true;
@@ -1160,7 +1160,7 @@ namespace TShockAPI
|| type != TileID.SilkRope
|| type != TileID.VineRope
|| type != TileID.WebRope)
- && TShock.CheckRangePermission(args.Player, x, y))
+ && !args.Player.IsInRange(x, y))
{
args.Player.SendTileSquare(x, y, 4);
args.Handled = true;
@@ -1484,7 +1484,7 @@ namespace TShockAPI
return;
}
- if (TShock.CheckRangePermission(args.Player, tileX, tileY))
+ if (!args.Player.IsInRange(tileX, tileY))
{
if (action == EditAction.PlaceTile && (editData == TileID.Rope || editData == TileID.SilkRope || editData == TileID.VineRope || editData == TileID.WebRope))
{
@@ -1661,7 +1661,7 @@ namespace TShockAPI
var tile = Main.tile[realx, realy];
var newtile = tiles[x, y];
if (TShock.CheckTilePermission(args.Player, realx, realy) ||
- TShock.CheckRangePermission(args.Player, realx, realy))
+ !args.Player.IsInRange(realx, realy))
{
continue;
}
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index a8524597..310a3b64 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -2578,7 +2578,7 @@ namespace TShockAPI
return true;
}
- if (TShock.CheckRangePermission(args.Player, x, y))
+ if (!args.Player.IsInRange(x, y))
{
args.Player.SendData(PacketTypes.SignNew, "", id);
return true;
@@ -2898,7 +2898,7 @@ namespace TShockAPI
if (args.Player.IsBouncerThrottled() ||
TShock.CheckTilePermission(args.Player, x, y, true) ||
- TShock.CheckRangePermission(args.Player, x, y))
+ !args.Player.IsInRange(x, y))
{
args.Player.SendData(PacketTypes.PaintTile, "", x, y, Main.tile[x, y].color());
return true;
@@ -2942,7 +2942,7 @@ namespace TShockAPI
if (args.Player.IsBouncerThrottled() ||
TShock.CheckTilePermission(args.Player, x, y, true) ||
- TShock.CheckRangePermission(args.Player, x, y))
+ !args.Player.IsInRange(x, y))
{
args.Player.SendData(PacketTypes.PaintWall, "", x, y, Main.tile[x, y].wallColor());
return true;
@@ -3293,7 +3293,7 @@ namespace TShockAPI
return true;
}
- if (TShock.CheckRangePermission(args.Player, (int)position.X, (int)position.Y))
+ if (!args.Player.IsInRange((int)position.X, (int)position.Y))
{
return true;
}
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index 69181389..8071ea37 100644
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -321,6 +321,20 @@ namespace TShockAPI
public bool SilentJoinInProgress;
+ /// Checks if a player has permission to modify a tile dependent on range checks.
+ /// The x coordinate of the tile.
+ /// The y coordinate of the tile.
+ /// The range to check for.
+ /// True if the player is in range of a tile or if range checks are off. False if not.
+ public bool IsInRange(int x, int y, int range = 32)
+ {
+ if (TShock.Config.RangeChecks && ((Math.Abs(TileX - x) > range) || (Math.Abs(TileY - y) > range)))
+ {
+ return false;
+ }
+ return true;
+ }
+
///
/// A list of points where ice tiles have been placed.
///
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index 44c6b9f1..8e2ea548 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -585,7 +585,7 @@ namespace TShockAPI
return;
}
- if (CheckRangePermission(tsplr, args.Chest.x, args.Chest.y))
+ if (!tsplr.IsInRange(args.Chest.x, args.Chest.y))
{
args.Handled = true;
return;
@@ -1757,24 +1757,6 @@ namespace TShockAPI
e.Handled = true;
}
-
-
-
- /// CheckRangePermission - Checks if a player has permission to modify a tile dependent on range checks.
- /// player - The TSPlayer object.
- /// x - The x coordinate of the tile.
- /// y - The y coordinate of the tile.
- /// range - The range to check for.
- /// bool - True if the player should not be able to place the tile. False if they can, or if range checks are off.
- public static bool CheckRangePermission(TSPlayer player, int x, int y, int range = 32)
- {
- if (Config.RangeChecks && ((Math.Abs(player.TileX - x) > range) || (Math.Abs(player.TileY - y) > range)))
- {
- return true;
- }
- return false;
- }
-
/// CheckTilePermission - Checks to see if a player has permission to modify a tile in general.
/// player - The TSPlayer object.
/// tileX - The x coordinate of the tile.