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))
|
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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
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.
|
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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user