using Content.Server._White.ContractorIDCard; using Content.Server.Access.Systems; using Content.Server.Forensics; using Content.Server.PDA; using Content.Shared.Access.Components; using Content.Shared.Inventory; using Content.Shared.PDA; using Robust.Server.Containers; using Robust.Shared.Timing; namespace Content.Server._White.FillIDCard; public sealed class FillIDCardSystem : EntitySystem { [Dependency] private readonly InventorySystem _inventorySystem = default!; [Dependency] private readonly PdaSystem _pdaSystem = default!; [Dependency] private readonly ContainerSystem _containerSystem = default!; [Dependency] private readonly IdCardSystem _idCardSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMapInit); } private void OnMapInit(Entity ent, ref MapInitEvent args) { Timer.Spawn(15000, () => ItDoBeDoing(ent)); // 15 seconds and yes this is bad // TODO Make it less dogshit } private void ItDoBeDoing(Entity ent) { if (!TryComp(ent.Owner, out var targetMeta)) { RemComp(ent.Owner); return; } if (!_inventorySystem.TryGetSlotEntity(ent.Owner, "id", out var idcardSlot)) { RemComp(ent.Owner); return; } if (TryComp(idcardSlot, out var pda)) { _pdaSystem.SetOwnerName((EntityUid) idcardSlot, pda, targetMeta.EntityName); _containerSystem.TryGetContainer((EntityUid) idcardSlot, "PDA-id", out var container); if (container != null) { var idCardInPda = container.ContainedEntities[0]; _idCardSystem.TryChangeFullName(idCardInPda, targetMeta.EntityName); } } else if (HasComp(idcardSlot)) { _idCardSystem.TryChangeFullName((EntityUid) idcardSlot, targetMeta.EntityName); if (ent.Comp.IsContractor) { EnsureComp((EntityUid) idcardSlot, out var comp); if (TryComp(ent.Owner, out var fingerprintComponent) && TryComp(ent.Owner, out var dnaComponent)) comp.Details = $"На карте имеется следующая информация:\nВладелец карты: {targetMeta.EntityName}\nОтпечаток пальцев владельца: {fingerprintComponent.Fingerprint}\nДНК владельца: {dnaComponent.DNA}"; } } RemComp(ent.Owner); } }