From 7825d30562bb20a589849f1309713a39d8796718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Sun, 10 Aug 2025 14:59:32 -0500 Subject: [PATCH] Fire stacks trigger (#39530) * Simple as * whoops * not gonna work * chopped * missed something * Better name * formatting --------- Co-authored-by: iaada Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Systems/FlameStackOnTriggerSystem.cs | 37 +++++++++++++++++++ .../Trigger/Systems/IgniteOnTriggerSystem.cs | 1 + .../Effects/FlameStackOnTriggerComponent.cs | 26 +++++++++++++ .../Effects/IgniteOnTriggerComponent.cs | 1 + 4 files changed, 65 insertions(+) create mode 100644 Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs create mode 100644 Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs diff --git a/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs b/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs new file mode 100644 index 0000000000..879d57b845 --- /dev/null +++ b/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs @@ -0,0 +1,37 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Trigger; +using Content.Shared.Trigger.Components.Effects; + +namespace Content.Server.Trigger.Systems; + +/// +/// Trigger system for setting something on fire. +/// +/// +public sealed class FlameStackOnTriggerSystem : EntitySystem +{ + [Dependency] private readonly FlammableSystem _flame = default!; + + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnTrigger); + } + + private void OnTrigger(Entity ent, ref TriggerEvent args) + { + if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key)) + return; + + var target = ent.Comp.TargetUser ? args.User : ent.Owner; + + if (target == null) + return; + + _flame.AdjustFireStacks(target.Value, ent.Comp.FireStacks, ignite: ent.Comp.DoIgnite); + + args.Handled = true; + } +} diff --git a/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs b/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs index f4d88b774a..b19f4738ca 100644 --- a/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs +++ b/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs @@ -8,6 +8,7 @@ namespace Content.Server.Trigger.Systems; /// /// Handles igniting when triggered and stopping ignition after the delay. /// +/// public sealed class IgniteOnTriggerSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; diff --git a/Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs new file mode 100644 index 0000000000..f7186ae003 --- /dev/null +++ b/Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs @@ -0,0 +1,26 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Trigger.Components.Effects; + +/// +/// Adjusts fire stacks on trigger, optionally setting them on fire as well. +/// Requires to ignite the target. +/// If TargetUser is true they will have their firestacks adjusted instead. +/// +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FlameStackOnTriggerComponent : BaseXOnTriggerComponent +{ + /// + /// How many fire stacks to add or remove. + /// + [DataField, AutoNetworkedField] + public float FireStacks; + + /// + /// If true, the target will be set on fire if it isn't already. + /// If false does nothing. + /// + [DataField, AutoNetworkedField] + public bool DoIgnite = true; +} diff --git a/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs index 36273ef1b2..e9f51cf4e7 100644 --- a/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs +++ b/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs @@ -8,6 +8,7 @@ namespace Content.Shared.Trigger.Components.Effects; /// Requires along with triggering components. /// The if TargetUser is true they will be ignited instead (they need IgnitionSourceComponent as well). /// +/// [RegisterComponent, NetworkedComponent] [AutoGenerateComponentState, AutoGenerateComponentPause] public sealed partial class IgniteOnTriggerComponent : BaseXOnTriggerComponent