From 2c39656c9e5bebd888cc2af39a5e2425fc706574 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 9 Oct 2020 22:10:21 +1100 Subject: [PATCH] Stop welder from being spammable on doors (#2196) Co-authored-by: Metal Gear Sloth --- .../Components/Doors/ServerDoorComponent.cs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs index 3c506d3bbf..e9597ace7e 100644 --- a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs @@ -89,6 +89,11 @@ namespace Content.Server.GameObjects.Components.Doors private bool _isWeldedShut; private bool _canWeldShut = true; + + /// + /// Whether something is currently using a welder on this so DoAfter isn't spammed. + /// + private bool _beingWelded = false; [ViewVariables(VVAccess.ReadWrite)] private bool _canCrush = true; @@ -467,14 +472,29 @@ namespace Content.Server.GameObjects.Components.Doors public virtual async Task InteractUsing(InteractUsingEventArgs eventArgs) { if (!_canWeldShut) + { + _beingWelded = false; return false; + } if (!eventArgs.Using.TryGetComponent(out WelderComponent? tool)) + { + _beingWelded = false; return false; + } + + if (_beingWelded) + return false; + + _beingWelded = true; if (!await tool.UseTool(eventArgs.User, Owner, 3f, ToolQuality.Welding, 3f, () => _canWeldShut)) + { + _beingWelded = false; return false; - + } + + _beingWelded = false; IsWeldedShut ^= true; return true; }