]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Only sec glasses can show contraband: second attempt (#36412)
authorqrwas <aleksandr.vernigora93@gmail.com>
Sat, 26 Apr 2025 21:06:34 +0000 (00:06 +0300)
committerGitHub <noreply@github.com>
Sat, 26 Apr 2025 21:06:34 +0000 (17:06 -0400)
* Add base code for cheking contraband in hud

* Fix missing using in InventorySystem.Relay

* Fix errors and update HUD yml

* Add show contraband with component on entity

* fix component description

* Update Content.Shared/Contraband/ShowContrabandDetailsComponent.cs

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
* Update "if" for check if ent hasComp in contrabandSystem

* Remove << InventorySystem.Relay.cs

* Update Content.Shared/Contraband/ShowContrabandDetailsComponent.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Content.Shared/CCVar/CCVars.Game.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Fix partial class ShowContrabandSystem

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Content.Shared/Contraband/ShowContrabandDetailsComponent.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Content.Shared/Inventory/InventorySystem.Relay.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Some update ShowContrabandSystem

* Try with record struct

* back again ti default class with EntityEventArgs

* Remove EntityEventArgs

* Finally use record struct

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Content.Shared/CCVar/CCVars.Game.cs
Content.Shared/Contraband/ContrabandSystem.cs
Content.Shared/Contraband/ShowContrabandDetailsComponent.cs [new file with mode: 0644]
Content.Shared/Contraband/ShowContrabandSystem.cs [new file with mode: 0644]
Content.Shared/Inventory/InventorySystem.Relay.cs
Resources/Prototypes/Entities/Clothing/Eyes/hud.yml
Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml

index a316577fc1fa007efeb0c40e6dd6f07799b33f17..00e6ff93aed19fbc0e525387ea194c579dceb789 100644 (file)
@@ -1,4 +1,4 @@
-using Content.Shared.Roles;
+using Content.Shared.Roles;
 using Robust.Shared.Configuration;
 
 namespace Content.Shared.CCVar;
@@ -386,6 +386,12 @@ public sealed partial class CCVars
     public static readonly CVarDef<bool> ContrabandExamine =
         CVarDef.Create("game.contraband_examine", true, CVar.SERVER | CVar.REPLICATED);
 
+    /// <summary>
+    ///     If true, contraband examination is only possible while wearing an item with `ShowContrabandDetailsComponent`. Requires `ContrabandExamine` to be true as well.
+    /// </summary>
+    public static readonly CVarDef<bool> ContrabandExamineOnlyInHUD =
+        CVarDef.Create("game.contraband_examine_only_in_hud", false, CVar.SERVER | CVar.REPLICATED);
+
     /// <summary>
     ///     Size of the lookup area for adding entities to the context menu
     /// </summary>
index c998875c87aabb7d8919690c940df5d66ced9678..2c2495ba9a4068c627e4c7ce12637334029d24f5 100644 (file)
@@ -1,4 +1,3 @@
-using System.Linq;
 using Content.Shared.Access.Systems;
 using Content.Shared.CCVar;
 using Content.Shared.Examine;
@@ -8,6 +7,7 @@ using Content.Shared.Verbs;
 using Robust.Shared.Configuration;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Utility;
+using System.Linq;
 
 namespace Content.Shared.Contraband;
 
@@ -22,6 +22,7 @@ public sealed class ContrabandSystem : EntitySystem
     [Dependency] private readonly ExamineSystemShared _examine = default!;
 
     private bool _contrabandExamineEnabled;
+    private bool _contrabandExamineOnlyInHudEnabled;
 
     /// <inheritdoc/>
     public override void Initialize()
@@ -29,6 +30,7 @@ public sealed class ContrabandSystem : EntitySystem
         SubscribeLocalEvent<ContrabandComponent, GetVerbsEvent<ExamineVerb>>(OnDetailedExamine);
 
         Subs.CVar(_configuration, CCVars.ContrabandExamine, SetContrabandExamine, true);
+        Subs.CVar(_configuration, CCVars.ContrabandExamineOnlyInHUD, SetContrabandExamineOnlyInHUD, true);
     }
 
     public void CopyDetails(EntityUid uid, ContrabandComponent other, ContrabandComponent? contraband = null)
@@ -42,12 +44,21 @@ public sealed class ContrabandSystem : EntitySystem
         Dirty(uid, contraband);
     }
 
-    private void OnDetailedExamine(EntityUid ent,ContrabandComponent component, ref GetVerbsEvent<ExamineVerb> args)
+    private void OnDetailedExamine(EntityUid ent, ContrabandComponent component, ref GetVerbsEvent<ExamineVerb> args)
     {
 
         if (!_contrabandExamineEnabled)
             return;
 
+        // Checking if contraband is only shown in the HUD
+        if (_contrabandExamineOnlyInHudEnabled)
+        {
+            var ev = new GetContrabandDetailsEvent();
+            RaiseLocalEvent(args.User, ref ev);
+            if (!ev.CanShowContraband)
+                return;
+        }
+
         // CanAccess is not used here, because we want people to be able to examine legality in strip menu.
         if (!args.CanInteract)
             return;
@@ -114,4 +125,9 @@ public sealed class ContrabandSystem : EntitySystem
     {
         _contrabandExamineEnabled = val;
     }
+
+    private void SetContrabandExamineOnlyInHUD(bool val)
+    {
+        _contrabandExamineOnlyInHudEnabled = val;
+    }
 }
diff --git a/Content.Shared/Contraband/ShowContrabandDetailsComponent.cs b/Content.Shared/Contraband/ShowContrabandDetailsComponent.cs
new file mode 100644 (file)
index 0000000..50e9c49
--- /dev/null
@@ -0,0 +1,9 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Contraband;
+
+/// <summary>
+/// This component allows you to see Contraband details on examine items
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class ShowContrabandDetailsComponent : Component;
diff --git a/Content.Shared/Contraband/ShowContrabandSystem.cs b/Content.Shared/Contraband/ShowContrabandSystem.cs
new file mode 100644 (file)
index 0000000..4542c0f
--- /dev/null
@@ -0,0 +1,27 @@
+using Content.Shared.Inventory;
+
+namespace Content.Shared.Contraband;
+
+public sealed partial class ShowContrabandSystem : EntitySystem
+{
+    public override void Initialize()
+    {
+        base.Initialize();
+        Subs.SubscribeWithRelay<ShowContrabandDetailsComponent, GetContrabandDetailsEvent>(OnGetContrabandDetails);
+
+    }
+
+    private void OnGetContrabandDetails(Entity<ShowContrabandDetailsComponent> ent, ref GetContrabandDetailsEvent args)
+    {
+        args.CanShowContraband = true;
+    }
+}
+
+/// <summary>
+/// Raised on an entity and its inventory to determine if it can see contraband information in the examination window.
+/// </summary>
+[ByRefEvent]
+public record struct GetContrabandDetailsEvent(bool CanShowContraband = false) : IInventoryRelayEvent
+{
+    SlotFlags IInventoryRelayEvent.TargetSlots => SlotFlags.EYES;
+}
index 01d3e8724606b46ca293c51bfbe213278880cb6a..ce245992a9f60be21ff729cba83932edfca7e694 100644 (file)
@@ -4,6 +4,7 @@ using Content.Shared.Chat;
 using Content.Shared.Chemistry;
 using Content.Shared.Chemistry.Hypospray.Events;
 using Content.Shared.Climbing.Events;
+using Content.Shared.Contraband;
 using Content.Shared.Damage;
 using Content.Shared.Damage.Events;
 using Content.Shared.Electrocution;
@@ -55,6 +56,7 @@ public partial class InventorySystem
         SubscribeLocalEvent<InventoryComponent, GetSlowedOverSlipperyModifierEvent>(RefRelayInventoryEvent);
         SubscribeLocalEvent<InventoryComponent, ModifySlowOnDamageSpeedEvent>(RefRelayInventoryEvent);
         SubscribeLocalEvent<InventoryComponent, ExtinguishEvent>(RefRelayInventoryEvent);
+        SubscribeLocalEvent<InventoryComponent, GetContrabandDetailsEvent>(RefRelayInventoryEvent);
 
         // Eye/vision events
         SubscribeLocalEvent<InventoryComponent, CanSeeAttemptEvent>(RelayInventoryEvent);
index 98fb8fddedade55117d12ba05439ac17225476ce..3b8ade1dd5d59c782bdd1048ea143abf49d52027 100644 (file)
@@ -6,6 +6,7 @@
   - type: ShowJobIcons
   - type: ShowMindShieldIcons
   - type: ShowCriminalRecordIcons
+  - type: ShowContrabandDetails
 
 - type: entity
   id: ShowMedicalIcons
index ce4fc4ded00aa140769b61f8013a1b94e36f326f..2b18468ace5feb63e14332f549201cf58173e463 100644 (file)
@@ -95,6 +95,7 @@
   - type: SolutionScanner
   - type: IgnoreUIRange
   - type: ShowAntagIcons
+  - type: ShowContrabandDetails
   - type: Inventory
     templateId: aghost
   - type: Loadout