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 94dad1dfff..7d78e72b24 100644 --- a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs +++ b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs @@ -40,6 +40,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 9753756933..ad0a1841c2 100644 --- a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs +++ b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs @@ -259,23 +259,18 @@ public abstract class SharedEnsnareableSystem : EntitySystem || component.IgnoredTargets is not null && _entityWhitelist.IsValid(component.IgnoredTargets, target)) 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 dc781d4ada..5b42a3a9a8 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml @@ -22,6 +22,7 @@ staminaDamage: 20 # WD EDIT: 0 -> 20 canThrowTrigger: true canMoveBreakout: true + maxEnsnares: 1 - type: LandAtCursor - type: LayDownOnCollide # WD EDIT