Throttle MagicMirror do_afters (#23867)
Doesn't fix the gross network spam but that's for later.
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using Content.Shared.DoAfter;
|
||||||
using Content.Shared.Humanoid;
|
using Content.Shared.Humanoid;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
|
|
||||||
@@ -9,6 +10,9 @@ namespace Content.Server.MagicMirror;
|
|||||||
[RegisterComponent]
|
[RegisterComponent]
|
||||||
public sealed partial class MagicMirrorComponent : Component
|
public sealed partial class MagicMirrorComponent : Component
|
||||||
{
|
{
|
||||||
|
[DataField]
|
||||||
|
public DoAfterId? DoAfter;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Magic mirror target, used for validating UI messages.
|
/// Magic mirror target, used for validating UI messages.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -78,6 +78,9 @@ public sealed class MagicMirrorSystem : EntitySystem
|
|||||||
if (component.Target is not { } target || message.Session.AttachedEntity is not { } user)
|
if (component.Target is not { } target || message.Session.AttachedEntity is not { } user)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
_doAfterSystem.Cancel(component.DoAfter);
|
||||||
|
component.DoAfter = null;
|
||||||
|
|
||||||
var doAfter = new MagicMirrorSelectDoAfterEvent()
|
var doAfter = new MagicMirrorSelectDoAfterEvent()
|
||||||
{
|
{
|
||||||
Category = message.Category,
|
Category = message.Category,
|
||||||
@@ -94,8 +97,9 @@ public sealed class MagicMirrorSystem : EntitySystem
|
|||||||
BreakOnUserMove = true,
|
BreakOnUserMove = true,
|
||||||
BreakOnWeightlessMove = false,
|
BreakOnWeightlessMove = false,
|
||||||
NeedHand = true
|
NeedHand = true
|
||||||
});
|
}, out var doAfterId);
|
||||||
|
|
||||||
|
component.DoAfter = doAfterId;
|
||||||
_audio.PlayPvs(component.ChangeHairSound, uid);
|
_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)
|
if (component.Target is not { } target || message.Session.AttachedEntity is not { } user)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
_doAfterSystem.Cancel(component.DoAfter);
|
||||||
|
component.DoAfter = null;
|
||||||
|
|
||||||
var doAfter = new MagicMirrorChangeColorDoAfterEvent()
|
var doAfter = new MagicMirrorChangeColorDoAfterEvent()
|
||||||
{
|
{
|
||||||
Category = message.Category,
|
Category = message.Category,
|
||||||
@@ -146,7 +153,9 @@ public sealed class MagicMirrorSystem : EntitySystem
|
|||||||
BreakOnUserMove = true,
|
BreakOnUserMove = true,
|
||||||
BreakOnWeightlessMove = false,
|
BreakOnWeightlessMove = false,
|
||||||
NeedHand = true
|
NeedHand = true
|
||||||
});
|
}, out var doAfterId);
|
||||||
|
|
||||||
|
component.DoAfter = doAfterId;
|
||||||
}
|
}
|
||||||
private void OnChangeColorDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorChangeColorDoAfterEvent args)
|
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)
|
if (component.Target is not { } target || message.Session.AttachedEntity is not { } user)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
_doAfterSystem.Cancel(component.DoAfter);
|
||||||
|
component.DoAfter = null;
|
||||||
|
|
||||||
var doAfter = new MagicMirrorRemoveSlotDoAfterEvent()
|
var doAfter = new MagicMirrorRemoveSlotDoAfterEvent()
|
||||||
{
|
{
|
||||||
Category = message.Category,
|
Category = message.Category,
|
||||||
@@ -196,8 +208,9 @@ public sealed class MagicMirrorSystem : EntitySystem
|
|||||||
BreakOnUserMove = true,
|
BreakOnUserMove = true,
|
||||||
BreakOnWeightlessMove = false,
|
BreakOnWeightlessMove = false,
|
||||||
NeedHand = true
|
NeedHand = true
|
||||||
});
|
}, out var doAfterId);
|
||||||
|
|
||||||
|
component.DoAfter = doAfterId;
|
||||||
_audio.PlayPvs(component.ChangeHairSound, uid);
|
_audio.PlayPvs(component.ChangeHairSound, uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,6 +249,9 @@ public sealed class MagicMirrorSystem : EntitySystem
|
|||||||
if (message.Session.AttachedEntity == null)
|
if (message.Session.AttachedEntity == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
_doAfterSystem.Cancel(component.DoAfter);
|
||||||
|
component.DoAfter = null;
|
||||||
|
|
||||||
var doAfter = new MagicMirrorAddSlotDoAfterEvent()
|
var doAfter = new MagicMirrorAddSlotDoAfterEvent()
|
||||||
{
|
{
|
||||||
Category = message.Category,
|
Category = message.Category,
|
||||||
@@ -249,8 +265,9 @@ public sealed class MagicMirrorSystem : EntitySystem
|
|||||||
BreakOnUserMove = true,
|
BreakOnUserMove = true,
|
||||||
BreakOnWeightlessMove = false,
|
BreakOnWeightlessMove = false,
|
||||||
NeedHand = true
|
NeedHand = true
|
||||||
});
|
}, out var doAfterId);
|
||||||
|
|
||||||
|
component.DoAfter = doAfterId;
|
||||||
_audio.PlayPvs(component.ChangeHairSound, uid);
|
_audio.PlayPvs(component.ChangeHairSound, uid);
|
||||||
}
|
}
|
||||||
private void OnAddSlotDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorAddSlotDoAfterEvent args)
|
private void OnAddSlotDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorAddSlotDoAfterEvent args)
|
||||||
|
|||||||
Reference in New Issue
Block a user