diff --git a/Content.Shared/Strip/Components/ThievingComponent.cs b/Content.Shared/Strip/Components/ThievingComponent.cs
index a851dd5ef6..f40201723b 100644
--- a/Content.Shared/Strip/Components/ThievingComponent.cs
+++ b/Content.Shared/Strip/Components/ThievingComponent.cs
@@ -1,22 +1,44 @@
+using Content.Shared.Alert;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
namespace Content.Shared.Strip.Components;
///
/// Give this to an entity when you want to decrease stripping times
///
-[RegisterComponent]
+[RegisterComponent, NetworkedComponent]
+[AutoGenerateComponentState(fieldDeltas: true)]
public sealed partial class ThievingComponent : Component
{
///
/// How much the strip time should be shortened by
///
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("stripTimeReduction")]
+ [DataField, AutoNetworkedField]
public TimeSpan StripTimeReduction = TimeSpan.FromSeconds(0.5f);
///
/// Should it notify the user if they're stripping a pocket?
///
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("stealthy")]
+ [DataField, AutoNetworkedField]
public bool Stealthy;
+
+ ///
+ /// Variable pointing at the Alert modal
+ ///
+ [DataField]
+ public ProtoId StealthyAlertProtoId = "Stealthy";
+
+ ///
+ /// Prevent component replication to clients other than the owner,
+ /// doesn't affect prediction.
+ /// Get mogged.
+ ///
+ public override bool SendOnlyToOwner => true;
}
+
+///
+/// Event raised to toggle the thieving component.
+///
+public sealed partial class ToggleThievingEvent : BaseAlertEvent;
+
diff --git a/Content.Shared/Strip/ThievingSystem.cs b/Content.Shared/Strip/ThievingSystem.cs
index 2b3d3b38a0..4a76354844 100644
--- a/Content.Shared/Strip/ThievingSystem.cs
+++ b/Content.Shared/Strip/ThievingSystem.cs
@@ -1,23 +1,54 @@
+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(OnBeforeStrip);
- SubscribeLocalEvent>((e, c, ev) => OnBeforeStrip(e, c, ev.Args));
+ SubscribeLocalEvent>((e, c, ev) =>
+ OnBeforeStrip(e, c, ev.Args));
+ SubscribeLocalEvent(OnToggleStealthy);
+ SubscribeLocalEvent(OnCompInit);
+ SubscribeLocalEvent(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 entity, ref ComponentInit args)
+ {
+ _alertsSystem.ShowAlert(entity, entity.Comp.StealthyAlertProtoId, 1);
+ }
+
+ private void OnCompRemoved(Entity entity, ref ComponentRemove args)
+ {
+ _alertsSystem.ClearAlert(entity, entity.Comp.StealthyAlertProtoId);
+ }
+
+ private void OnToggleStealthy(Entity 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;
}
}
diff --git a/Resources/Locale/en-US/alerts/alerts.ftl b/Resources/Locale/en-US/alerts/alerts.ftl
index eb6d179027..45c22abcbc 100644
--- a/Resources/Locale/en-US/alerts/alerts.ftl
+++ b/Resources/Locale/en-US/alerts/alerts.ftl
@@ -116,3 +116,6 @@ alerts-revenant-corporeal-desc = You have manifested physically. People around y
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.
diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml
index 60a23294d3..6710a15fbc 100644
--- a/Resources/Prototypes/Alerts/alerts.yml
+++ b/Resources/Prototypes/Alerts/alerts.yml
@@ -26,6 +26,7 @@
- alertType: Magboots
- alertType: Rooted
- alertType: Pacified
+ - alertType: Stealthy
- type: entity
id: AlertSpriteView
@@ -438,6 +439,19 @@
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:
diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml
index 2371ee2c25..c177baa5d7 100644
--- a/Resources/Prototypes/Catalog/uplink_catalog.yml
+++ b/Resources/Prototypes/Catalog/uplink_catalog.yml
@@ -1593,20 +1593,6 @@
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
diff --git a/Resources/Prototypes/GameRules/subgamemodes.yml b/Resources/Prototypes/GameRules/subgamemodes.yml
index cb764d9787..2213623c28 100644
--- a/Resources/Prototypes/GameRules/subgamemodes.yml
+++ b/Resources/Prototypes/GameRules/subgamemodes.yml
@@ -27,6 +27,9 @@
startingGear: ThiefGear
components:
- type: Pacified
+ - type: Thieving
+ stripTimeReduction: 2
+ stealthy: true
mindRoles:
- MindRoleThief
briefing:
diff --git a/Resources/Prototypes/Roles/Antags/thief.yml b/Resources/Prototypes/Roles/Antags/thief.yml
index b8d21d2e83..4b333ac495 100644
--- a/Resources/Prototypes/Roles/Antags/thief.yml
+++ b/Resources/Prototypes/Roles/Antags/thief.yml
@@ -15,4 +15,3 @@
back:
- ThiefBeacon
- SatchelThief
- - ClothingHandsChameleonThief
diff --git a/Resources/Textures/Interface/Alerts/stealthy.rsi/meta.json b/Resources/Textures/Interface/Alerts/stealthy.rsi/meta.json
new file mode 100644
index 0000000000..8c00bfef64
--- /dev/null
+++ b/Resources/Textures/Interface/Alerts/stealthy.rsi/meta.json
@@ -0,0 +1,17 @@
+{
+ "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"
+ }
+ ]
+}
diff --git a/Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-off.png b/Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-off.png
new file mode 100644
index 0000000000..98e35494b2
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-off.png differ
diff --git a/Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-on.png b/Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-on.png
new file mode 100644
index 0000000000..3d2abbd645
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-on.png differ