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: