using Content.Server.Emp; using Content.Shared.EntityEffects; using Content.Shared.Chemistry.Reagent; using Robust.Server.GameObjects; using Robust.Shared.Prototypes; namespace Content.Server.EntityEffects.Effects; [DataDefinition] public sealed partial class EmpReactionEffect : EntityEffect { /// /// Impulse range per unit of quantity /// [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(EntityEffectBaseArgs args) { var tSys = args.EntityManager.System(); var transform = args.EntityManager.GetComponent(args.TargetEntity); var range = EmpRangePerUnit; if (args is EntityEffectReagentArgs reagentArgs) { range = MathF.Min((float) (reagentArgs.Quantity * EmpRangePerUnit), EmpMaxRange); } args.EntityManager.System() .EmpPulse(tSys.GetMapCoordinates(args.TargetEntity, xform: transform), range, EnergyConsumption, DisableDuration); } }