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;
[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()
{
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);
}
}
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;
[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()
{
SubscribeLocalEvent<ReformComponent, ReformEvent>(OnReform);
SubscribeLocalEvent<ReformComponent, ReformDoAfterEvent>(OnDoAfter);
+
+ SubscribeLocalEvent<ReformComponent, EntityZombifiedEvent>(OnZombified);
}
private void OnMapInit(EntityUid uid, ReformComponent comp, MapInitEvent args)
// 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]