Skip to content

Commit

Permalink
Prevent virtual item storage and popups (space-wizards#30020)
Browse files Browse the repository at this point in the history
* Prevent virtual item storage and popups

* fix typo

* add comment
  • Loading branch information
themias committed Aug 9, 2024
1 parent b92c222 commit 73420b5
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
11 changes: 6 additions & 5 deletions Content.Shared/Interaction/SmartEquipSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,21 +62,22 @@ private void HandleSmartEquip(ICommonSession? session, string equipmentSlot)
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))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
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;
Expand Down Expand Up @@ -43,6 +44,7 @@ public override void Initialize()
SubscribeLocalEvent<VirtualItemComponent, BeingUnequippedAttemptEvent>(OnBeingUnequippedAttempt);

SubscribeLocalEvent<VirtualItemComponent, BeforeRangedInteractEvent>(OnBeforeRangedInteract);
SubscribeLocalEvent<VirtualItemComponent, GettingInteractedWithAttemptEvent>(OnGettingInteractedWithAttemptEvent);
}

/// <summary>
Expand Down Expand Up @@ -72,6 +74,12 @@ private void OnBeforeRangedInteract(Entity<VirtualItemComponent> ent, ref Before
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>
Expand Down
1 change: 1 addition & 0 deletions Resources/Prototypes/Entities/Virtual/virtual_item.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
noSpawn: true
components:
- type: Item
size: Ginormous # no storage insertion visuals
- type: VirtualItem

0 comments on commit 73420b5

Please sign in to comment.