diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs
index b0f110ab..57b4554e 100644
--- a/TShockAPI/Bouncer.cs
+++ b/TShockAPI/Bouncer.cs
@@ -203,7 +203,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.SendData(PacketTypes.PlayerAnimation, "", args.Player.Index);
args.Handled = true;
@@ -260,7 +260,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.SendData(PacketTypes.NpcUpdate, "", id);
args.Handled = true;
@@ -327,7 +327,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.SendData(PacketTypes.PlayerHp, "", id);
args.Player.SendData(PacketTypes.PlayerUpdate, "", id);
@@ -470,7 +470,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.SendData(PacketTypes.PlayerAddBuff, "", id);
args.Handled = true;
@@ -770,7 +770,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.SendTileSquare(tileX, tileY, 1);
args.Handled = true;
@@ -796,7 +796,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.RemoveProjectile(args.ProjectileIdentity, args.ProjectileOwner);
args.Handled = true;
@@ -1021,7 +1021,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.RemoveProjectile(ident, owner);
args.Handled = true;
@@ -1516,7 +1516,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.SendTileSquare(tileX, tileY, 4);
args.Handled = true;
@@ -1583,7 +1583,7 @@ namespace TShockAPI
return;
}
- if (args.Player.CheckIgnores() || (DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.CheckIgnores() || args.Player.IsBouncerThrottled())
{
args.Handled = true;
return;
@@ -1617,7 +1617,7 @@ namespace TShockAPI
return;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
args.Player.SendTileSquare(tileX, tileY, size);
args.Handled = true;
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index 82ef08c4..d21c0e36 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -2761,7 +2761,7 @@ namespace TShockAPI
private static bool HandleSpawnBoss(GetDataHandlerArgs args)
{
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
return true;
}
@@ -2896,7 +2896,7 @@ namespace TShockAPI
return true;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000 ||
+ if (args.Player.IsBouncerThrottled() ||
TShock.CheckTilePermission(args.Player, x, y, true) ||
TShock.CheckRangePermission(args.Player, x, y))
{
@@ -2940,7 +2940,7 @@ namespace TShockAPI
return true;
}
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000 ||
+ if (args.Player.IsBouncerThrottled() ||
TShock.CheckTilePermission(args.Player, x, y, true) ||
TShock.CheckRangePermission(args.Player, x, y))
{
@@ -3320,7 +3320,7 @@ namespace TShockAPI
private static bool HandleOldOnesArmy(GetDataHandlerArgs args)
{
- if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000)
+ if (args.Player.IsBouncerThrottled())
{
return true;
}
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index 5c732457..aae8ace8 100644
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -285,6 +285,13 @@ namespace TShockAPI
public bool IgnoreActionsForClearingTrashCan;
+ /// Checks to see if active throttling is happening on events by Bouncer. Rejects repeated events by malicious clients in a short window.
+ /// If the player is currently being throttled by Bouncer, or not.
+ public bool IsBouncerThrottled()
+ {
+ return (DateTime.UtcNow - LastThreat).TotalMilliseconds < 5000;
+ }
+
/// CheckIgnores - Checks a players ignores...?
/// player - The TSPlayer object.
/// bool - True if any ignore is not none, false, or login state differs from the required state.