Thieves can innately pickpocket - thieving gloves rework (#38123)
* Thieves can innately pickpocket (#107) Pickpocketing a skyrim guard's armor off (cherry picked from commit 21b9f1ddb251ea3c7c6803e78871abefcaecbfb4) * this isnt moff * Make predicted, cleanup * !skating-basketball * orks are NOT the best trollface * Implement much more sensible component replication prevention --------- Co-authored-by: DuckManZach <144298822+duckmanzach@users.noreply.github.com>
This commit is contained in:
@@ -1,22 +1,44 @@
|
|||||||
|
using Content.Shared.Alert;
|
||||||
|
using Robust.Shared.GameStates;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
namespace Content.Shared.Strip.Components;
|
namespace Content.Shared.Strip.Components;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Give this to an entity when you want to decrease stripping times
|
/// Give this to an entity when you want to decrease stripping times
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RegisterComponent]
|
[RegisterComponent, NetworkedComponent]
|
||||||
|
[AutoGenerateComponentState(fieldDeltas: true)]
|
||||||
public sealed partial class ThievingComponent : Component
|
public sealed partial class ThievingComponent : Component
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// How much the strip time should be shortened by
|
/// How much the strip time should be shortened by
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[DataField, AutoNetworkedField]
|
||||||
[DataField("stripTimeReduction")]
|
|
||||||
public TimeSpan StripTimeReduction = TimeSpan.FromSeconds(0.5f);
|
public TimeSpan StripTimeReduction = TimeSpan.FromSeconds(0.5f);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should it notify the user if they're stripping a pocket?
|
/// Should it notify the user if they're stripping a pocket?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[DataField, AutoNetworkedField]
|
||||||
[DataField("stealthy")]
|
|
||||||
public bool Stealthy;
|
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;
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,54 @@
|
|||||||
|
using Content.Shared.Alert;
|
||||||
using Content.Shared.Inventory;
|
using Content.Shared.Inventory;
|
||||||
using Content.Shared.Strip;
|
|
||||||
using Content.Shared.Strip.Components;
|
using Content.Shared.Strip.Components;
|
||||||
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
namespace Content.Shared.Strip;
|
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()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
SubscribeLocalEvent<ThievingComponent, BeforeStripEvent>(OnBeforeStrip);
|
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)
|
private void OnBeforeStrip(EntityUid uid, ThievingComponent component, BeforeStripEvent args)
|
||||||
{
|
{
|
||||||
args.Stealth |= component.Stealthy;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,3 +116,6 @@ alerts-revenant-corporeal-desc = You have manifested physically. People around y
|
|||||||
|
|
||||||
alerts-rooted-name = Rooted
|
alerts-rooted-name = Rooted
|
||||||
alerts-rooted-desc = You are attached to the ground. You can't slip, but you absorb fluids under you.
|
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.
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
- alertType: Magboots
|
- alertType: Magboots
|
||||||
- alertType: Rooted
|
- alertType: Rooted
|
||||||
- alertType: Pacified
|
- alertType: Pacified
|
||||||
|
- alertType: Stealthy
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: AlertSpriteView
|
id: AlertSpriteView
|
||||||
@@ -438,6 +439,19 @@
|
|||||||
name: alerts-pacified-name
|
name: alerts-pacified-name
|
||||||
description: alerts-pacified-desc
|
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
|
- type: alert
|
||||||
id: Adrenaline
|
id: Adrenaline
|
||||||
icons:
|
icons:
|
||||||
|
|||||||
@@ -1593,20 +1593,6 @@
|
|||||||
categories:
|
categories:
|
||||||
- UplinkWearables
|
- 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
|
- type: listing
|
||||||
id: UplinkClothingOuterVestWeb
|
id: UplinkClothingOuterVestWeb
|
||||||
name: uplink-clothing-outer-vest-web-name
|
name: uplink-clothing-outer-vest-web-name
|
||||||
|
|||||||
@@ -27,6 +27,9 @@
|
|||||||
startingGear: ThiefGear
|
startingGear: ThiefGear
|
||||||
components:
|
components:
|
||||||
- type: Pacified
|
- type: Pacified
|
||||||
|
- type: Thieving
|
||||||
|
stripTimeReduction: 2
|
||||||
|
stealthy: true
|
||||||
mindRoles:
|
mindRoles:
|
||||||
- MindRoleThief
|
- MindRoleThief
|
||||||
briefing:
|
briefing:
|
||||||
|
|||||||
@@ -15,4 +15,3 @@
|
|||||||
back:
|
back:
|
||||||
- ThiefBeacon
|
- ThiefBeacon
|
||||||
- SatchelThief
|
- SatchelThief
|
||||||
- ClothingHandsChameleonThief
|
|
||||||
|
|||||||
17
Resources/Textures/Interface/Alerts/stealthy.rsi/meta.json
Normal file
17
Resources/Textures/Interface/Alerts/stealthy.rsi/meta.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 636 B |
BIN
Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-on.png
Normal file
BIN
Resources/Textures/Interface/Alerts/stealthy.rsi/stealthy-on.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 685 B |
Reference in New Issue
Block a user