From 1e9532a3162179aa9664502421cd4cdd7ed2fbd4 Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Sat, 16 Dec 2017 01:14:39 -0700 Subject: [PATCH] Create TSPlayer.IsBouncerThrottled() to avoid code copypasta --- TShockAPI/Bouncer.cs | 20 ++++++++++---------- TShockAPI/GetDataHandlers.cs | 8 ++++---- TShockAPI/TSPlayer.cs | 7 +++++++ 3 files changed, 21 insertions(+), 14 deletions(-) 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.