+using Content.Shared.Alert;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
namespace Content.Shared.Strip.Components;
/// <summary>
/// Give this to an entity when you want to decrease stripping times
/// </summary>
-[RegisterComponent]
+[RegisterComponent, NetworkedComponent]
+[AutoGenerateComponentState(fieldDeltas: true)]
public sealed partial class ThievingComponent : Component
{
/// <summary>
/// How much the strip time should be shortened by
/// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("stripTimeReduction")]
+ [DataField, AutoNetworkedField]
public TimeSpan StripTimeReduction = TimeSpan.FromSeconds(0.5f);
/// <summary>
/// Should it notify the user if they're stripping a pocket?
/// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("stealthy")]
+ [DataField, AutoNetworkedField]
public bool Stealthy;
+
+ /// <summary>
+ /// Variable pointing at the Alert modal
+ /// </summary>
+ [DataField]
+ public ProtoId<AlertPrototype> StealthyAlertProtoId = "Stealthy";
+
+ /// <summary>
+ /// Prevent component replication to clients other than the owner,
+ /// doesn't affect prediction.
+ /// Get mogged.
+ /// </summary>
+ public override bool SendOnlyToOwner => true;
}
+
+/// <summary>
+/// Event raised to toggle the thieving component.
+/// </summary>
+public sealed partial class ToggleThievingEvent : BaseAlertEvent;
+
+using Content.Shared.Alert;
using Content.Shared.Inventory;
-using Content.Shared.Strip;
using Content.Shared.Strip.Components;
+using Robust.Shared.GameStates;
namespace Content.Shared.Strip;
-public sealed class ThievingSystem : EntitySystem
+public sealed partial class ThievingSystem : EntitySystem
{
+ [Dependency] private readonly AlertsSystem _alertsSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ThievingComponent, BeforeStripEvent>(OnBeforeStrip);
- SubscribeLocalEvent<ThievingComponent, InventoryRelayedEvent<BeforeStripEvent>>((e, c, ev) => OnBeforeStrip(e, c, ev.Args));
+ SubscribeLocalEvent<ThievingComponent, InventoryRelayedEvent<BeforeStripEvent>>((e, c, ev) =>
+ OnBeforeStrip(e, c, ev.Args));
+ SubscribeLocalEvent<ThievingComponent, ToggleThievingEvent>(OnToggleStealthy);
+ SubscribeLocalEvent<ThievingComponent, ComponentInit>(OnCompInit);
+ SubscribeLocalEvent<ThievingComponent, ComponentRemove>(OnCompRemoved);
}
private void OnBeforeStrip(EntityUid uid, ThievingComponent component, BeforeStripEvent args)
{
args.Stealth |= component.Stealthy;
- args.Additive -= component.StripTimeReduction;
+ if (args.Stealth)
+ {
+ args.Additive -= component.StripTimeReduction;
+ }
+ }
+
+ private void OnCompInit(Entity<ThievingComponent> entity, ref ComponentInit args)
+ {
+ _alertsSystem.ShowAlert(entity, entity.Comp.StealthyAlertProtoId, 1);
+ }
+
+ private void OnCompRemoved(Entity<ThievingComponent> entity, ref ComponentRemove args)
+ {
+ _alertsSystem.ClearAlert(entity, entity.Comp.StealthyAlertProtoId);
+ }
+
+ private void OnToggleStealthy(Entity<ThievingComponent> ent, ref ToggleThievingEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ ent.Comp.Stealthy = !ent.Comp.Stealthy;
+ _alertsSystem.ShowAlert(ent.Owner, ent.Comp.StealthyAlertProtoId, (short)(ent.Comp.Stealthy ? 1 : 0));
+ DirtyField(ent.AsNullable(), nameof(ent.Comp.Stealthy), null);
+
+ args.Handled = true;
}
}
alerts-rooted-name = Rooted
alerts-rooted-desc = You are attached to the ground. You can't slip, but you absorb fluids under you.
+
+alerts-stealthy-name = Pickpocketing
+alerts-stealthy-desc = Whether you are currently pickpocketing. Click to toggle.
- alertType: Magboots
- alertType: Rooted
- alertType: Pacified
+ - alertType: Stealthy
- type: entity
id: AlertSpriteView
name: alerts-pacified-name
description: alerts-pacified-desc
+- type: alert
+ id: Stealthy
+ clickEvent: !type:ToggleThievingEvent
+ icons:
+ - sprite: /Textures/Interface/Alerts/stealthy.rsi
+ state: stealthy-off
+ - sprite: /Textures/Interface/Alerts/stealthy.rsi
+ state: stealthy-on
+ name: alerts-stealthy-name
+ description: alerts-stealthy-desc
+ minSeverity: 0
+ maxSeverity: 1
+
- type: alert
id: Adrenaline
icons:
categories:
- UplinkWearables
-# TODO: Revert back to normal thieving gloves when clothes dyeing is added
-- type: listing
- id: UplinkgClothingThievingGloves
- name: uplink-clothing-chameleon-thieving-gloves-name
- description: uplink-clothing-chameleon-thieving-gloves-desc
- productEntity: ClothingHandsChameleonThief
- discountCategory: veryRareDiscounts
- discountDownTo:
- Telecrystal: 3
- cost:
- Telecrystal: 5
- categories:
- - UplinkWearables
-
- type: listing
id: UplinkClothingOuterVestWeb
name: uplink-clothing-outer-vest-web-name
startingGear: ThiefGear
components:
- type: Pacified
+ - type: Thieving
+ stripTimeReduction: 2
+ stealthy: true
mindRoles:
- MindRoleThief
briefing:
back:
- ThiefBeacon
- SatchelThief
- - ClothingHandsChameleonThief
--- /dev/null
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Edited by DuckManZach (github)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "stealthy-off"
+ },
+ {
+ "name": "stealthy-on"
+ }
+ ]
+}