Added Hemophilia Trait (#38224)
Co-authored-by: ScarKy0 <scarky0@onet.eu> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
This commit is contained in:
9
Content.Shared/Body/Events/BleedModifierEvent.cs
Normal file
9
Content.Shared/Body/Events/BleedModifierEvent.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace Content.Shared.Body.Events;
|
||||
|
||||
/// <summary>
|
||||
/// Raised on an entity before they bleed to modify the amount.
|
||||
/// </summary>
|
||||
/// <param name="BleedAmount">The amount of blood the entity will lose.</param>
|
||||
/// <param name="BleedReductionAmount">The amount of bleed reduction that will happen.</param>
|
||||
[ByRefEvent]
|
||||
public record struct BleedModifierEvent(float BleedAmount, float BleedReductionAmount);
|
||||
@@ -81,10 +81,14 @@ public abstract class SharedBloodstreamSystem : EntitySystem
|
||||
// as well as stop their bleeding to a certain extent.
|
||||
if (bloodstream.BleedAmount > 0)
|
||||
{
|
||||
var ev = new BleedModifierEvent(bloodstream.BleedAmount, bloodstream.BleedReductionAmount);
|
||||
RaiseLocalEvent(uid, ref ev);
|
||||
|
||||
// Blood is removed from the bloodstream at a 1-1 rate with the bleed amount
|
||||
TryModifyBloodLevel((uid, bloodstream), -bloodstream.BleedAmount);
|
||||
TryModifyBloodLevel((uid, bloodstream), -ev.BleedAmount);
|
||||
|
||||
// Bleed rate is reduced by the bleed reduction amount in the bloodstream component.
|
||||
TryModifyBleedAmount((uid, bloodstream), -bloodstream.BleedReductionAmount);
|
||||
TryModifyBleedAmount((uid, bloodstream), -ev.BleedReductionAmount);
|
||||
}
|
||||
|
||||
// deal bloodloss damage if their blood level is below a threshold.
|
||||
|
||||
16
Content.Shared/Traits/Assorted/HemophiliaComponent.cs
Normal file
16
Content.Shared/Traits/Assorted/HemophiliaComponent.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Traits.Assorted;
|
||||
|
||||
/// <summary>
|
||||
/// This component is used for the Hemophilia Trait, it reduces the passive bleed stack reduction amount so entities with it bleed for longer.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class HemophiliaComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// What multiplier should be applied to the BleedReduction when an entity bleeds?
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public float HemophiliaBleedReductionMultiplier = 0.33f;
|
||||
}
|
||||
16
Content.Shared/Traits/Assorted/HemophiliaSystem.cs
Normal file
16
Content.Shared/Traits/Assorted/HemophiliaSystem.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Content.Shared.Body.Events;
|
||||
|
||||
namespace Content.Shared.Traits.Assorted;
|
||||
|
||||
public sealed class HemophiliaSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<HemophiliaComponent, BleedModifierEvent>(OnBleedModifier);
|
||||
}
|
||||
|
||||
private void OnBleedModifier(Entity<HemophiliaComponent> ent, ref BleedModifierEvent args)
|
||||
{
|
||||
args.BleedReductionAmount *= ent.Comp.HemophiliaBleedReductionMultiplier;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user