]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add EntityEffectOnTrigger and RejuvenateOnTrigger (#40967)
authorslarticodefast <161409025+slarticodefast@users.noreply.github.com>
Sun, 19 Oct 2025 14:42:18 +0000 (16:42 +0200)
committerGitHub <noreply@github.com>
Sun, 19 Oct 2025 14:42:18 +0000 (14:42 +0000)
commit

Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs
Content.Server/Administration/PlayerPanelEui.cs
Content.Server/Administration/Systems/AdminVerbSystem.cs
Content.Server/Administration/Toolshed/RejuvenateCommand.cs
Content.Shared/Administration/Systems/RejuvenateSystem.cs [moved from Content.Server/Administration/Systems/RejuvenateSystem.cs with 54% similarity]
Content.Shared/Rejuvenate/RejuvenateEvent.cs
Content.Shared/Trigger/Components/Effects/EntityEffectOnTriggerComponent.cs [new file with mode: 0644]
Content.Shared/Trigger/Components/Effects/RejuventateOnTriggerComponent.cs [new file with mode: 0644]
Content.Shared/Trigger/Systems/EntityEffectOnTriggerSystem.cs [new file with mode: 0644]
Content.Shared/Trigger/Systems/RejuvenateOnTriggerSystem.cs [new file with mode: 0644]

index e4ec7e907a494d03d4628831b67895f4c75db17d..53604b2c1e3b904299ecd101ca804439a0025231 100644 (file)
@@ -1,5 +1,4 @@
-using Content.Server.Administration.Commands;
-using Content.Server.Administration.Systems;
+using Content.Shared.Administration.Systems;
 using Content.Shared.Damage;
 using Content.Shared.Damage.Prototypes;
 using Content.Shared.FixedPoint;
index 31acd33bf120c2a3a231e6781e9502b3fc86743d..7de62ac74376191faa48421ddd0bd1d713191628 100644 (file)
@@ -2,10 +2,10 @@ using System.Linq;
 using Content.Server.Administration.Logs;
 using Content.Server.Administration.Managers;
 using Content.Server.Administration.Notes;
-using Content.Server.Administration.Systems;
 using Content.Server.Database;
 using Content.Server.EUI;
 using Content.Shared.Administration;
+using Content.Shared.Administration.Systems;
 using Content.Shared.Database;
 using Content.Shared.Eui;
 using Content.Shared.Follower;
index 61e3013bd98daa3b2876f0c8611ea3f2e2af985f..4232b034f3e3cb2504b6f00574ee366a08284e19 100644 (file)
@@ -9,6 +9,7 @@ using Content.Server.Prayer;
 using Content.Server.Silicons.Laws;
 using Content.Server.Station.Systems;
 using Content.Shared.Administration;
+using Content.Shared.Administration.Systems;
 using Content.Shared.Chemistry.Components.SolutionManager;
 using Content.Shared.Chemistry.EntitySystems;
 using Content.Shared.Configurable;
index 3925badc589d3a8d6c09d3f0de610596c2b1f524..b503e9cb9633ca16affa1b8701b7d143a0bc178b 100644 (file)
@@ -1,5 +1,5 @@
-using Content.Server.Administration.Systems;
-using Content.Shared.Administration;
+using Content.Shared.Administration;
+using Content.Shared.Administration.Systems;
 using Robust.Shared.Toolshed;
 using Robust.Shared.Toolshed.Errors;
 
similarity index 54%
rename from Content.Server/Administration/Systems/RejuvenateSystem.cs
rename to Content.Shared/Administration/Systems/RejuvenateSystem.cs
index d25db20bd937de503bb9c913e1fa0bab0ebd4e6d..d27ea63acedf5506a093530f7c9946986b65aa33 100644 (file)
@@ -1,9 +1,12 @@
 using Content.Shared.Rejuvenate;
 
-namespace Content.Server.Administration.Systems;
+namespace Content.Shared.Administration.Systems;
 
 public sealed class RejuvenateSystem : EntitySystem
 {
+    /// <summary>
+    /// Fully heals the target, removing all damage, debuffs or other negative status effects.
+    /// </summary>
     public void PerformRejuvenate(EntityUid target)
     {
         RaiseLocalEvent(target, new RejuvenateEvent());
index a6649c6cda41f04ed52c7a54fd7fa47ccbf6b88c..cead1f6507326a00dd9c630a47d9f43481d57181 100644 (file)
@@ -1,5 +1,9 @@
 namespace Content.Shared.Rejuvenate;
 
-public sealed class RejuvenateEvent : EntityEventArgs
-{
-}
+/// <summary>
+/// Raised when an entity is supposed to be rejuvenated,
+/// meaning it should heal all damage, debuffs or other negative status effects.
+/// Systems should handle healing the entity in a subscription to this event.
+/// Used for the Rejuvenate admin verb.
+/// </summary>
+public sealed class RejuvenateEvent : EntityEventArgs;
diff --git a/Content.Shared/Trigger/Components/Effects/EntityEffectOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/EntityEffectOnTriggerComponent.cs
new file mode 100644 (file)
index 0000000..326312d
--- /dev/null
@@ -0,0 +1,24 @@
+using Content.Shared.EntityEffects;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Trigger.Components.Effects;
+
+/// <summary>
+/// Applies a list of entity effects to the owning entity when triggered.
+/// If TargetUser is true then they will be applied to the user instead.
+/// </summary>
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class EntityEffectOnTriggerComponent : BaseXOnTriggerComponent
+{
+    /// <summary>
+    /// The effects to apply.
+    /// </summary>
+    [DataField, AutoNetworkedField]
+    public EntityEffect[] Effects;
+
+    /// <summary>
+    /// Optional scale multiplier for the effects.
+    /// </summary>
+    [DataField, AutoNetworkedField]
+    public float Scale = 1f;
+}
diff --git a/Content.Shared/Trigger/Components/Effects/RejuventateOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/RejuventateOnTriggerComponent.cs
new file mode 100644 (file)
index 0000000..5efc50c
--- /dev/null
@@ -0,0 +1,10 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Trigger.Components.Effects;
+
+/// <summary>
+/// Rejuvenates the entity when triggered, which fully heals them, removing all damage, debuffs or other negative status effects.
+/// If TargetUser is true then the user will be rejuvenated instead.
+/// </summary>
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class RejuvenateOnTriggerComponent : BaseXOnTriggerComponent;
diff --git a/Content.Shared/Trigger/Systems/EntityEffectOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/EntityEffectOnTriggerSystem.cs
new file mode 100644 (file)
index 0000000..021b72d
--- /dev/null
@@ -0,0 +1,30 @@
+using Content.Shared.EntityEffects;
+using Content.Shared.Trigger.Components.Effects;
+
+namespace Content.Shared.Trigger.Systems;
+
+public sealed class EntityEffectOnTriggerSystem : EntitySystem
+{
+    [Dependency] private readonly SharedEntityEffectsSystem _effects = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<EntityEffectOnTriggerComponent, TriggerEvent>(OnTrigger);
+    }
+
+    private void OnTrigger(Entity<EntityEffectOnTriggerComponent> 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;
+
+        _effects.ApplyEffects(target.Value, ent.Comp.Effects, ent.Comp.Scale);
+        args.Handled = true;
+    }
+}
diff --git a/Content.Shared/Trigger/Systems/RejuvenateOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/RejuvenateOnTriggerSystem.cs
new file mode 100644 (file)
index 0000000..f1c5fdc
--- /dev/null
@@ -0,0 +1,30 @@
+using Content.Shared.Administration.Systems;
+using Content.Shared.Trigger.Components.Effects;
+
+namespace Content.Shared.Trigger.Systems;
+
+public sealed class RejuvenateOnTriggerSystem : EntitySystem
+{
+    [Dependency] private readonly RejuvenateSystem _rejuvenate = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<RejuvenateOnTriggerComponent, TriggerEvent>(OnTrigger);
+    }
+
+    private void OnTrigger(Entity<RejuvenateOnTriggerComponent> 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;
+
+        _rejuvenate.PerformRejuvenate(target.Value);
+        args.Handled = true;
+    }
+}