using Content.Shared.Electrocution; using Content.Shared.StatusEffect; using Robust.Shared.Prototypes; namespace Content.Shared.EntityEffects.Effects.StatusEffects; // TODO: When Electrocution is moved to new Status, make this use StatusEffectsContainerComponent. /// /// Electrocutes this entity for a given amount of damage and time. /// The shock damage applied by this effect is modified by scale. /// /// public sealed partial class ElectrocuteEntityEffectSystem : EntityEffectSystem { [Dependency] private readonly SharedElectrocutionSystem _electrocution = default!; // TODO: When electrocution is new status, change this to new status protected override void Effect(Entity entity, ref EntityEffectEvent args) { var effect = args.Effect; _electrocution.TryDoElectrocution(entity, null, (int)(args.Scale * effect.ShockDamage), effect.ElectrocuteTime, effect.Refresh, ignoreInsulation: effect.BypassInsulation); } } /// public sealed partial class Electrocute : EntityEffectBase { /// /// Time we electrocute this entity /// [DataField] public TimeSpan ElectrocuteTime = TimeSpan.FromSeconds(2); /// /// Shock damage we apply to the entity. /// [DataField] public int ShockDamage = 5; /// /// Do we refresh the duration? Or add more duration if it already exists. /// [DataField] public bool Refresh = true; /// /// Should we by bypassing insulation? /// [DataField] public bool BypassInsulation = true; public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("entity-effect-guidebook-electrocute", ("chance", Probability), ("time", ElectrocuteTime.TotalSeconds)); }