diff --git a/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs b/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs index 4c5bd236b5..5aae1c2722 100644 --- a/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs @@ -204,6 +204,9 @@ public sealed class NetworkConfiguratorSystem : SharedNetworkConfiguratorSystem _uiSystem.TryCloseAll(uid, NetworkConfiguratorUiKey.Configure); } + /// + /// Toggles between linking and listing mode + /// private void SwitchMode(EntityUid? userUid, EntityUid configuratorUid, NetworkConfiguratorComponent configurator) { if (Delay(configurator)) @@ -217,15 +220,32 @@ public sealed class NetworkConfiguratorSystem : SharedNetworkConfiguratorSystem if (!configurator.LinkModeActive) configurator.ActiveDeviceLink = null; - var locString = configurator.LinkModeActive ? "network-configurator-mode-link" : "network-configurator-mode-list"; - _popupSystem.PopupEntity(Loc.GetString("network-configurator-switched-mode", ("mode", Loc.GetString(locString))), - configuratorUid, userUid.Value); + UpdateModeAppearance(userUid.Value, configuratorUid, configurator); + } + /// + /// Sets the mode to linking or list depending on the link mode parameter + /// > + private void SetMode(EntityUid configuratorUid, NetworkConfiguratorComponent configurator, EntityUid userUid, bool linkMode) + { + configurator.LinkModeActive = linkMode; + + if (!linkMode) + configurator.ActiveDeviceLink = null; + + UpdateModeAppearance(userUid, configuratorUid, configurator); + } + + /// + /// Updates the configurators appearance and plays a sound indicating that the mode switched + /// + private void UpdateModeAppearance(EntityUid userUid, EntityUid configuratorUid, NetworkConfiguratorComponent configurator) + { Dirty(configurator); _appearanceSystem.SetData(configuratorUid, NetworkConfiguratorVisuals.Mode, configurator.LinkModeActive); var pitch = configurator.LinkModeActive ? 1 : 0.8f; - _audioSystem.PlayPvs(configurator.SoundSwitchMode, userUid.Value, AudioParams.Default.WithVolume(1.5f).WithPitchScale(pitch)); + _audioSystem.PlayPvs(configurator.SoundSwitchMode, userUid, AudioParams.Default.WithVolume(1.5f).WithPitchScale(pitch)); } /// @@ -262,6 +282,8 @@ public sealed class NetworkConfiguratorSystem : SharedNetworkConfiguratorSystem if (!canReach || !target.HasValue) return; + DetermineMode(uid, configurator, target, user); + if (configurator.LinkModeActive) { TryLinkDevice(uid, configurator, target, user); @@ -277,6 +299,23 @@ public sealed class NetworkConfiguratorSystem : SharedNetworkConfiguratorSystem OpenDeviceListUi(target, user, configurator); } + private void DetermineMode(EntityUid configuratorUid, NetworkConfiguratorComponent configurator, EntityUid? target, EntityUid userUid) + { + var hasLinking = HasComp(target) || HasComp(target); + + if (hasLinking && HasComp(target) || hasLinking == configurator.LinkModeActive) + return; + + if (hasLinking) + { + SetMode(configuratorUid, configurator, userUid, true); + return; + } + + if (HasComp(target)) + SetMode(configuratorUid, configurator, userUid, false); + } + #endregion #region Verbs diff --git a/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs b/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs index 128c328f28..b0b675ac0b 100644 --- a/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs +++ b/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs @@ -56,7 +56,7 @@ public sealed class NetworkConfiguratorComponent : Component public SoundSpecifier SoundNoAccess = new SoundPathSpecifier("/Audio/Machines/custom_deny.ogg"); [DataField("soundSwitchMode")] - public SoundSpecifier SoundSwitchMode = new SoundPathSpecifier("/Audio/Machines/beep.ogg"); + public SoundSpecifier SoundSwitchMode = new SoundPathSpecifier("/Audio/Machines/quickbeep.ogg"); } [Serializable, NetSerializable] diff --git a/Resources/Audio/Machines/attributions.yml b/Resources/Audio/Machines/attributions.yml index 0550a64f7c..a3aeabef8f 100644 --- a/Resources/Audio/Machines/attributions.yml +++ b/Resources/Audio/Machines/attributions.yml @@ -27,3 +27,8 @@ license: "CC-BY-4.0" copyright: "Created by AUDACITIER (freesound), converted to MONO and .ogg and edited by EmoGarbage404 (github)." source: "https://freesound.org/people/AUDACITIER/sounds/629196/" + +- files: ["quickbeep.ogg"] + license: "CC0-1.0" + copyright: "Created by BasedUser#2215 on discord" + source: "https://discord.com/channels/310555209753690112/536955542913024015/1066824680188690452" diff --git a/Resources/Audio/Machines/quickbeep.ogg b/Resources/Audio/Machines/quickbeep.ogg new file mode 100644 index 0000000000..90bc061b58 Binary files /dev/null and b/Resources/Audio/Machines/quickbeep.ogg differ diff --git a/Resources/Locale/en-US/medical/components/cloning-console-component.ftl b/Resources/Locale/en-US/medical/components/cloning-console-component.ftl index aecafad5e5..ceb1cdaf85 100644 --- a/Resources/Locale/en-US/medical/components/cloning-console-component.ftl +++ b/Resources/Locale/en-US/medical/components/cloning-console-component.ftl @@ -7,8 +7,8 @@ cloning-console-window-no-patient-data-text = No patient data. cloning-console-window-id-blank = ID: cloning-console-window-scanner-details-label = Genetic Scanner Status cloning-console-window-pod-details-label = Cloning Pod Status -cloning-console-window-no-scanner-detected-label = Link a genetic scanner with a multitool. -cloning-console-window-no-clone-pod-detected-label = Link a cloning pod with a multitool. +cloning-console-window-no-scanner-detected-label = Link a genetic scanner with a multitool or network configurator. +cloning-console-window-no-clone-pod-detected-label = Link a cloning pod with a multitool or network configurator. cloning-console-window-scanner-far-label = Genetic Scanner Too Far Away cloning-console-window-clone-pod-far-label = Cloning Pod Too Far Away cloning-console-eject-body-button = Eject Body diff --git a/Resources/Locale/en-US/paper/book-atmos.ftl b/Resources/Locale/en-US/paper/book-atmos.ftl index 7e7755f9ca..abbb67bc6f 100644 --- a/Resources/Locale/en-US/paper/book-atmos.ftl +++ b/Resources/Locale/en-US/paper/book-atmos.ftl @@ -36,7 +36,7 @@ book-text-atmos-alarms = Air alarms are located throughout stations to allow man - Fill: Disables scrubbers and sets vents to their maximum pressure - Panic: Disables vents and sets scrubbers to siphon - A multitool can be used to link devices to air alarms. + A multitool or network configurator can be used to link devices to air alarms. book-text-atmos-vents = Below is a quick reference guide to several atmospheric devices: