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