diff --git a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs
index 307a5e1986..126031dc6b 100644
--- a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs
+++ b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs
@@ -13,13 +13,13 @@ public sealed partial class EnsnareableComponent : Component
///
/// How much should this slow down the entities walk?
///
- [DataField]
+ [DataField, AutoNetworkedField]
public float WalkSpeed = 1.0f;
///
/// How much should this slow down the entities sprint?
///
- [DataField]
+ [DataField, AutoNetworkedField]
public float SprintSpeed = 1.0f;
///
diff --git a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs
index f900d863c2..b05ce151d8 100644
--- a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs
+++ b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs
@@ -38,6 +38,12 @@ public sealed partial class EnsnaringComponent : Component
[DataField]
public float StaminaDamage = 55f;
+ ///
+ /// How many times can the ensnare be applied to the same target?
+ ///
+ [DataField]
+ public float MaxEnsnares = 1;
+
///
/// Should this ensnare someone when thrown?
///
diff --git a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs
index 551c76ff8d..dacb773470 100644
--- a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs
+++ b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs
@@ -256,23 +256,18 @@ public abstract class SharedEnsnareableSystem : EntitySystem
if (!TryComp(target, out var ensnareable))
return false;
- // Need to insert before free legs check.
- Container.Insert(ensnare, ensnareable.Container);
+ var numEnsnares = ensnareable.Container.ContainedEntities.Count;
- var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count();
- var ensnaredLegs = (2 * ensnareable.Container.ContainedEntities.Count);
- var freeLegs = legs - ensnaredLegs;
-
- if (freeLegs > 0)
+ //Don't do anything if the maximum number of ensnares is applied.
+ if (numEnsnares >= component.MaxEnsnares)
return false;
- // Apply stamina damage to target if they weren't ensnared before.
- if (ensnareable.IsEnsnared != true)
+ Container.Insert(ensnare, ensnareable.Container);
+
+ // Apply stamina damage to target
+ if (TryComp(target, out var stamina))
{
- if (TryComp(target, out var stamina))
- {
- _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina);
- }
+ _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina);
}
component.Ensnared = target;
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
index f8d5efb8c6..f6630adbb3 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
@@ -47,4 +47,5 @@
staminaDamage: 0 # anything but this is gamebreaking
canThrowTrigger: true
canMoveBreakout: true
+ maxEnsnares: 1
- type: LandAtCursor