@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user