using Content.Shared.Electrocution; using Content.Shared.StatusEffect; using Robust.Shared.Prototypes; namespace Content.Shared.EntityEffects.Effects.StatusEffects; /// /// 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, siemensCoefficient: effect.SiemensCoefficient, 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; /// /// How much electricity is being passed through the body basically. Lower means less oomph. /// [DataField] public float SiemensCoefficient = 1f; public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("entity-effect-guidebook-electrocute", ("chance", Probability), ("time", ElectrocuteTime.TotalSeconds), ("stuns", SiemensCoefficient > 0.5f)); }