using Content.Server.DeviceLinking.Events; using Content.Server.DeviceLinking.Systems; using Content.Server.Electrocution; using Robust.Server.Containers; using Robust.Shared.Audio.Systems; namespace Content.Server.White.ShockClothing; public sealed class ShockClothingSystem : EntitySystem { [Dependency] private readonly DeviceLinkSystem _deviceLink = default!; [Dependency] private readonly ElectrocutionSystem _electrocution = default!; [Dependency] private readonly ContainerSystem _containerSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnSignalReceived); } private void OnInit(EntityUid uid, ShockClothingComponent component, ComponentInit args) { _deviceLink.EnsureSinkPorts(uid, component.TriggerPort); } private void OnSignalReceived(EntityUid uid, ShockClothingComponent component, ref SignalReceivedEvent args) { if (args.Port != component.TriggerPort) return; _audio.PlayPvs(component.ZapSound, uid); if (!_containerSystem.TryGetContainingContainer(uid, out var container)) return; _electrocution.TryDoElectrocution(container.Owner, uid, 1, TimeSpan.FromSeconds(5), true, ignoreInsulation: true); } }