diff --git a/Content.Client/GameObjects/Components/DoAfterComponent.cs b/Content.Client/GameObjects/Components/DoAfterComponent.cs index 1dd735490d..0e5940dccd 100644 --- a/Content.Client/GameObjects/Components/DoAfterComponent.cs +++ b/Content.Client/GameObjects/Components/DoAfterComponent.cs @@ -78,11 +78,38 @@ namespace Content.Client.GameObjects.Components base.HandleComponentState(curState, nextState); if (!(curState is DoAfterComponentState state)) return; + + var toRemove = new List(); - _doAfters.Clear(); + foreach (var (id, doAfter) in _doAfters) + { + var found = false; + + foreach (var clientdoAfter in state.DoAfters) + { + if (clientdoAfter.ID == id) + { + found = true; + break; + } + } + + if (!found) + { + toRemove.Add(doAfter); + } + } + + foreach (var doAfter in toRemove) + { + Remove(doAfter); + } foreach (var doAfter in state.DoAfters) { + if (_doAfters.ContainsKey(doAfter.ID)) + continue; + _doAfters.Add(doAfter.ID, doAfter); } diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs index 686714b14f..42583cb010 100644 --- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs @@ -75,8 +75,8 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { if (comp.Gui != null) comp.Gui.FirstDraw = true; - - return; + + continue; } var range = (comp.Owner.Transform.WorldPosition - _attachedEntity.Transform.WorldPosition).Length + 0.01f; diff --git a/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs b/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs index a94654965b..864d4e58d4 100644 --- a/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs +++ b/Content.Server/GameObjects/Components/ActionBlocking/HandcuffComponent.cs @@ -110,7 +110,6 @@ namespace Content.Server.GameObjects.Components.ActionBlocking // Non-exposed data fields private bool _isBroken = false; private float _interactRange; - private DoAfterSystem _doAfterSystem; private AudioSystem _audioSystem; public override void Initialize() @@ -118,7 +117,6 @@ namespace Content.Server.GameObjects.Components.ActionBlocking base.Initialize(); _audioSystem = EntitySystem.Get(); - _doAfterSystem = EntitySystem.Get(); _interactRange = SharedInteractionSystem.InteractionRange / 2; } @@ -213,7 +211,7 @@ namespace Content.Server.GameObjects.Components.ActionBlocking NeedHand = true }; - var result = await _doAfterSystem.DoAfter(doAfterEventArgs); + var result = await EntitySystem.Get().DoAfter(doAfterEventArgs); if (result != DoAfterStatus.Cancelled) {