Files
2025-06-29 19:15:12 +03:00

52 lines
1.8 KiB
C#

using Content.Shared.Damage.Components;
using Content.Shared.Damage.Systems;
using Content.Shared.EntityEffects;
using Content.Shared.FixedPoint;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Chemistry.ReagentEffect;
[UsedImplicitly]
[DataDefinition]
public sealed partial class CP14StaminaChange : EntityEffect
{
[DataField(required: true)]
public float StaminaDelta = 1;
[DataField]
public bool ScaleByQuantity;
protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
{
return Loc.GetString(StaminaDelta >= 0 ? "cp14-reagent-effect-guidebook-stamina-add" : "cp14-reagent-effect-guidebook-stamina-remove",
("chance", Probability),
("amount", Math.Abs(StaminaDelta)));
}
public override void Effect(EntityEffectBaseArgs args)
{
var entityManager = args.EntityManager;
var scale = FixedPoint2.New(1);
if (args is EntityEffectReagentArgs reagentArgs)
scale = ScaleByQuantity ? reagentArgs.Quantity * reagentArgs.Scale : reagentArgs.Scale;
var staminaSys = entityManager.System<SharedStaminaSystem>();
if (StaminaDelta < 0) //Damage
{
staminaSys.TakeStaminaDamage(args.TargetEntity, (float)(-StaminaDelta * scale));
}
else //Restore
{
if (!entityManager.TryGetComponent<StaminaComponent>(args.TargetEntity, out var staminaComp))
return;
staminaComp.StaminaDamage = Math.Max(0, staminaComp.StaminaDamage - (float)(StaminaDelta * scale));
entityManager.Dirty(args.TargetEntity, staminaComp);
staminaSys.SetStaminaAlert(args.TargetEntity, staminaComp);
}
}
}