From 34d2330604a8ba5906ad1d5d4fd87f3c942523cd Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Thu, 11 Jan 2024 11:08:42 +1100 Subject: [PATCH] Throttle MagicMirror do_afters (#23867) Doesn't fix the gross network spam but that's for later. --- .../MagicMirror/MagicMirrorComponent.cs | 4 +++ .../MagicMirror/MagicMirrorSystem.cs | 25 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Content.Server/MagicMirror/MagicMirrorComponent.cs b/Content.Server/MagicMirror/MagicMirrorComponent.cs index a9e72f577a..624a381ca5 100644 --- a/Content.Server/MagicMirror/MagicMirrorComponent.cs +++ b/Content.Server/MagicMirror/MagicMirrorComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.DoAfter; using Content.Shared.Humanoid; using Robust.Shared.Audio; @@ -9,6 +10,9 @@ namespace Content.Server.MagicMirror; [RegisterComponent] public sealed partial class MagicMirrorComponent : Component { + [DataField] + public DoAfterId? DoAfter; + /// /// Magic mirror target, used for validating UI messages. /// diff --git a/Content.Server/MagicMirror/MagicMirrorSystem.cs b/Content.Server/MagicMirror/MagicMirrorSystem.cs index 6b3fe98d78..c2d6f0fda2 100644 --- a/Content.Server/MagicMirror/MagicMirrorSystem.cs +++ b/Content.Server/MagicMirror/MagicMirrorSystem.cs @@ -78,6 +78,9 @@ public sealed class MagicMirrorSystem : EntitySystem if (component.Target is not { } target || message.Session.AttachedEntity is not { } user) return; + _doAfterSystem.Cancel(component.DoAfter); + component.DoAfter = null; + var doAfter = new MagicMirrorSelectDoAfterEvent() { Category = message.Category, @@ -94,8 +97,9 @@ public sealed class MagicMirrorSystem : EntitySystem BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }); + }, out var doAfterId); + component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); } @@ -131,6 +135,9 @@ public sealed class MagicMirrorSystem : EntitySystem if (component.Target is not { } target || message.Session.AttachedEntity is not { } user) return; + _doAfterSystem.Cancel(component.DoAfter); + component.DoAfter = null; + var doAfter = new MagicMirrorChangeColorDoAfterEvent() { Category = message.Category, @@ -146,7 +153,9 @@ public sealed class MagicMirrorSystem : EntitySystem BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }); + }, out var doAfterId); + + component.DoAfter = doAfterId; } private void OnChangeColorDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorChangeColorDoAfterEvent args) { @@ -181,6 +190,9 @@ public sealed class MagicMirrorSystem : EntitySystem if (component.Target is not { } target || message.Session.AttachedEntity is not { } user) return; + _doAfterSystem.Cancel(component.DoAfter); + component.DoAfter = null; + var doAfter = new MagicMirrorRemoveSlotDoAfterEvent() { Category = message.Category, @@ -196,8 +208,9 @@ public sealed class MagicMirrorSystem : EntitySystem BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }); + }, out var doAfterId); + component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); } @@ -236,6 +249,9 @@ public sealed class MagicMirrorSystem : EntitySystem if (message.Session.AttachedEntity == null) return; + _doAfterSystem.Cancel(component.DoAfter); + component.DoAfter = null; + var doAfter = new MagicMirrorAddSlotDoAfterEvent() { Category = message.Category, @@ -249,8 +265,9 @@ public sealed class MagicMirrorSystem : EntitySystem BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }); + }, out var doAfterId); + component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); } private void OnAddSlotDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorAddSlotDoAfterEvent args) -- 2.51.2