using Content.Server.Chemistry.Components; using Content.Shared._Goobstation.Weapons.Ranged; using Content.Shared.Weapons.Ranged.Events; using Content.Shared.Weapons.Ranged.Systems; namespace Content.Server._Goobstation.Weapons.Ranged; /// /// System for handling projectiles and altering their properties when fired from a Syringe Gun. /// public sealed class SyringeGunSystem : EntitySystem { public override void Initialize() { SubscribeLocalEvent(OnFire); SubscribeLocalEvent(OnShootAttempt); } private void OnShootAttempt(Entity ent, ref AttemptShootEvent args) { args.ThrowItems = true; } private void OnFire(Entity gun, ref AmmoShotEvent args) { foreach (var projectile in args.FiredProjectiles) { if (TryComp(projectile, out SolutionInjectWhileEmbeddedComponent? whileEmbedded)) { whileEmbedded.Injections = null; // uncap the injection maximum whileEmbedded.PierceArmorOverride = gun.Comp.PierceArmor; whileEmbedded.SpeedMultiplier = gun.Comp.InjectionSpeedMultiplier; // store it in the component to reset it whileEmbedded.UpdateInterval /= whileEmbedded.SpeedMultiplier; } if (TryComp(projectile, out SolutionInjectOnEmbedComponent? onEmbed)) onEmbed.PierceArmorOverride = gun.Comp.PierceArmor; } } }