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