Files
crystall-punk-14/Content.Shared/_CP14/MagicWeakness/CP14SharedMagicWeaknessSystem.cs
Ed 36d3ba35d1 Replace SharedStatusEffectsSystem with StatusEffectsSystem
Updated references from SharedStatusEffectsSystem to StatusEffectsSystem in spell and magic weakness systems to use the correct status effects system implementation.
2025-07-21 11:36:17 +03:00

99 lines
3.8 KiB
C#

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;
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!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14MagicUnsafeDamageComponent, CP14MagicEnergyBurnOutEvent>(OnMagicEnergyBurnOutDamage);
SubscribeLocalEvent<CP14MagicUnsafeDamageComponent, CP14MagicEnergyOverloadEvent>(OnMagicEnergyOverloadDamage);
SubscribeLocalEvent<CP14MagicUnsafeSleepComponent, CP14MagicEnergyBurnOutEvent>(OnMagicEnergyBurnOutSleep);
SubscribeLocalEvent<CP14MagicUnsafeSleepComponent, CP14MagicEnergyOverloadEvent>(OnMagicEnergyOverloadSleep);
}
private void OnMagicEnergyBurnOutSleep(Entity<CP14MagicUnsafeSleepComponent> 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<CP14MagicUnsafeSleepComponent> 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 OnMagicEnergyBurnOutDamage(Entity<CP14MagicUnsafeDamageComponent> 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<CP14MagicUnsafeDamageComponent> 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);
}
}