diff --git a/Content.Server/Species/Systems/NymphSystem.cs b/Content.Server/Species/Systems/NymphSystem.cs index 8d0646ae8e..b7751afbf1 100644 --- a/Content.Server/Species/Systems/NymphSystem.cs +++ b/Content.Server/Species/Systems/NymphSystem.cs @@ -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(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(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); } } diff --git a/Content.Shared/Species/Systems/ReformSystem.cs b/Content.Shared/Species/Systems/ReformSystem.cs index a013a7f886..dc2ce3fb90 100644 --- a/Content.Shared/Species/Systems/ReformSystem.cs +++ b/Content.Shared/Species/Systems/ReformSystem.cs @@ -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(OnReform); SubscribeLocalEvent(OnDoAfter); + + SubscribeLocalEvent(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]