using Content.Shared._CP14.MagicEnergy; using Content.Shared.Bed.Sleep; using Content.Shared.Damage; using Content.Shared.Popups; using Content.Shared.StatusEffect; namespace Content.Shared._CP14.MagicWeakness; public partial class CP14MagicWeaknessSystem : EntitySystem { [ValidatePrototypeId] private const string StatusEffectKey = "ForcedSleep"; [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMagicEnergyBurnOutDamage); SubscribeLocalEvent(OnMagicEnergyOverloadDamage); SubscribeLocalEvent(OnMagicEnergyBurnOutSleep); SubscribeLocalEvent(OnMagicEnergyOverloadSleep); } private void OnMagicEnergyBurnOutSleep(Entity ent, ref CP14MagicEnergyBurnOutEvent args) { if (args.BurnOutEnergy > ent.Comp.SleepThreshold) { _popup.PopupEntity(Loc.GetString("cp14-magic-energy-damage-burn-out-fall"), ent, ent, PopupType.LargeCaution); _statusEffects.TryAddStatusEffect(ent, StatusEffectKey, TimeSpan.FromSeconds(ent.Comp.SleepPerEnergy * (float)args.BurnOutEnergy), false); } } private void OnMagicEnergyOverloadSleep(Entity ent, ref CP14MagicEnergyOverloadEvent args) { if (args.OverloadEnergy > ent.Comp.SleepThreshold) { _popup.PopupEntity(Loc.GetString("cp14-magic-energy-damage-burn-out-fall"), ent, ent, PopupType.LargeCaution); _statusEffects.TryAddStatusEffect(ent, StatusEffectKey, TimeSpan.FromSeconds(ent.Comp.SleepPerEnergy * (float)args.OverloadEnergy), false); } } private void OnMagicEnergyBurnOutDamage(Entity ent, ref CP14MagicEnergyBurnOutEvent args) { _popup.PopupEntity(Loc.GetString("cp14-magic-energy-damage-burn-out"), ent, ent, PopupType.LargeCaution); _damageable.TryChangeDamage(ent, ent.Comp.DamagePerEnergy * args.BurnOutEnergy); } private void OnMagicEnergyOverloadDamage(Entity ent, ref CP14MagicEnergyOverloadEvent args) { _popup.PopupEntity(Loc.GetString("cp14-magic-energy-damage-overload"), ent, ent, PopupType.LargeCaution); _damageable.TryChangeDamage(ent, ent.Comp.DamagePerEnergy * args.OverloadEnergy); } }