From 76963c6d5a959c9db034b0685131266ff798d37d Mon Sep 17 00:00:00 2001 From: keronshb <54602815+keronshb@users.noreply.github.com> Date: Sun, 19 Jun 2022 20:55:59 -0400 Subject: [PATCH] Item strip delay dependant on slot. (#8900) --- Content.Server/Strip/StrippableComponent.cs | 14 ++++++++++--- Content.Server/Strip/StrippableSystem.cs | 20 +++++++++++++++---- .../Inventory/InventoryTemplatePrototype.cs | 2 ++ .../human_inventory_template.yml | 11 ++++++++++ 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/Content.Server/Strip/StrippableComponent.cs b/Content.Server/Strip/StrippableComponent.cs index 37aa03cba1..542d0df1cb 100644 --- a/Content.Server/Strip/StrippableComponent.cs +++ b/Content.Server/Strip/StrippableComponent.cs @@ -9,13 +9,21 @@ namespace Content.Server.Strip [Access(typeof(StrippableSystem))] public sealed class StrippableComponent : SharedStrippableComponent { + /// + /// How long it takes to open the strip menu. + /// This should be relatively short so it's not a hassle + /// but so it also doesn't open immediately during melee combat + /// [ViewVariables] [DataField("openDelay")] - public float OpenDelay = 4f; + public float OpenDelay = 1f; + /// + /// The strip delay for hands. + /// [ViewVariables] - [DataField("delay")] - public float StripDelay = 2f; + [DataField("handDelay")] + public float HandStripDelay = 3f; public override bool Drop(DragDropEvent args) { diff --git a/Content.Server/Strip/StrippableSystem.cs b/Content.Server/Strip/StrippableSystem.cs index fdee4ff123..49f8f35b1c 100644 --- a/Content.Server/Strip/StrippableSystem.cs +++ b/Content.Server/Strip/StrippableSystem.cs @@ -274,7 +274,13 @@ namespace Content.Server.Strip return true; } - var doAfterArgs = new DoAfterEventArgs(user, component.StripDelay, CancellationToken.None, component.Owner) + 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)}"); + return; + } + + var doAfterArgs = new DoAfterEventArgs(user, slotDef.StripTime, CancellationToken.None, component.Owner) { ExtraCheck = Check, BreakOnStun = true, @@ -328,7 +334,7 @@ namespace Content.Server.Strip return true; } - var doAfterArgs = new DoAfterEventArgs(user, component.StripDelay, CancellationToken.None, component.Owner) + var doAfterArgs = new DoAfterEventArgs(user, component.HandStripDelay, CancellationToken.None, component.Owner) { ExtraCheck = Check, BreakOnStun = true, @@ -374,7 +380,13 @@ namespace Content.Server.Strip return true; } - var doAfterArgs = new DoAfterEventArgs(user, component.StripDelay, CancellationToken.None, component.Owner) + 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)}"); + return; + } + + var doAfterArgs = new DoAfterEventArgs(user, slotDef.StripTime, CancellationToken.None, component.Owner) { ExtraCheck = Check, BreakOnStun = true, @@ -425,7 +437,7 @@ namespace Content.Server.Strip return true; } - var doAfterArgs = new DoAfterEventArgs(user, component.StripDelay, CancellationToken.None, component.Owner) + var doAfterArgs = new DoAfterEventArgs(user, component.HandStripDelay, CancellationToken.None, component.Owner) { ExtraCheck = Check, BreakOnStun = true, diff --git a/Content.Shared/Inventory/InventoryTemplatePrototype.cs b/Content.Shared/Inventory/InventoryTemplatePrototype.cs index cffddc3eb5..bdcf800ce7 100644 --- a/Content.Shared/Inventory/InventoryTemplatePrototype.cs +++ b/Content.Shared/Inventory/InventoryTemplatePrototype.cs @@ -21,6 +21,8 @@ public sealed class SlotDefinition [DataField("slotFlags")] public SlotFlags SlotFlags { get; } = SlotFlags.PREVENTEQUIP; + [DataField("stripTime")] public float StripTime { get; } = 3f; + [DataField("uiContainer")] public SlotUIContainer UIContainer { get; } = SlotUIContainer.None; [DataField("uiWindowPos", required: true)] public Vector2i UIWindowPosition { get; } diff --git a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml index 911211760c..51467742b7 100644 --- a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml @@ -4,18 +4,21 @@ - name: shoes slotTexture: shoes slotFlags: FEET + stripTime: 2 uiContainer: Top uiWindowPos: 1,3 displayName: Shoes - name: jumpsuit slotTexture: uniform slotFlags: INNERCLOTHING + stripTime: 5 uiContainer: Top uiWindowPos: 0,2 displayName: Jumpsuit - name: outerClothing slotTexture: suit slotFlags: OUTERCLOTHING + stripTime: 5 uiContainer: Top uiWindowPos: 1,2 displayName: Suit @@ -40,12 +43,14 @@ - name: eyes slotTexture: glasses slotFlags: EYES + stripTime: 2 uiContainer: Top uiWindowPos: 0,0 displayName: Eyes - name: ears slotTexture: ears slotFlags: EARS + stripTime: 2 uiContainer: Top uiWindowPos: 2,0 displayName: Ears @@ -58,6 +63,7 @@ - name: pocket1 slotTexture: pocket slotFlags: POCKET + stripTime: 2 uiContainer: BottomRight uiWindowPos: 0,3 dependsOn: jumpsuit @@ -65,6 +71,7 @@ - name: pocket2 slotTexture: pocket slotFlags: POCKET + stripTime: 2 uiContainer: BottomRight uiWindowPos: 2,3 dependsOn: jumpsuit @@ -72,6 +79,7 @@ - name: suitstorage slotTexture: suit_storage slotFlags: SUITSTORAGE + stripTime: 2 uiContainer: BottomLeft uiWindowPos: 2,0 dependsOn: outerClothing @@ -79,6 +87,7 @@ - name: id slotTexture: id slotFlags: IDCARD + stripTime: 5 uiContainer: BottomRight uiWindowPos: 2,1 dependsOn: jumpsuit @@ -86,12 +95,14 @@ - name: belt slotTexture: belt slotFlags: BELT + stripTime: 5 uiContainer: BottomLeft uiWindowPos: 3,1 displayName: Belt - name: back slotTexture: back slotFlags: BACK + stripTime: 5 uiContainer: BottomLeft uiWindowPos: 3,0 displayName: Back