using Content.Shared.Damage.Components; namespace Content.Shared.Damage.Systems; public sealed partial class StaminaSystem { private void InitializeModifier() { SubscribeLocalEvent(OnModifierStartup); SubscribeLocalEvent(OnModifierShutdown); } private void OnModifierStartup(EntityUid uid, StaminaModifierComponent comp, ComponentStartup args) { if (!TryComp(uid, out var stamina)) return; stamina.CritThreshold *= comp.Modifier; } private void OnModifierShutdown(EntityUid uid, StaminaModifierComponent comp, ComponentShutdown args) { if (!TryComp(uid, out var stamina)) return; stamina.CritThreshold /= comp.Modifier; } /// /// Change the stamina modifier for an entity. /// If it has it will also be updated. /// public void SetModifier(EntityUid uid, float modifier, StaminaComponent? stamina = null, StaminaModifierComponent? comp = null) { if (!Resolve(uid, ref comp)) return; var old = comp.Modifier; if (old.Equals(modifier)) return; comp.Modifier = modifier; Dirty(uid, comp); if (Resolve(uid, ref stamina, false)) { // scale to the new threshold, act as if it was removed then added stamina.CritThreshold *= modifier / old; } } }