Thieving component and Thieving Gloves (#9158)
* Thieving component and gloves * Fixes popup issue * Forgot to add it for hands * Adds a bool datafield * Comments * Requested changes
This commit is contained in:
@@ -410,11 +410,15 @@ namespace Content.Server.Strip
|
||||
|
||||
if (!_inventorySystem.TryGetSlot(component.Owner, slot, out var slotDef))
|
||||
{
|
||||
Logger.Error($"{ToPrettyString(user)} attempted to place an item in a non-existent inventory slot ({slot}) on {ToPrettyString(component.Owner)}");
|
||||
Logger.Error($"{ToPrettyString(user)} attempted to take an item from a non-existent inventory slot ({slot}) on {ToPrettyString(component.Owner)}");
|
||||
return;
|
||||
}
|
||||
|
||||
var doAfterArgs = new DoAfterEventArgs(user, slotDef.StripTime, CancellationToken.None, component.Owner)
|
||||
var ev = new BeforeStripEvent(slotDef.StripTime);
|
||||
RaiseLocalEvent(user, ev);
|
||||
var finalStripTime = ev.Time + ev.Additive;
|
||||
|
||||
var doAfterArgs = new DoAfterEventArgs(user, finalStripTime, CancellationToken.None, component.Owner)
|
||||
{
|
||||
ExtraCheck = Check,
|
||||
BreakOnStun = true,
|
||||
@@ -425,7 +429,7 @@ namespace Content.Server.Strip
|
||||
|
||||
if (Check())
|
||||
{
|
||||
if (slotDef.StripHidden)
|
||||
if (slotDef.StripHidden && !ev.Stealth)
|
||||
_popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-hidden", ("slot", slot)), component.Owner, Filter.Entities(component.Owner));
|
||||
else
|
||||
{
|
||||
@@ -476,7 +480,11 @@ namespace Content.Server.Strip
|
||||
return true;
|
||||
}
|
||||
|
||||
var doAfterArgs = new DoAfterEventArgs(user, component.HandStripDelay, CancellationToken.None, component.Owner)
|
||||
var ev = new BeforeStripEvent(component.HandStripDelay);
|
||||
RaiseLocalEvent(user, ev);
|
||||
var finalStripTime = ev.Time + ev.Additive;
|
||||
|
||||
var doAfterArgs = new DoAfterEventArgs(user, finalStripTime, CancellationToken.None, component.Owner)
|
||||
{
|
||||
ExtraCheck = Check,
|
||||
BreakOnStun = true,
|
||||
|
||||
@@ -3,6 +3,7 @@ using Content.Shared.Electrocution;
|
||||
using Content.Shared.Explosion;
|
||||
using Content.Shared.Movement.Systems;
|
||||
using Content.Shared.Slippery;
|
||||
using Content.Shared.Strip.Components;
|
||||
|
||||
namespace Content.Shared.Inventory;
|
||||
|
||||
@@ -15,6 +16,7 @@ public partial class InventorySystem
|
||||
SubscribeLocalEvent<InventoryComponent, SlipAttemptEvent>(RelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshMovementSpeedModifiersEvent>(RelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, GetExplosionResistanceEvent>(RelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, BeforeStripEvent>(RelayInventoryEvent);
|
||||
}
|
||||
|
||||
protected void RelayInventoryEvent<T>(EntityUid uid, InventoryComponent component, T args) where T : EntityEventArgs, IInventoryRelayEvent
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Content.Shared.ActionBlocker;
|
||||
using Content.Shared.DragDrop;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Inventory;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Strip.Components
|
||||
@@ -77,4 +78,23 @@ namespace Content.Shared.Strip.Components
|
||||
Handcuffs = handcuffs;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to modify strip times.
|
||||
/// </summary>
|
||||
[NetSerializable, Serializable]
|
||||
public sealed class BeforeStripEvent : EntityEventArgs, IInventoryRelayEvent
|
||||
{
|
||||
public readonly float InitialTime;
|
||||
public float Time;
|
||||
public float Additive = 0;
|
||||
public bool Stealth;
|
||||
|
||||
public SlotFlags TargetSlots { get; } = SlotFlags.GLOVES;
|
||||
|
||||
public BeforeStripEvent(float initialTime)
|
||||
{
|
||||
InitialTime = Time = initialTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
22
Content.Shared/Strip/Components/ThievingComponent.cs
Normal file
22
Content.Shared/Strip/Components/ThievingComponent.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
namespace Content.Shared.Strip.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Give this to an entity when you want to increase their stripping times
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed class ThievingComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// How much the strip time should be shortened by
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("stealTime")]
|
||||
public float StealTime = 0.5f;
|
||||
|
||||
/// <summary>
|
||||
/// Should it notify the user if they're stripping a pocket?
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("stealthy")]
|
||||
public bool Stealthy;
|
||||
}
|
||||
21
Content.Shared/Strip/ThievingSystem.cs
Normal file
21
Content.Shared/Strip/ThievingSystem.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Strip.Components;
|
||||
|
||||
namespace Content.Shared.Strip;
|
||||
|
||||
public sealed class ThievingSystem : EntitySystem
|
||||
{
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<ThievingComponent, BeforeStripEvent>(OnBeforeStrip);
|
||||
}
|
||||
|
||||
private void OnBeforeStrip(EntityUid uid, ThievingComponent component, BeforeStripEvent args)
|
||||
{
|
||||
args.Stealth = component.Stealthy;
|
||||
args.Additive -= component.StealTime;
|
||||
}
|
||||
}
|
||||
@@ -315,6 +315,14 @@
|
||||
description: These protect you from slips while looking like normal sneakers.
|
||||
price: 2
|
||||
|
||||
- type: uplinkListing
|
||||
id: UplinkgClothingThievingGloves
|
||||
category: Armor
|
||||
itemId: ThievingGloves
|
||||
listingName: Thieving Gloves
|
||||
description: Discretely steal from pockets and increase your thieving technique with these fancy new gloves, all while looking like normal gloves!
|
||||
price: 4
|
||||
|
||||
- type: uplinkListing
|
||||
id: UplinkClothingOuterVestWeb
|
||||
category: Armor
|
||||
|
||||
@@ -144,6 +144,9 @@
|
||||
sprite: Clothing/Hands/Gloves/spaceninja.rsi
|
||||
HeatResistance: 1400
|
||||
- type: Insulated
|
||||
- type: Thieving
|
||||
stealTime: 1
|
||||
stealthy: true
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsBase
|
||||
@@ -169,3 +172,16 @@
|
||||
- type: Clothing
|
||||
sprite: Clothing/Hands/Gloves/fingerless.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHandsBase
|
||||
id: ThievingGloves
|
||||
name: black gloves #Intentionally named after regular gloves, they're meant to be sneaky.
|
||||
description: Seemingly regular black gloves. The fingertips are outfitted with nanotech that makes stealing a breeze.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Hands/Gloves/Color/black.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Hands/Gloves/Color/black.rsi
|
||||
- type: Thieving
|
||||
stealTime: 1.5
|
||||
stealthy: true
|
||||
|
||||
Reference in New Issue
Block a user