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; }