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:
keronshb
2022-06-27 20:14:51 -04:00
committed by GitHub
parent 1af61c5041
commit 206513c31b
7 changed files with 101 additions and 4 deletions

View File

@@ -410,11 +410,15 @@ namespace Content.Server.Strip
if (!_inventorySystem.TryGetSlot(component.Owner, slot, out var slotDef)) 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; 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, ExtraCheck = Check,
BreakOnStun = true, BreakOnStun = true,
@@ -425,7 +429,7 @@ namespace Content.Server.Strip
if (Check()) 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)); _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-hidden", ("slot", slot)), component.Owner, Filter.Entities(component.Owner));
else else
{ {
@@ -476,7 +480,11 @@ namespace Content.Server.Strip
return true; 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, ExtraCheck = Check,
BreakOnStun = true, BreakOnStun = true,

View File

@@ -3,6 +3,7 @@ using Content.Shared.Electrocution;
using Content.Shared.Explosion; using Content.Shared.Explosion;
using Content.Shared.Movement.Systems; using Content.Shared.Movement.Systems;
using Content.Shared.Slippery; using Content.Shared.Slippery;
using Content.Shared.Strip.Components;
namespace Content.Shared.Inventory; namespace Content.Shared.Inventory;
@@ -15,6 +16,7 @@ public partial class InventorySystem
SubscribeLocalEvent<InventoryComponent, SlipAttemptEvent>(RelayInventoryEvent); SubscribeLocalEvent<InventoryComponent, SlipAttemptEvent>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, RefreshMovementSpeedModifiersEvent>(RelayInventoryEvent); SubscribeLocalEvent<InventoryComponent, RefreshMovementSpeedModifiersEvent>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, GetExplosionResistanceEvent>(RelayInventoryEvent); SubscribeLocalEvent<InventoryComponent, GetExplosionResistanceEvent>(RelayInventoryEvent);
SubscribeLocalEvent<InventoryComponent, BeforeStripEvent>(RelayInventoryEvent);
} }
protected void RelayInventoryEvent<T>(EntityUid uid, InventoryComponent component, T args) where T : EntityEventArgs, IInventoryRelayEvent protected void RelayInventoryEvent<T>(EntityUid uid, InventoryComponent component, T args) where T : EntityEventArgs, IInventoryRelayEvent

View File

@@ -1,6 +1,7 @@
using Content.Shared.ActionBlocker; using Content.Shared.ActionBlocker;
using Content.Shared.DragDrop; using Content.Shared.DragDrop;
using Content.Shared.Hands.Components; using Content.Shared.Hands.Components;
using Content.Shared.Inventory;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
namespace Content.Shared.Strip.Components namespace Content.Shared.Strip.Components
@@ -77,4 +78,23 @@ namespace Content.Shared.Strip.Components
Handcuffs = handcuffs; 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;
}
}
} }

View 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;
}

View 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;
}
}

View File

@@ -315,6 +315,14 @@
description: These protect you from slips while looking like normal sneakers. description: These protect you from slips while looking like normal sneakers.
price: 2 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 - type: uplinkListing
id: UplinkClothingOuterVestWeb id: UplinkClothingOuterVestWeb
category: Armor category: Armor

View File

@@ -144,6 +144,9 @@
sprite: Clothing/Hands/Gloves/spaceninja.rsi sprite: Clothing/Hands/Gloves/spaceninja.rsi
HeatResistance: 1400 HeatResistance: 1400
- type: Insulated - type: Insulated
- type: Thieving
stealTime: 1
stealthy: true
- type: entity - type: entity
parent: ClothingHandsBase parent: ClothingHandsBase
@@ -169,3 +172,16 @@
- type: Clothing - type: Clothing
sprite: Clothing/Hands/Gloves/fingerless.rsi 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