]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Prevent virtual item storage and popups (#30020)
authorthemias <89101928+themias@users.noreply.github.com>
Sun, 14 Jul 2024 14:08:39 +0000 (10:08 -0400)
committerGitHub <noreply@github.com>
Sun, 14 Jul 2024 14:08:39 +0000 (00:08 +1000)
* Prevent virtual item storage and popups

* fix typo

* add comment

Content.Shared/Interaction/SmartEquipSystem.cs
Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs
Resources/Prototypes/Entities/Virtual/virtual_item.yml

index bba294db28d2cb3865bbc4a9ef7bd751e9ce5519..4feb0445f8f9e31407aefcfe9aa1028b3f383ba4 100644 (file)
@@ -62,21 +62,22 @@ public sealed class SmartEquipSystem : EntitySystem
         if (playerSession.AttachedEntity is not { Valid: true } uid || !Exists(uid))
             return;
 
-        if (!_actionBlocker.CanInteract(uid, null))
-            return;
-
         // early out if we don't have any hands or a valid inventory slot
         if (!TryComp<HandsComponent>(uid, out var hands) || hands.ActiveHand == null)
             return;
 
+        var handItem = hands.ActiveHand.HeldEntity;
+
+        // can the user interact, and is the item interactable? e.g. virtual items
+        if (!_actionBlocker.CanInteract(uid, handItem))
+            return;
+
         if (!TryComp<InventoryComponent>(uid, out var inventory) || !_inventory.HasSlot(uid, equipmentSlot, inventory))
         {
             _popup.PopupClient(Loc.GetString("smart-equip-missing-equipment-slot", ("slotName", equipmentSlot)), uid, uid);
             return;
         }
 
-        var handItem = hands.ActiveHand.HeldEntity;
-
         // early out if we have an item and cant drop it at all
         if (handItem != null && !_hands.CanDropHeld(uid, hands.ActiveHand))
         {
index cd0863ec88dac81472a2f0443cd7b2f150c7637d..8b9c052c8d5b0c04f83aea2dacb94584746b220f 100644 (file)
@@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis;
 using Content.Shared.Hands;
 using Content.Shared.Hands.EntitySystems;
 using Content.Shared.Interaction;
+using Content.Shared.Interaction.Events;
 using Content.Shared.Inventory.Events;
 using Content.Shared.Item;
 using Content.Shared.Popups;
@@ -43,6 +44,7 @@ public abstract class SharedVirtualItemSystem : EntitySystem
         SubscribeLocalEvent<VirtualItemComponent, BeingUnequippedAttemptEvent>(OnBeingUnequippedAttempt);
 
         SubscribeLocalEvent<VirtualItemComponent, BeforeRangedInteractEvent>(OnBeforeRangedInteract);
+        SubscribeLocalEvent<VirtualItemComponent, GettingInteractedWithAttemptEvent>(OnGettingInteractedWithAttemptEvent);
     }
 
     /// <summary>
@@ -72,6 +74,12 @@ public abstract class SharedVirtualItemSystem : EntitySystem
         args.Handled = true;
     }
 
+    private void OnGettingInteractedWithAttemptEvent(Entity<VirtualItemComponent> ent, ref GettingInteractedWithAttemptEvent args)
+    {
+        // No interactions with a virtual item, please.
+        args.Cancelled = true;
+    }
+
     #region Hands
 
     /// <summary>
index ed7424355018067af090ac608daa64f1f4b66ffb..088de6a6da5d8bf01ddf6613c5d1cf66a6783e43 100644 (file)
@@ -5,4 +5,5 @@
   noSpawn: true
   components:
   - type: Item
+    size: Ginormous # no storage insertion visuals
   - type: VirtualItem