From 5ca65503f7dcab6dc5744fa65d83546c0f5a88dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Fri, 24 Apr 2026 01:12:38 -0500 Subject: [PATCH] StatusEffect On Trigger (#43665) commit Co-authored-by: iaada --- .../RemoveStatusEffectOnTriggerComponent.cs | 19 ++++++++++++++ .../SetStatusEffectOnTriggerComponent.cs | 25 +++++++++++++++++++ .../Systems/StatusEffectOnTriggerSystem.cs | 24 ++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 Content.Shared/Trigger/Components/Effects/RemoveStatusEffectOnTriggerComponent.cs create mode 100644 Content.Shared/Trigger/Components/Effects/SetStatusEffectOnTriggerComponent.cs create mode 100644 Content.Shared/Trigger/Systems/StatusEffectOnTriggerSystem.cs diff --git a/Content.Shared/Trigger/Components/Effects/RemoveStatusEffectOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/RemoveStatusEffectOnTriggerComponent.cs new file mode 100644 index 0000000000..7ea9f9a059 --- /dev/null +++ b/Content.Shared/Trigger/Components/Effects/RemoveStatusEffectOnTriggerComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.StatusEffectNew.Components; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Trigger.Components.Effects; + +/// +/// Removes a status effect when triggered. +/// If TargetUser is true the user loses the status. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class RemoveStatusEffectOnTriggerComponent : BaseXOnTriggerComponent +{ + /// + /// Status effect to be removed. + /// + [DataField, AutoNetworkedField] + public EntProtoId Status; +} diff --git a/Content.Shared/Trigger/Components/Effects/SetStatusEffectOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/SetStatusEffectOnTriggerComponent.cs new file mode 100644 index 0000000000..7e7fbda021 --- /dev/null +++ b/Content.Shared/Trigger/Components/Effects/SetStatusEffectOnTriggerComponent.cs @@ -0,0 +1,25 @@ +using Content.Shared.StatusEffectNew.Components; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Trigger.Components.Effects; + +/// +/// Adds a status effect when triggered. +/// If TargetUser is true the user will gain the effect. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SetStatusEffectOnTriggerComponent : BaseXOnTriggerComponent +{ + /// + /// Status effect to be added. + /// + [DataField, AutoNetworkedField] + public EntProtoId Status; + + /// + /// How long the status lasts. Permanent until removed if null. + /// + [DataField, AutoNetworkedField] + public TimeSpan? Duration; +} diff --git a/Content.Shared/Trigger/Systems/StatusEffectOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/StatusEffectOnTriggerSystem.cs new file mode 100644 index 0000000000..c766d7b467 --- /dev/null +++ b/Content.Shared/Trigger/Systems/StatusEffectOnTriggerSystem.cs @@ -0,0 +1,24 @@ +using Content.Shared.StatusEffectNew; +using Content.Shared.Trigger.Components.Effects; + +namespace Content.Shared.Trigger.Systems; + +public sealed class SetStatusEffectOnTriggerSystem : XOnTriggerSystem +{ + [Dependency] private readonly StatusEffectsSystem _status = default!; + + protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args) + { + args.Handled |= _status.TrySetStatusEffectDuration(target, ent.Comp.Status, ent.Comp.Duration); + } +} + +public sealed class RemoveStatusEffectOnTriggerSystem : XOnTriggerSystem +{ + [Dependency] private readonly StatusEffectsSystem _status = default!; + + protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args) + { + args.Handled |= _status.TryRemoveStatusEffect(target, ent.Comp.Status); + } +}