using Content.Shared._CP14.MagicEnergy; using Content.Shared.Bed.Sleep; using Content.Shared.Damage; using Content.Shared.IdentityManagement; using Content.Shared.Popups; using Content.Shared.StatusEffectNew; using Content.Shared.Trigger.Systems; namespace Content.Shared._CP14.MagicWeakness; public abstract class CP14SharedMagicWeaknessSystem : EntitySystem { [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly TriggerSystem _trigger = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMagicEnergyBurnOutDamage); SubscribeLocalEvent(OnMagicEnergyOverloadDamage); SubscribeLocalEvent(OnMagicEnergyBurnOutSleep); SubscribeLocalEvent(OnMagicEnergyOverloadSleep); SubscribeLocalEvent(OnMagicEnergyBurnOutTrigger); SubscribeLocalEvent(OnMagicEnergyOverloadTrigger); } 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.TryAddStatusEffectDuration( ent, SleepingSystem.StatusEffectForcedSleeping, TimeSpan.FromSeconds(ent.Comp.SleepPerEnergy * (float)args.BurnOutEnergy)); } } 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.TryAddStatusEffectDuration( ent, SleepingSystem.StatusEffectForcedSleeping, TimeSpan.FromSeconds(ent.Comp.SleepPerEnergy * (float)args.OverloadEnergy)); } } private void OnMagicEnergyOverloadTrigger(Entity ent, ref CP14MagicEnergyOverloadEvent args) { _trigger.Trigger(ent); } private void OnMagicEnergyBurnOutTrigger(Entity ent, ref CP14MagicEnergyBurnOutEvent args) { _trigger.Trigger(ent); } private void OnMagicEnergyBurnOutDamage(Entity ent, ref CP14MagicEnergyBurnOutEvent args) { //TODO: Idk why this dont popup recipient //Others popup _popup.PopupPredicted(Loc.GetString("cp14-magic-energy-damage-burn-out"), Loc.GetString("cp14-magic-energy-damage-burn-out-other", ("name", Identity.Name(ent, EntityManager))), ent, ent); //Local self popup _popup.PopupEntity( Loc.GetString("cp14-magic-energy-damage-burn-out"), ent, ent, PopupType.LargeCaution); _damageable.TryChangeDamage(ent, ent.Comp.DamagePerEnergy * args.BurnOutEnergy, interruptsDoAfters: false); } private void OnMagicEnergyOverloadDamage(Entity ent, ref CP14MagicEnergyOverloadEvent args) { //TODO: Idk why this dont popup recipient //Others popup _popup.PopupPredicted(Loc.GetString("cp14-magic-energy-damage-overload"), Loc.GetString("cp14-magic-energy-damage-overload-other", ("name", Identity.Name(ent, EntityManager))), ent, ent); //Local self popup _popup.PopupEntity( Loc.GetString("cp14-magic-energy-damage-overload"), ent, ent, PopupType.LargeCaution); _damageable.TryChangeDamage(ent, ent.Comp.DamagePerEnergy * args.OverloadEnergy, interruptsDoAfters: false); } }