Fixed bola effect stacking (#34723)
This commit is contained in:
@@ -13,13 +13,13 @@ public sealed partial class EnsnareableComponent : Component
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// How much should this slow down the entities walk?
|
/// How much should this slow down the entities walk?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField]
|
[DataField, AutoNetworkedField]
|
||||||
public float WalkSpeed = 1.0f;
|
public float WalkSpeed = 1.0f;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// How much should this slow down the entities sprint?
|
/// How much should this slow down the entities sprint?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField]
|
[DataField, AutoNetworkedField]
|
||||||
public float SprintSpeed = 1.0f;
|
public float SprintSpeed = 1.0f;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -38,6 +38,12 @@ public sealed partial class EnsnaringComponent : Component
|
|||||||
[DataField]
|
[DataField]
|
||||||
public float StaminaDamage = 55f;
|
public float StaminaDamage = 55f;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// How many times can the ensnare be applied to the same target?
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public float MaxEnsnares = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should this ensnare someone when thrown?
|
/// Should this ensnare someone when thrown?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -256,23 +256,18 @@ public abstract class SharedEnsnareableSystem : EntitySystem
|
|||||||
if (!TryComp<EnsnareableComponent>(target, out var ensnareable))
|
if (!TryComp<EnsnareableComponent>(target, out var ensnareable))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Need to insert before free legs check.
|
var numEnsnares = ensnareable.Container.ContainedEntities.Count;
|
||||||
Container.Insert(ensnare, ensnareable.Container);
|
|
||||||
|
|
||||||
var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count();
|
//Don't do anything if the maximum number of ensnares is applied.
|
||||||
var ensnaredLegs = (2 * ensnareable.Container.ContainedEntities.Count);
|
if (numEnsnares >= component.MaxEnsnares)
|
||||||
var freeLegs = legs - ensnaredLegs;
|
|
||||||
|
|
||||||
if (freeLegs > 0)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Apply stamina damage to target if they weren't ensnared before.
|
Container.Insert(ensnare, ensnareable.Container);
|
||||||
if (ensnareable.IsEnsnared != true)
|
|
||||||
|
// Apply stamina damage to target
|
||||||
|
if (TryComp<StaminaComponent>(target, out var stamina))
|
||||||
{
|
{
|
||||||
if (TryComp<StaminaComponent>(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;
|
component.Ensnared = target;
|
||||||
|
|||||||
@@ -47,4 +47,5 @@
|
|||||||
staminaDamage: 0 # anything but this is gamebreaking
|
staminaDamage: 0 # anything but this is gamebreaking
|
||||||
canThrowTrigger: true
|
canThrowTrigger: true
|
||||||
canMoveBreakout: true
|
canMoveBreakout: true
|
||||||
|
maxEnsnares: 1
|
||||||
- type: LandAtCursor
|
- type: LandAtCursor
|
||||||
|
|||||||
Reference in New Issue
Block a user