]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Makes EventRole Ids properly set ID names. (#28958)
authorVerm <32827189+Vermidia@users.noreply.github.com>
Mon, 21 Apr 2025 18:25:22 +0000 (13:25 -0500)
committerGitHub <noreply@github.com>
Mon, 21 Apr 2025 18:25:22 +0000 (14:25 -0400)
* Add id binding system

* Change so it activates when added too

* Add to eventhumanoid

* Add PDA binding, try to fix some things

* Still not fixed, PDA is working right

* Move to server, add on mind instead

* Implement suggestions

* Fix things

* Finish review stuff

* Messed up cluwne

* Remove after only changing id too

---------

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Content.Server/Access/Components/IdBindComponent.cs [new file with mode: 0644]
Content.Server/Access/Systems/IdBindSystem.cs [new file with mode: 0644]
Content.Shared/Humanoid/Prototypes/RandomHumanoidSettingsPrototype.cs
Resources/Prototypes/Entities/Mobs/Player/humanoid.yml

diff --git a/Content.Server/Access/Components/IdBindComponent.cs b/Content.Server/Access/Components/IdBindComponent.cs
new file mode 100644 (file)
index 0000000..9fcc7e2
--- /dev/null
@@ -0,0 +1,14 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Server.Access.Components;
+
+[RegisterComponent]
+public sealed partial class IdBindComponent : Component
+{
+    /// <summary>
+    /// If true, also tries to get the PDA and set the owner to the entity
+    /// </summary>
+    [DataField]
+    public bool BindPDAOwner = true;
+}
+
diff --git a/Content.Server/Access/Systems/IdBindSystem.cs b/Content.Server/Access/Systems/IdBindSystem.cs
new file mode 100644 (file)
index 0000000..275a96f
--- /dev/null
@@ -0,0 +1,51 @@
+using Content.Server.Access.Components;
+using Content.Server.PDA;
+using Content.Shared.Inventory;
+using Content.Shared.Mind.Components;
+using Content.Shared.PDA;
+using Content.Shared.Roles;
+
+namespace Content.Server.Access.Systems;
+
+public sealed class IdBindSystem : EntitySystem
+{
+    [Dependency] private readonly IdCardSystem _cardSystem = default!;
+    [Dependency] private readonly PdaSystem _pdaSystem = default!;
+    [Dependency] private readonly InventorySystem _inventory = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+        //Activate on mind being added
+        SubscribeLocalEvent<IdBindComponent, MindAddedMessage>(TryBind);
+    }
+
+    private void TryBind(Entity<IdBindComponent> ent, ref MindAddedMessage args)
+    {
+        if (!_cardSystem.TryFindIdCard(ent, out var cardId))
+            return;
+
+        var data = MetaData(ent);
+
+        _cardSystem.TryChangeFullName(cardId, data.EntityName, cardId);
+
+        if (!ent.Comp.BindPDAOwner)
+        {
+                       //Remove after running once
+                       RemCompDeferred<IdBindComponent>(ent);
+                       return;
+        }
+
+        //Get PDA from main slot and set us as owner
+        if (!_inventory.TryGetSlotEntity(ent, "id", out var uPda))
+            return;
+
+        if (!TryComp<PdaComponent>(uPda, out var pDA))
+            return;
+
+        _pdaSystem.SetOwner(uPda.Value, pDA, ent, data.EntityName);
+        //Remove after running once
+        RemCompDeferred<IdBindComponent>(ent);
+    }
+}
+
index e31289db1e6c735a620ea6e05ff311b45e0d0a35..3c350de68f7092afc165df654f6f162c82cbb57c 100644 (file)
@@ -21,7 +21,7 @@ public sealed partial class RandomHumanoidSettingsPrototype : IPrototype, IInher
     /// <summary>
     ///     Whether the humanoid's name should take from the randomized profile or not.
     /// </summary>
-    [DataField("randomizeName")]
+    [DataField]
     public bool RandomizeName { get; private set; } = true;
 
     /// <summary>
index f92cf40e2e4a99eb91ff9c3d8374e2b78376caa3..a2b516d9e5a4b4ba517794cdf7392e1d3812b09b 100644 (file)
@@ -6,10 +6,12 @@
     - type: RandomHumanoidAppearance
       randomizeName: false
     - type: GhostTakeoverAvailable
+    - type: IdBind
 
 - type: randomHumanoidSettings
   id: EventHumanoidMindShielded
   parent: EventHumanoid
+  randomizeName: false
   components:
     - type: MindShield
     - type: AntagImmune
@@ -43,7 +45,6 @@
 - type: randomHumanoidSettings
   id: DeathSquad
   parent: EventHumanoidCentcomm
-  randomizeName: false
   components:
     - type: GhostRole
       name: ghost-role-information-Death-Squad-name
@@ -84,7 +85,6 @@
 - type: randomHumanoidSettings
   id: ERTLeader
   parent: EventHumanoidCentcomm
-  randomizeName: false
   components:
     - type: GhostRole
       name: ghost-role-information-ert-leader-name