using Content.Shared.StatusEffectNew; using Content.Shared.Trigger.Components.Effects; using Content.Shared.Trigger; namespace Content.Shared._Offbrand.Triggers; public sealed class StatusEffectOnTriggerSystem : EntitySystem { [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnTriggerAdd); SubscribeLocalEvent(OnTriggerUpdate); SubscribeLocalEvent(OnTriggerSet); SubscribeLocalEvent(OnTriggerRemove); } private void OnTriggerAdd(Entity trigger, ref TriggerEvent args) { if ((trigger.Comp.TargetUser ? args.User : trigger.Owner) is not { } target) return; if (args.Key != null && !trigger.Comp.KeysIn.Contains(args.Key)) return; _statusEffects.TryAddStatusEffectDuration(target, trigger.Comp.EffectProto, trigger.Comp.Duration); } private void OnTriggerUpdate(Entity trigger, ref TriggerEvent args) { if ((trigger.Comp.TargetUser ? args.User : trigger.Owner) is not { } target) return; if (args.Key != null && !trigger.Comp.KeysIn.Contains(args.Key)) return; _statusEffects.TryUpdateStatusEffectDuration(target, trigger.Comp.EffectProto, trigger.Comp.Duration); } private void OnTriggerSet(Entity trigger, ref TriggerEvent args) { if ((trigger.Comp.TargetUser ? args.User : trigger.Owner) is not { } target) return; if (args.Key != null && !trigger.Comp.KeysIn.Contains(args.Key)) return; _statusEffects.TrySetStatusEffectDuration(target, trigger.Comp.EffectProto, trigger.Comp.Duration); } private void OnTriggerRemove(Entity trigger, ref TriggerEvent args) { if ((trigger.Comp.TargetUser ? args.User : trigger.Owner) is not { } target) return; if (args.Key != null && !trigger.Comp.KeysIn.Contains(args.Key)) return; if (trigger.Comp.Duration is { } duration) _statusEffects.TryAddTime(target, trigger.Comp.EffectProto, -duration); else _statusEffects.TryRemoveStatusEffect(target, trigger.Comp.EffectProto); } }