using Content.Server.Emp; using Content.Shared.Chemistry.Reagent; using Robust.Server.GameObjects; using Robust.Shared.Prototypes; namespace Content.Server.Chemistry.ReactionEffects; [DataDefinition] public sealed partial class EmpReactionEffect : ReagentEffect { /// /// Impulse range per unit of reagent /// [DataField("rangePerUnit")] public float EmpRangePerUnit = 0.5f; /// /// Maximum impulse range /// [DataField("maxRange")] public float EmpMaxRange = 10; /// /// How much energy will be drain from sources /// [DataField] public float EnergyConsumption = 12500; /// /// Amount of time entities will be disabled /// [DataField("duration")] public float DisableDuration = 15; protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-emp-reaction-effect", ("chance", Probability)); public override void Effect(ReagentEffectArgs args) { var tSys = args.EntityManager.System(); var transform = args.EntityManager.GetComponent(args.SolutionEntity); var range = MathF.Min((float) (args.Quantity*EmpRangePerUnit), EmpMaxRange); args.EntityManager.System() .EmpPulse(tSys.GetMapCoordinates(args.SolutionEntity, xform: transform), range, EnergyConsumption, DisableDuration); } }