Files
space-station-14/Content.Server/Changeling/Systems/ChangelingIdentitySystem.cs
T
Pok e8f4975f46 Changeling gaining DNA (#43759)
* changeling-gain-DNA

* review

* Return IsUniqueDevour

* oops

* Update SharedChangelingIdentitySystem.cs

* Store data in ChangelingIdentityData + fixes

List of changes:
- Whether an identity granted devour is now tracked in ChangelingIdentityData
- Made devoured shutdown cleanup again
- Made server set the mind to null if it never found one, instead of being invalid

Fixes:
- Fixed name being networked as empty if original was deleted

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2026-04-27 20:10:39 +00:00

46 lines
1.4 KiB
C#

using Content.Shared.Changeling.Components;
using Content.Shared.Changeling.Systems;
using Robust.Shared.GameStates;
namespace Content.Server.Changeling.Systems;
public sealed class ChangelingIdentitySystem : SharedChangelingIdentitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ChangelingIdentityComponent, ComponentGetState>(OnGetState);
}
private void OnGetState(Entity<ChangelingIdentityComponent> entity, ref ComponentGetState args)
{
List<ChangelingNetworkedIdentityData> sentIdentities = new();
foreach (var identity in entity.Comp.ConsumedIdentities)
{
ChangelingNetworkedIdentityData netData = new()
{
Identity = GetNetEntity(identity.Identity),
Original = GetNetEntity(identity.Original),
OriginalJob = identity.OriginalJob,
OriginalName = identity.OriginalName,
Starting = identity.Starting,
GrantedDna = identity.GrantedDna,
};
sentIdentities.Add(netData);
}
var current = entity.Comp.CurrentIdentity;
var netCurrent = GetNetEntity(current);
args.State = new ChangelingIdentityComponentState(
sentIdentities,
netCurrent,
entity.Comp.IdentityCloningSettings,
entity.Comp.MaxStoredDisguises);
}
}