]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Zombie Diona Fixes (#25404)
authorLankLTE <135308300+LankLTE@users.noreply.github.com>
Mon, 26 Feb 2024 23:31:37 +0000 (15:31 -0800)
committerGitHub <noreply@github.com>
Mon, 26 Feb 2024 23:31:37 +0000 (16:31 -0700)
No reform, zombie nymphs

Content.Server/Species/Systems/NymphSystem.cs
Content.Shared/Species/Systems/ReformSystem.cs

index 8d0646ae8e46777b6fc4216e43234d9f340d0f61..b7751afbf18c7aa77b911903c2acb2c7458789b2 100644 (file)
@@ -1,6 +1,8 @@
 using Content.Server.Mind;
 using Content.Shared.Species.Components;
 using Content.Shared.Body.Events;
+using Content.Shared.Zombies;
+using Content.Server.Zombies;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Timing;
 
@@ -11,6 +13,7 @@ public sealed partial class NymphSystem : EntitySystem
     [Dependency] private readonly IPrototypeManager _protoManager= default!;
     [Dependency] private readonly MindSystem _mindSystem = default!;
     [Dependency] private readonly IGameTiming _timing = default!;
+    [Dependency] private readonly ZombieSystem _zombie = default!;
 
     public override void Initialize()
     {
@@ -30,12 +33,18 @@ public sealed partial class NymphSystem : EntitySystem
         if (!_protoManager.TryIndex<EntityPrototype>(comp.EntityPrototype, out var entityProto))
             return;
 
+        // Get the organs' position & spawn a nymph there
         var coords = Transform(uid).Coordinates;
         var nymph = EntityManager.SpawnAtPosition(entityProto.ID, coords);
 
+        if (HasComp<ZombieComponent>(args.OldBody)) // Zombify the new nymph if old one is a zombie
+            _zombie.ZombifyEntity(nymph);
+
+        // Move the mind if there is one and it's supposed to be transferred
         if (comp.TransferMind == true && _mindSystem.TryGetMind(args.OldBody, out var mindId, out var mind))
             _mindSystem.TransferTo(mindId, nymph, mind: mind);
 
+        // Delete the old organ
         QueueDel(uid);
     }
 }
index a013a7f88644d70e3054078d8e171e6c35c7bae1..dc2ce3fb90048571c53b07700ee47eaa8c230d3e 100644 (file)
@@ -4,12 +4,11 @@ using Content.Shared.DoAfter;
 using Content.Shared.Popups;
 using Content.Shared.Stunnable;
 using Content.Shared.Mind;
-using Content.Shared.Humanoid;
+using Content.Shared.Zombies;
 using Robust.Shared.Network;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Serialization;
 using Robust.Shared.Timing;
-using Robust.Shared.Serialization.Manager;
 
 namespace Content.Shared.Species;
 
@@ -23,8 +22,6 @@ public sealed partial class ReformSystem : EntitySystem
     [Dependency] private readonly SharedStunSystem _stunSystem = default!;
     [Dependency] private readonly IGameTiming _gameTiming = default!;
     [Dependency] private readonly SharedMindSystem _mindSystem = default!;
-    [Dependency] private readonly MetaDataSystem _metaData = default!;
-    [Dependency] private readonly ISerializationManager _serializationManager = default!;
 
     public override void Initialize()
     {
@@ -35,6 +32,8 @@ public sealed partial class ReformSystem : EntitySystem
 
         SubscribeLocalEvent<ReformComponent, ReformEvent>(OnReform);
         SubscribeLocalEvent<ReformComponent, ReformDoAfterEvent>(OnDoAfter);
+
+        SubscribeLocalEvent<ReformComponent, EntityZombifiedEvent>(OnZombified);
     }
 
     private void OnMapInit(EntityUid uid, ReformComponent comp, MapInitEvent args)
@@ -95,12 +94,17 @@ public sealed partial class ReformSystem : EntitySystem
 
         // This transfers the mind to the new entity
         if (_mindSystem.TryGetMind(uid, out var mindId, out var mind))
-                _mindSystem.TransferTo(mindId, child, mind: mind);
+            _mindSystem.TransferTo(mindId, child, mind: mind);
 
         // Delete the old entity
         QueueDel(uid);
     }
 
+    private void OnZombified(EntityUid uid, ReformComponent comp, ref EntityZombifiedEvent args)
+    {
+        _actionsSystem.RemoveAction(uid, comp.ActionEntity); // Zombies can't reform
+    }
+
     public sealed partial class ReformEvent : InstantActionEvent { } 
     
     [Serializable, NetSerializable]