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