using Content.Shared.Damage.Components; using Content.Shared.Damage.Events; using Content.Shared.StatusEffectNew; namespace Content.Shared.Damage.Systems; public partial class SharedStaminaSystem { private void InitializeModifier() { SubscribeLocalEvent(OnEffectApplied); SubscribeLocalEvent(OnEffectRemoved); SubscribeLocalEvent>(OnRefreshCritThreshold); } private void OnEffectApplied(Entity ent, ref StatusEffectAppliedEvent args) { RefreshStaminaCritThreshold(args.Target); } private void OnEffectRemoved(Entity ent, ref StatusEffectRemovedEvent args) { RefreshStaminaCritThreshold(args.Target); } private void OnRefreshCritThreshold(Entity ent, ref StatusEffectRelayedEvent args) { var evArgs = args.Args; evArgs.Modifier = Math.Max(ent.Comp.Modifier, evArgs.Modifier); // We only pick the highest value, to avoid stacking different status effects. args.Args = evArgs; } public void RefreshStaminaCritThreshold(Entity entity) { if (!Resolve(entity, ref entity.Comp)) return; var ev = new RefreshStaminaCritThresholdEvent(entity.Comp.BaseCritThreshold); RaiseLocalEvent(entity, ref ev); entity.Comp.CritThreshold = ev.ThresholdValue * ev.Modifier; } }