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