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.