1
0

Electrocute.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Content.Server.Electrocution;
  2. using Content.Shared.EntityEffects;
  3. using Robust.Shared.Prototypes;
  4. namespace Content.Server.EntityEffects.Effects;
  5. public sealed partial class Electrocute : EntityEffect
  6. {
  7. [DataField] public int ElectrocuteTime = 2;
  8. [DataField] public int ElectrocuteDamageScale = 5;
  9. /// <remarks>
  10. /// true - refresh electrocute time, false - accumulate electrocute time
  11. /// </remarks>
  12. [DataField] public bool Refresh = true;
  13. protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
  14. => Loc.GetString("reagent-effect-guidebook-electrocute", ("chance", Probability), ("time", ElectrocuteTime));
  15. public override bool ShouldLog => true;
  16. public override void Effect(EntityEffectBaseArgs args)
  17. {
  18. if (args is EntityEffectReagentArgs reagentArgs)
  19. {
  20. reagentArgs.EntityManager.System<ElectrocutionSystem>().TryDoElectrocution(reagentArgs.TargetEntity, null,
  21. Math.Max((reagentArgs.Quantity * ElectrocuteDamageScale).Int(), 1), TimeSpan.FromSeconds(ElectrocuteTime), Refresh, ignoreInsulation: true);
  22. if (reagentArgs.Reagent != null)
  23. reagentArgs.Source?.RemoveReagent(reagentArgs.Reagent.ID, reagentArgs.Quantity);
  24. } else
  25. {
  26. args.EntityManager.System<ElectrocutionSystem>().TryDoElectrocution(args.TargetEntity, null,
  27. Math.Max(ElectrocuteDamageScale, 1), TimeSpan.FromSeconds(ElectrocuteTime), Refresh, ignoreInsulation: true);
  28. }
  29. }
  30. }