mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-14 21:01:14 +03:00
* 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>
57 lines
1.9 KiB
C#
57 lines
1.9 KiB
C#
using Content.Shared.Changeling.Components;
|
|
using Content.Shared.Changeling.Systems;
|
|
using Robust.Client.GameObjects;
|
|
using Robust.Shared.GameStates;
|
|
|
|
namespace Content.Client.Changeling.Systems;
|
|
|
|
public sealed class ChangelingIdentitySystem : SharedChangelingIdentitySystem
|
|
{
|
|
[Dependency] private readonly UserInterfaceSystem _ui = default!;
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
SubscribeLocalEvent<ChangelingIdentityComponent, ComponentHandleState>(OnHandleState);
|
|
}
|
|
|
|
private void OnHandleState(Entity<ChangelingIdentityComponent> ent, ref ComponentHandleState args)
|
|
{
|
|
if (args.Current is not ChangelingIdentityComponentState state)
|
|
return;
|
|
|
|
ent.Comp.ConsumedIdentities = new List<ChangelingIdentityData>();
|
|
|
|
foreach (var identity in state.ConsumedIdentities)
|
|
{
|
|
ChangelingIdentityData data = new()
|
|
{
|
|
Identity = EnsureEntity<ChangelingIdentityComponent>(identity.Identity, ent),
|
|
Original = EnsureEntity<ChangelingIdentityComponent>(identity.Original, ent),
|
|
OriginalMind = null, // Don't network the mind!
|
|
OriginalJob = identity.OriginalJob,
|
|
OriginalName = identity.OriginalName,
|
|
Starting = identity.Starting,
|
|
GrantedDna = identity.GrantedDna,
|
|
};
|
|
|
|
ent.Comp.ConsumedIdentities.Add(data);
|
|
}
|
|
|
|
ent.Comp.CurrentIdentity = EnsureEntity<ChangelingStoredIdentityComponent>(state.CurrentIdentity, ent);
|
|
|
|
ent.Comp.IdentityCloningSettings = state.IdentityCloningSettings;
|
|
ent.Comp.MaxStoredDisguises = state.MaxStoredDisguises;
|
|
|
|
UpdateUi(ent);
|
|
}
|
|
|
|
public void UpdateUi(EntityUid uid)
|
|
{
|
|
if (_ui.TryGetOpenUi(uid, ChangelingTransformUiKey.Key, out var bui))
|
|
{
|
|
bui.Update();
|
|
}
|
|
}
|
|
}
|