fish-station/Content.Shared/EntityEffects/Effects/StatusEffects/ElectrocuteEntityEffectSystem.cs
Princess Cheeseballs 4be7f9ca58 Traitor Chemicals Rebalance (#42484)
very small list of changes overall

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-01-29 15:00:17 +00:00

66 lines
2.3 KiB
C#

using Content.Shared.Electrocution;
using Content.Shared.StatusEffect;
using Robust.Shared.Prototypes;
namespace Content.Shared.EntityEffects.Effects.StatusEffects;
/// <summary>
/// Electrocutes this entity for a given amount of damage and time.
/// The shock damage applied by this effect is modified by scale.
/// </summary>
/// <inheritdoc cref="EntityEffectSystem{T,TEffect}"/>
public sealed partial class ElectrocuteEntityEffectSystem : EntityEffectSystem<StatusEffectsComponent, Electrocute>
{
[Dependency] private readonly SharedElectrocutionSystem _electrocution = default!;
// TODO: When electrocution is new status, change this to new status
protected override void Effect(Entity<StatusEffectsComponent> entity, ref EntityEffectEvent<Electrocute> args)
{
var effect = args.Effect;
_electrocution.TryDoElectrocution(entity,
null,
(int)(args.Scale * effect.ShockDamage),
effect.ElectrocuteTime,
effect.Refresh,
siemensCoefficient: effect.SiemensCoefficient,
ignoreInsulation: effect.BypassInsulation);
}
}
/// <inheritdoc cref="EntityEffect"/>
public sealed partial class Electrocute : EntityEffectBase<Electrocute>
{
/// <summary>
/// Time we electrocute this entity
/// </summary>
[DataField]
public TimeSpan ElectrocuteTime = TimeSpan.FromSeconds(2);
/// <summary>
/// Shock damage we apply to the entity.
/// </summary>
[DataField]
public int ShockDamage = 5;
/// <summary>
/// Do we refresh the duration? Or add more duration if it already exists.
/// </summary>
[DataField]
public bool Refresh = true;
/// <summary>
/// Should we by bypassing insulation?
/// </summary>
[DataField]
public bool BypassInsulation = true;
/// <summary>
/// How much electricity is being passed through the body basically. Lower means less oomph.
/// </summary>
[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));
}