From 4109ba1d57a03eda9a5fbf0f0e07b3aea8314f2d Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 26 Aug 2026 02:09:26 +0300
Subject: [PATCH 01/12] golobby
---
Content.Client/Ghost/GhostSystem.cs | 6 +
.../Systems/Ghost/GhostUIController.cs | 7 ++
.../Systems/Ghost/Widgets/GhostGui.xaml | 2 +
.../Systems/Ghost/Widgets/GhostGui.xaml.cs | 2 +
.../GameTicking/GameTicker.Player.cs | 2 +-
.../GameTicking/GameTicker.Spawning.cs | 9 ++
Content.Server/GameTicking/GameTicker.cs | 4 +-
.../_CorvaxGoob/Ghost/GhostGoLobbySystem.cs | 107 ++++++++++++++++++
Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs | 9 ++
.../_CorvaxGoob/Events/GhostGoLobbyEvent.cs | 6 +
.../_corvaxgoob/ghost/ghost-go-lobby.ftl | 6 +
11 files changed, 158 insertions(+), 2 deletions(-)
create mode 100644 Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
create mode 100644 Content.Shared/_CorvaxGoob/Events/GhostGoLobbyEvent.cs
create mode 100644 Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
diff --git a/Content.Client/Ghost/GhostSystem.cs b/Content.Client/Ghost/GhostSystem.cs
index 417e4784d462..94e652e556dc 100644
--- a/Content.Client/Ghost/GhostSystem.cs
+++ b/Content.Client/Ghost/GhostSystem.cs
@@ -2,6 +2,7 @@
using Content.Client._Shitcode.Wizard.Systems;
using Content.Client.Movement.Systems;
+using Content.Shared._CorvaxGoob.Events;
using Content.Shared.Actions;
using Content.Shared.Ghost;
using Robust.Client.Console;
@@ -209,6 +210,11 @@ public void GhostBarSpawn() // CorvaxGoob-GhostBar
RaiseNetworkEvent(new GhostBarSpawnEvent());
}
+ public void GhostGoLobby() // CorvaxGoob-Golobby
+ {
+ RaiseNetworkEvent(new GhostGoLobbyEvent());
+ }
+
public void ToggleGhostVisibility(bool? visibility = null)
{
GhostVisibility = visibility ?? !GhostVisibility;
diff --git a/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs b/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
index cb7286cf4bc5..a5bd7c1c6cbf 100644
--- a/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
+++ b/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
@@ -131,6 +131,7 @@ public void LoadGui()
Gui.RequestWarpsPressed += RequestWarps;
Gui.ReturnToBodyPressed += ReturnToBody;
Gui.GhostRolesPressed += GhostRolesPressed;
+ Gui.GhostGoLobbyPressed += GhostGoLobby; // CorvaxGoob-GoLobby
Gui.GhostBarPressed += GhostBarPressed; // CorvaxGoob-GhostBar
Gui.GhostBarWindow.SpawnButtonPressed += GhostBarSpawnPressed; // CorvaxGoob-GhostBar
Gui.ThunderdomePressed += ThunderdomePressed; // Goobstation - Thunderdome
@@ -148,6 +149,7 @@ public void UnloadGui()
Gui.RequestWarpsPressed -= RequestWarps;
Gui.ReturnToBodyPressed -= ReturnToBody;
Gui.GhostRolesPressed -= GhostRolesPressed;
+ Gui.GhostGoLobbyPressed -= GhostGoLobby; // CorvaxGoob-GoLobby
Gui.ThunderdomePressed -= ThunderdomePressed; // Goobstation - Thunderdome
Gui.TargetWindow.WarpClicked -= OnWarpClicked;
@@ -159,6 +161,11 @@ private void ReturnToBody()
_system?.ReturnToBody();
}
+ private void GhostGoLobby() // CorvaxGoob-GoLobby
+ {
+ _system?.GhostGoLobby();
+ }
+
private void RequestWarps()
{
_system?.RequestWarps();
diff --git a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml
index 72b306c1cc94..c6de76730919 100644
--- a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml
+++ b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml
@@ -12,5 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later
+
+
diff --git a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
index c0772186cbcf..46cb79b70fd5 100644
--- a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
+++ b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
@@ -20,6 +20,7 @@ public sealed partial class GhostGui : UIWidget
public event Action? GhostRolesPressed;
public event Action? GhostBarPressed; // CorvaxGoob-GhostBar
public event Action? ThunderdomePressed; // Goobstation - Thunderdome
+ public event Action? GhostGoLobbyPressed; // CorvaxGoob-GoLobby
private int _prevNumberRoles;
public GhostGui()
@@ -38,6 +39,7 @@ public GhostGui()
GhostRolesButton.OnPressed += _ => GhostRolesButton.StyleClasses.Remove(StyleClass.Negative);
GhostBarButton.OnPressed += _ => GhostBarPressed?.Invoke(); // CorvaxGoob-GhostBar
ThunderdomeButton.OnPressed += _ => ThunderdomePressed?.Invoke(); // Goobstation - Thunderdome
+ GhostGoLobbyButton.OnPressed += _ => GhostGoLobbyPressed?.Invoke(); // CorvaxGoob-GOlobby
}
public void Hide()
diff --git a/Content.Server/GameTicking/GameTicker.Player.cs b/Content.Server/GameTicking/GameTicker.Player.cs
index dfc2e5a13a71..fa64a144e666 100644
--- a/Content.Server/GameTicking/GameTicker.Player.cs
+++ b/Content.Server/GameTicking/GameTicker.Player.cs
@@ -210,7 +210,7 @@ public void PlayerJoinGame(ICommonSession session, bool silent = false)
RaiseNetworkEvent(new TickerJoinGameEvent(), session.Channel);
}
- private void PlayerJoinLobby(ICommonSession session)
+ public void PlayerJoinLobby(ICommonSession session) // CorvaxGoob Made public
{
_playerGameStatuses[session.UserId] = LobbyEnabled ? PlayerGameStatus.NotReadyToPlay : PlayerGameStatus.ReadyToPlay;
_db.AddRoundPlayers(RoundId, session.UserId);
diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs
index 6c4729ad9727..d4a5dea08101 100644
--- a/Content.Server/GameTicking/GameTicker.Spawning.cs
+++ b/Content.Server/GameTicking/GameTicker.Spawning.cs
@@ -171,6 +171,15 @@ private void SpawnPlayer(ICommonSession player,
if (DummyTicker)
return;
+ // CorvaxGoob-GoLobby-start
+ var selectedSlot = _ghostGoLobby.GetSelectedSlot(player.UserId);
+ if (!_ghostGoLobby.CanUseCharacter(player.UserId, selectedSlot))
+ {
+ _chatManager.DispatchServerMessage(player,Loc.GetString("ghost-go-lobby-used"));
+ return;
+ }
+ // CorvaxGoob-GoLobby-end
+
if (station == EntityUid.Invalid)
{
var stations = GetSpawnableStations();
diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs
index 1bf41eafa111..5831905fe316 100644
--- a/Content.Server/GameTicking/GameTicker.cs
+++ b/Content.Server/GameTicking/GameTicker.cs
@@ -6,6 +6,7 @@
using Content.Server.Chat.Systems;
using Content.Server.Database;
using Content.Server.Ghost;
+using Content.Server._CorvaxGoob.Ghost;
using Content.Server.Maps;
using Content.Server.Players.PlayTimeTracking;
using Content.Server.Preferences.Managers;
@@ -55,6 +56,7 @@ public sealed partial class GameTicker : SharedGameTicker
[Dependency] private readonly MapLoaderSystem _loader = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly GhostSystem _ghost = default!;
+ [Dependency] private readonly GhostGoLobbySystem _ghostGoLobby = default!; // CorvaxGoob-GoLobby
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly PlayTimeTrackingSystem _playTimeTrackings = default!;
[Dependency] private readonly PvsOverrideSystem _pvsOverride = default!;
@@ -136,4 +138,4 @@ public override void Update(float frameTime)
UpdateGameRules();
}
}
-}
\ No newline at end of file
+}
diff --git a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
new file mode 100644
index 000000000000..900f57848ea2
--- /dev/null
+++ b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
@@ -0,0 +1,107 @@
+using Content.Server.Chat.Managers;
+using Content.Server.GameTicking;
+using Content.Server.Mind;
+using Content.Server.Players.PlayTimeTracking;
+using Content.Server.Preferences.Managers;
+using Content.Shared._CorvaxGoob.CCCVars;
+using Content.Shared._CorvaxGoob.Events;
+using Content.Shared.GameTicking;
+using Content.Shared.Ghost;
+using Content.Shared.Players.PlayTimeTracking;
+using Content.Shared.Popups;
+using Robust.Server.Player;
+using Robust.Shared.Configuration;
+using Robust.Shared.Network;
+using Robust.Shared.Player;
+using Robust.Shared.Timing;
+
+namespace Content.Server._CorvaxGoob.Ghost;
+
+public sealed class GhostGoLobbySystem : EntitySystem
+{
+ [Dependency] private readonly IConfigurationManager _cfg = default!;
+ [Dependency] private readonly GameTicker _ticker = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
+ [Dependency] private readonly MindSystem _mind = default!;
+ [Dependency] private readonly PlayTimeTrackingManager _playTime = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+ [Dependency] private readonly IChatManager _chatManager = default!;
+ [Dependency] private readonly IServerPreferencesManager _prefsManager = default!;
+
+ private bool _enabled;
+ private TimeSpan _requiredPlaytime;
+ private TimeSpan _deathTime;
+
+ private readonly Dictionary> _usedCharacterSlots = new();
+
+ public int GetSelectedSlot(NetUserId userId)
+ {
+ return _prefsManager.GetPreferences(userId).SelectedCharacterIndex;
+ }
+
+ public bool CanUseCharacter(NetUserId userId, int characterSlot)
+ {
+ return !_usedCharacterSlots.TryGetValue(userId, out var slots) || !slots.Contains(characterSlot);
+ }
+
+ public override void Initialize()
+ {
+ SubscribeNetworkEvent(OnGhostGoLobby);
+ SubscribeLocalEvent(OnRunLevelChanged);
+
+ Subs.CVar(_cfg, CCCVars.GhostGoLobbyTimeHours, value => _requiredPlaytime = TimeSpan.FromHours(value), true);
+ Subs.CVar(_cfg, CCCVars.GhostGoLobbyDeathTimeMinutes, value => _deathTime = TimeSpan.FromMinutes(value), true);
+ }
+
+ private void OnRunLevelChanged(GameRunLevelChangedEvent ev)
+ {
+ if (ev.New == GameRunLevel.PreRoundLobby)
+ _usedCharacterSlots.Clear();
+ }
+
+ private void OnGhostGoLobby(GhostGoLobbyEvent msg, EntitySessionEventArgs args)
+ {
+ if (args.SenderSession.AttachedEntity is not { Valid: true } attached)
+ return;
+
+ TryGhostGoLobby(attached, args.SenderSession);
+ }
+
+ private void TryGhostGoLobby(EntityUid uid, ICommonSession session)
+ {
+ if (!_cfg.GetCVar(CCCVars.GhostGoLobbyEnabled))
+ {
+ _popup.PopupEntity(Loc.GetString("ghost-go-lobby-disabled"), uid, uid);
+ return;
+ }
+
+ if (_playTime.TryGetTrackerTime(session, PlayTimeTrackingShared.TrackerOverall, out var all)
+ && all.Value < _requiredPlaytime)
+ {
+ var remaining = (int) Math.Ceiling((_requiredPlaytime - all.Value).TotalHours);
+ _popup.PopupEntity(Loc.GetString("ghost-go-lobby-playtime", ("hours", remaining)), uid, uid);
+ return;
+ }
+
+ if (!TryComp(uid, out var ghost))
+ return;
+
+ var timeSinceDeath = _timing.CurTime - ghost.TimeOfDeath;
+ if (timeSinceDeath < _deathTime)
+ {
+ var remaining = (int) Math.Ceiling((_deathTime - timeSinceDeath).TotalMinutes);
+ _popup.PopupEntity(Loc.GetString("ghost-go-lobby-deathtime", ("minutes", remaining)), uid, uid);
+ return;
+ }
+
+ var slot = GetSelectedSlot(session.UserId);
+ if (!_usedCharacterSlots.TryGetValue(session.UserId, out var slots))
+ _usedCharacterSlots[session.UserId] = slots = new HashSet();
+
+ slots.Add(slot);
+
+ _mind.WipeMind(session);
+
+ _ticker.PlayerJoinLobby(session);
+ }
+}
diff --git a/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs b/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
index f8e074e12389..b73aad76bfd3 100644
--- a/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
+++ b/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
@@ -151,4 +151,13 @@ public sealed class CCCVars
public static readonly CVarDef PhotoPlayTimeHours =
CVarDef.Create("photo.playtime_require_time", 20f, CVar.SERVERONLY);
+
+ public static readonly CVarDef GhostGoLobbyEnabled =
+ CVarDef.Create("ghost.go_lobby.enabled", true, CVar.SERVERONLY);
+
+ public static readonly CVarDef GhostGoLobbyTimeHours =
+ CVarDef.Create("ghost.go_lobby.require_time", 25f, CVar.SERVERONLY);
+
+ public static readonly CVarDef GhostGoLobbyDeathTimeMinutes =
+ CVarDef.Create("ghost.go_lobby.death_time", 30f, CVar.SERVERONLY);
}
diff --git a/Content.Shared/_CorvaxGoob/Events/GhostGoLobbyEvent.cs b/Content.Shared/_CorvaxGoob/Events/GhostGoLobbyEvent.cs
new file mode 100644
index 000000000000..e452c283b164
--- /dev/null
+++ b/Content.Shared/_CorvaxGoob/Events/GhostGoLobbyEvent.cs
@@ -0,0 +1,6 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._CorvaxGoob.Events;
+
+[Serializable, NetSerializable]
+public sealed class GhostGoLobbyEvent : EntityEventArgs;
diff --git a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
new file mode 100644
index 000000000000..59636179444a
--- /dev/null
+++ b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
@@ -0,0 +1,6 @@
+ghost-go-lobby-button = Вернуться в лобби
+
+ghost-go-lobby-disabled = Возвращение в лобби сейчас отключено.
+ghost-go-lobby-deathtime = Вернуться в лобби можно через {$minutes} мин.
+ghost-go-lobby-playtime = Вернуться в лобби после смерти могут только игроки с наигранным временем больше {$hours} ч.
+ghost-go-lobby-used = Выберите другого персонажа.
From 23b09ac32acfc3aff4111460d505e598712d378a Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 26 Aug 2026 17:50:46 +0300
Subject: [PATCH 02/12] Update
Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
Co-authored-by: cfif126 <94059374+cfif126@users.noreply.github.com>
---
Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
index 59636179444a..70b4326dd548 100644
--- a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
+++ b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
@@ -2,5 +2,5 @@ ghost-go-lobby-button = Вернуться в лобби
ghost-go-lobby-disabled = Возвращение в лобби сейчас отключено.
ghost-go-lobby-deathtime = Вернуться в лобби можно через {$minutes} мин.
-ghost-go-lobby-playtime = Вернуться в лобби после смерти могут только игроки с наигранным временем больше {$hours} ч.
+ghost-go-lobby-playtime = Вернуться в лобби после смерти могут только игроки, наигравшие более {$hours} ч.
ghost-go-lobby-used = Выберите другого персонажа.
From 709c324ee773fa624d6dc4fc456d9bf165d99aeb Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Thu, 27 Aug 2026 03:15:49 +0300
Subject: [PATCH 03/12] golobbychapter2
---
.../Systems/Ghost/GhostUIController.cs | 29 +++++++++++++++++--
.../Systems/Ghost/Widgets/GhostGui.xaml.cs | 5 ++--
.../Ghost/GhostGoLobbyConfirmWindow.xaml | 15 ++++++++++
.../Ghost/GhostGoLobbyConfirmWindow.xaml.cs | 25 ++++++++++++++++
.../_CorvaxGoob/Ghost/GhostGoLobbySystem.cs | 1 -
Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs | 4 +--
.../_corvaxgoob/ghost/ghost-go-lobby.ftl | 8 ++++-
7 files changed, 79 insertions(+), 8 deletions(-)
create mode 100644 Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml
create mode 100644 Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml.cs
diff --git a/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs b/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
index a5bd7c1c6cbf..43bf8777aaa9 100644
--- a/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
+++ b/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
@@ -1,12 +1,15 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
+using Content.Client._CorvaxGoob.Ghost;
using Content.Client.Ghost;
using Content.Client.UserInterface.Systems.Gameplay;
using Content.Client.UserInterface.Systems.Ghost.Widgets;
using Content.Goobstation.Shared.MisandryBox.Thunderdome;
+using Content.Shared._CorvaxGoob.CCCVars;
using Content.Shared.Ghost;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controllers;
+using Robust.Shared.Configuration; // CorvaxGoob-GoLobby
namespace Content.Client.UserInterface.Systems.Ghost;
@@ -15,10 +18,14 @@ public sealed class GhostUIController : UIController, IOnSystemChanged UIManager.GetActiveUIWidgetOrNull();
+ private GhostGoLobbyConfirmWindow? _goLobbyConfirmWindow; // CorvaxGoob-GoLobby
+ private bool _goLobbyEnabled = true; // CorvaxGoob-GoLobby
+
public override void Initialize()
{
base.Initialize();
@@ -30,6 +37,15 @@ public override void Initialize()
// Goobstation - Thunderdome
_entManager.EventBus.SubscribeEvent
(EventSource.Network, this, OnThunderdomePlayerCount);
+
+ // CorvaxGoob-GoLobby
+ _cfg.OnValueChanged(CCCVars.GhostGoLobbyEnabled, OnGoLobbyEnabledChanged, true);
+ }
+
+ private void OnGoLobbyEnabledChanged(bool enabled) // CorvaxGoob-GoLobby
+ {
+ _goLobbyEnabled = enabled;
+ UpdateGui();
}
private void OnScreenLoad()
@@ -70,7 +86,7 @@ public void UpdateGui()
}
Gui.Visible = _system?.IsGhost ?? false;
- Gui.Update(_system?.AvailableGhostRoleCount, _system?.Player?.CanReturnToBody, _system?.Player?.CanEnterGhostBar, _system?.Player?.CanTakeGhostRoles); // CorvaxGoob-GhostBar edit
+ Gui.Update(_system?.AvailableGhostRoleCount, _system?.Player?.CanReturnToBody, _system?.Player?.CanEnterGhostBar, _system?.Player?.CanTakeGhostRoles, _goLobbyEnabled); // CorvaxGoob-GhostBar edit, CorvaxGoob-GoLobby edit
}
private void OnPlayerRemoved(GhostComponent component)
@@ -163,7 +179,16 @@ private void ReturnToBody()
private void GhostGoLobby() // CorvaxGoob-GoLobby
{
- _system?.GhostGoLobby();
+ if (_goLobbyConfirmWindow is { Disposed: false })
+ {
+ _goLobbyConfirmWindow.MoveToFront();
+ return;
+ }
+
+ _goLobbyConfirmWindow = new GhostGoLobbyConfirmWindow();
+ _goLobbyConfirmWindow.ContinuePressed += () => _system?.GhostGoLobby();
+ _goLobbyConfirmWindow.OnClose += () => _goLobbyConfirmWindow = null;
+ _goLobbyConfirmWindow.OpenCentered();
}
private void RequestWarps()
diff --git a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
index 46cb79b70fd5..acd6feba68c7 100644
--- a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
+++ b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
@@ -49,14 +49,15 @@ public void Hide()
Visible = false;
}
- // Ghoob edit && CorvaxGoob edit : GhostBar
- public void Update(int? roles, bool? canReturnToBody, bool? canEnterGhostBar = true, bool? canTakeGhostRoles = true)
+ // Ghoob edit && CorvaxGoob edit : GhostBar and GhostGoLobby
+ public void Update(int? roles, bool? canReturnToBody, bool? canEnterGhostBar = true, bool? canTakeGhostRoles = true, bool? canGoLobby = true)
{
ReturnToBodyButton.Disabled = !canReturnToBody ?? true;
GhostBarButton.Disabled = !canEnterGhostBar ?? true; // CorvaxGoob-GhostBar
// Goobstation start
GhostRolesButton.Disabled = !canTakeGhostRoles ?? true;
// Goobstation end
+ GhostGoLobbyButton.Disabled = !canGoLobby ?? true; // CorvaxGoob-GoLobby
if (roles != null)
{
diff --git a/Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml b/Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml
new file mode 100644
index 000000000000..a00cba8b25b0
--- /dev/null
+++ b/Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml.cs b/Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml.cs
new file mode 100644
index 000000000000..1148f05cea47
--- /dev/null
+++ b/Content.Client/_CorvaxGoob/Ghost/GhostGoLobbyConfirmWindow.xaml.cs
@@ -0,0 +1,25 @@
+using Content.Client.UserInterface.Controls;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Utility;
+
+namespace Content.Client._CorvaxGoob.Ghost;
+
+[GenerateTypedNameReferences]
+public sealed partial class GhostGoLobbyConfirmWindow : FancyWindow
+{
+ public event Action? ContinuePressed;
+
+ public GhostGoLobbyConfirmWindow()
+ {
+ RobustXamlLoader.Load(this);
+
+ WarningLabel.SetMessage(FormattedMessage.FromMarkupPermissive(Loc.GetString("ghost-go-lobby-confirm")));
+
+ ContinueButton.OnPressed += _ =>
+ {
+ ContinuePressed?.Invoke();
+ Close();
+ };
+ }
+}
diff --git a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
index 900f57848ea2..e1f8f3c95d8b 100644
--- a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
+++ b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
@@ -71,7 +71,6 @@ private void TryGhostGoLobby(EntityUid uid, ICommonSession session)
{
if (!_cfg.GetCVar(CCCVars.GhostGoLobbyEnabled))
{
- _popup.PopupEntity(Loc.GetString("ghost-go-lobby-disabled"), uid, uid);
return;
}
diff --git a/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs b/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
index b73aad76bfd3..cf43992b871a 100644
--- a/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
+++ b/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
@@ -153,11 +153,11 @@ public sealed class CCCVars
CVarDef.Create("photo.playtime_require_time", 20f, CVar.SERVERONLY);
public static readonly CVarDef GhostGoLobbyEnabled =
- CVarDef.Create("ghost.go_lobby.enabled", true, CVar.SERVERONLY);
+ CVarDef.Create("ghost.go_lobby.enabled", true, CVar.SERVER | CVar.REPLICATED);
public static readonly CVarDef GhostGoLobbyTimeHours =
CVarDef.Create("ghost.go_lobby.require_time", 25f, CVar.SERVERONLY);
public static readonly CVarDef GhostGoLobbyDeathTimeMinutes =
- CVarDef.Create("ghost.go_lobby.death_time", 30f, CVar.SERVERONLY);
+ CVarDef.Create("ghost.go_lobby.death_time", 15f, CVar.SERVERONLY);
}
diff --git a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
index 59636179444a..d35eca540834 100644
--- a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
+++ b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
@@ -1,6 +1,12 @@
ghost-go-lobby-button = Вернуться в лобби
-ghost-go-lobby-disabled = Возвращение в лобби сейчас отключено.
ghost-go-lobby-deathtime = Вернуться в лобби можно через {$minutes} мин.
ghost-go-lobby-playtime = Вернуться в лобби после смерти могут только игроки с наигранным временем больше {$hours} ч.
ghost-go-lobby-used = Выберите другого персонажа.
+
+ghost-go-lobby-confirm-title = Возвращение в лобби
+ghost-go-lobby-confirm = Вы уверены, что хотите вернуться в лобби?
+ Вы не помните ничего из своей предыдущей жизни и не помните ничего из того, что узнали, будучи призраком.
+ Вам разрешается помнить знания об игре в целом, например, как готовить, как использовать предметы и т.д.
+ Вам [color=red]НЕ[/color] разрешается помнить или говорить имя, внешность и т.д. вашего предыдущего персонажа.
+ghost-go-lobby-confirm-continue = Продолжить
From 1704bf6138bc973af66114175e7dbe06ccfe51c4 Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Thu, 27 Aug 2026 04:34:41 +0300
Subject: [PATCH 04/12] =?UTF-8?q?=D0=BD=D0=B5=20=D0=BD=D1=83=D0=B6=D0=BD?=
=?UTF-8?q?=D0=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs | 1 -
1 file changed, 1 deletion(-)
diff --git a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
index e1f8f3c95d8b..82da307c9c82 100644
--- a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
+++ b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
@@ -28,7 +28,6 @@ public sealed class GhostGoLobbySystem : EntitySystem
[Dependency] private readonly IChatManager _chatManager = default!;
[Dependency] private readonly IServerPreferencesManager _prefsManager = default!;
- private bool _enabled;
private TimeSpan _requiredPlaytime;
private TimeSpan _deathTime;
From f9a56053486f6cb27ce0963de508332bc3d2241c Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Fri, 28 Aug 2026 18:40:54 +0300
Subject: [PATCH 05/12] Apply batched suggestions from code review
Co-authored-by: cfif126 <94059374+cfif126@users.noreply.github.com>
---
Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
index f2921e61342e..dcdff0e0b19a 100644
--- a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
+++ b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
@@ -6,7 +6,7 @@ ghost-go-lobby-used = Выберите другого персонажа.
ghost-go-lobby-confirm-title = Возвращение в лобби
ghost-go-lobby-confirm = Вы уверены, что хотите вернуться в лобби?
- Вы не помните ничего из своей предыдущей жизни и не помните ничего из того, что узнали, будучи призраком.
- Вам разрешается помнить знания об игре в целом, например, как готовить, как использовать предметы и т.д.
+ Вы забыли всё о своём текущем персонаже и ничего не помните из того, что узнали, будучи призраком.
+ Вам разрешается помнить общие знания об игре: например, как готовить, использовать предметы и т.д.
Вам [color=red]НЕ[/color] разрешается помнить или говорить имя, внешность и т.д. вашего предыдущего персонажа.
ghost-go-lobby-confirm-continue = Продолжить
From f963ffaf4a1f419f17e8bf20a22f5f5c684a68bf Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Sat, 29 Aug 2026 01:30:33 +0300
Subject: [PATCH 06/12] Update
Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
---
Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
index dcdff0e0b19a..7885971bdaf9 100644
--- a/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
+++ b/Resources/Locale/ru-RU/_corvaxgoob/ghost/ghost-go-lobby.ftl
@@ -1,7 +1,7 @@
ghost-go-lobby-button = Вернуться в лобби
ghost-go-lobby-deathtime = Вернуться в лобби можно через {$minutes} мин.
-ghost-go-lobby-playtime = Вернуться в лобби после смерти могут только игроки, наигравшие более {$hours} ч.
+ghost-go-lobby-playtime = Вам нужно наиграть еще {$hours} ч.
ghost-go-lobby-used = Выберите другого персонажа.
ghost-go-lobby-confirm-title = Возвращение в лобби
From 04145066cce8117fb2997c3e4fd1973338969f33 Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 2 Sep 2026 13:45:14 +0300
Subject: [PATCH 07/12] =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=20?=
=?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=87=D0=B5=D1=80=D1=82=D0=BE=D0=B2=D1=8B?=
=?UTF-8?q?=D1=85=20=D0=B0=D0=BD=D0=B3=D0=BB=D0=B8=D1=87=D0=B0=D0=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl
diff --git a/Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl b/Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl
new file mode 100644
index 000000000000..07cc4ef62aca
--- /dev/null
+++ b/Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl
@@ -0,0 +1,12 @@
+ghost-go-lobby-button = Return to lobby
+
+ghost-go-lobby-deathtime = You can return to the lobby in {$minutes} minutes.
+ghost-go-lobby-playtime = You need to play for another {$hours} hours.
+ghost-go-lobby-used = Please choose a different character.
+
+ghost-go-lobby-confirm-title = Returning to the Lobby
+ghost-go-lobby-confirm = Are you sure you want to return to the lobby?
+ You have forgotten everything about your current character and do not remember anything you learned while you were a ghost.
+ You are allowed to remember general knowledge about the game: for example, how to cook, use items, etc.
+ You are [color=red]NOT[/color] allowed to remember or mention the name, appearance, etc., of your previous character.
+ghost-go-lobby-confirm-continue = Continue
From 28b58ef05fa512e39e115187fc5a19666853da31 Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 2 Sep 2026 13:55:43 +0300
Subject: [PATCH 08/12] 1
---
Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
index 82da307c9c82..838b0b18d30e 100644
--- a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
+++ b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
@@ -28,6 +28,7 @@ public sealed class GhostGoLobbySystem : EntitySystem
[Dependency] private readonly IChatManager _chatManager = default!;
[Dependency] private readonly IServerPreferencesManager _prefsManager = default!;
+ private bool _enabled;
private TimeSpan _requiredPlaytime;
private TimeSpan _deathTime;
@@ -48,6 +49,7 @@ public override void Initialize()
SubscribeNetworkEvent(OnGhostGoLobby);
SubscribeLocalEvent(OnRunLevelChanged);
+ Subs.CVar(_cfg, CCCVars.GhostGoLobbyEnabled, value => _enabled = value, true);
Subs.CVar(_cfg, CCCVars.GhostGoLobbyTimeHours, value => _requiredPlaytime = TimeSpan.FromHours(value), true);
Subs.CVar(_cfg, CCCVars.GhostGoLobbyDeathTimeMinutes, value => _deathTime = TimeSpan.FromMinutes(value), true);
}
@@ -68,10 +70,8 @@ private void OnGhostGoLobby(GhostGoLobbyEvent msg, EntitySessionEventArgs args)
private void TryGhostGoLobby(EntityUid uid, ICommonSession session)
{
- if (!_cfg.GetCVar(CCCVars.GhostGoLobbyEnabled))
- {
+ if (!_enabled)
return;
- }
if (_playTime.TryGetTrackerTime(session, PlayTimeTrackingShared.TrackerOverall, out var all)
&& all.Value < _requiredPlaytime)
From b708d541c55403fc5de08d10c725055147da3379 Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 2 Sep 2026 14:18:18 +0300
Subject: [PATCH 09/12] 1
---
Content.Server/GameTicking/GameTicker.Player.cs | 9 ++++++++-
.../Events/GhostJoinLobbyRequestEvent.cs | 13 +++++++++++++
.../_CorvaxGoob/Ghost/GhostGoLobbySystem.cs | 4 ++--
3 files changed, 23 insertions(+), 3 deletions(-)
create mode 100644 Content.Server/_CorvaxGoob/Events/GhostJoinLobbyRequestEvent.cs
diff --git a/Content.Server/GameTicking/GameTicker.Player.cs b/Content.Server/GameTicking/GameTicker.Player.cs
index fa64a144e666..499991c5918d 100644
--- a/Content.Server/GameTicking/GameTicker.Player.cs
+++ b/Content.Server/GameTicking/GameTicker.Player.cs
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
+using Content.Server._CorvaxGoob.Events; // CorvaxGoob-GoLobby
using Content.Corvax.Interfaces.Server;
using Content.Shared.Administration;
using Content.Shared.CCVar;
@@ -26,6 +27,7 @@ public sealed partial class GameTicker
private void InitializePlayer()
{
_playerManager.PlayerStatusChanged += PlayerStatusChanged;
+ SubscribeLocalEvent(OnGhostJoinLobbyRequest); // CorvaxGoob-GoLobby
}
private async void PlayerStatusChanged(object? sender, SessionStatusEventArgs args)
@@ -210,7 +212,7 @@ public void PlayerJoinGame(ICommonSession session, bool silent = false)
RaiseNetworkEvent(new TickerJoinGameEvent(), session.Channel);
}
- public void PlayerJoinLobby(ICommonSession session) // CorvaxGoob Made public
+ private void PlayerJoinLobby(ICommonSession session)
{
_playerGameStatuses[session.UserId] = LobbyEnabled ? PlayerGameStatus.NotReadyToPlay : PlayerGameStatus.ReadyToPlay;
_db.AddRoundPlayers(RoundId, session.UserId);
@@ -222,6 +224,11 @@ public void PlayerJoinLobby(ICommonSession session) // CorvaxGoob Made public
RaiseLocalEvent(new PlayerJoinedLobbyEvent(session));
}
+ private void OnGhostJoinLobbyRequest(GhostJoinLobbyRequestEvent ev) // CorvaxGoob-GoLobby
+ {
+ PlayerJoinLobby(ev.Session);
+ }
+
private void ReqWindowAttentionAll()
{
RaiseNetworkEvent(new RequestWindowAttentionEvent());
diff --git a/Content.Server/_CorvaxGoob/Events/GhostJoinLobbyRequestEvent.cs b/Content.Server/_CorvaxGoob/Events/GhostJoinLobbyRequestEvent.cs
new file mode 100644
index 000000000000..a32724c5530d
--- /dev/null
+++ b/Content.Server/_CorvaxGoob/Events/GhostJoinLobbyRequestEvent.cs
@@ -0,0 +1,13 @@
+using Robust.Shared.Player;
+
+namespace Content.Server._CorvaxGoob.Events;
+
+public sealed class GhostJoinLobbyRequestEvent : EntityEventArgs
+{
+ public readonly ICommonSession Session;
+
+ public GhostJoinLobbyRequestEvent(ICommonSession session)
+ {
+ Session = session;
+ }
+}
\ No newline at end of file
diff --git a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
index 838b0b18d30e..4e28e2f42b09 100644
--- a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
+++ b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
@@ -1,3 +1,4 @@
+using Content.Server._CorvaxGoob.Events;
using Content.Server.Chat.Managers;
using Content.Server.GameTicking;
using Content.Server.Mind;
@@ -20,7 +21,6 @@ namespace Content.Server._CorvaxGoob.Ghost;
public sealed class GhostGoLobbySystem : EntitySystem
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
- [Dependency] private readonly GameTicker _ticker = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly MindSystem _mind = default!;
[Dependency] private readonly PlayTimeTrackingManager _playTime = default!;
@@ -100,6 +100,6 @@ private void TryGhostGoLobby(EntityUid uid, ICommonSession session)
_mind.WipeMind(session);
- _ticker.PlayerJoinLobby(session);
+ RaiseLocalEvent(new GhostJoinLobbyRequestEvent(session));
}
}
From 220d3573ce4ccc3b0bb3451f1fed6dba6e5d1a47 Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 2 Sep 2026 22:09:41 +0300
Subject: [PATCH 10/12] Update
Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl
Co-authored-by: cfif126 <94059374+cfif126@users.noreply.github.com>
---
Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl b/Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl
index 07cc4ef62aca..175356665baa 100644
--- a/Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl
+++ b/Resources/Locale/en-US/_CorvaxGoob/ghost/ghost-go-lobby.ftl
@@ -7,6 +7,6 @@ ghost-go-lobby-used = Please choose a different character.
ghost-go-lobby-confirm-title = Returning to the Lobby
ghost-go-lobby-confirm = Are you sure you want to return to the lobby?
You have forgotten everything about your current character and do not remember anything you learned while you were a ghost.
- You are allowed to remember general knowledge about the game: for example, how to cook, use items, etc.
+ You are allowed to remember general knowledge about the game e.g., how to cook, use items, etc.
You are [color=red]NOT[/color] allowed to remember or mention the name, appearance, etc., of your previous character.
ghost-go-lobby-confirm-continue = Continue
From 992974f0233853656e81d8c4528f2dad15a9b883 Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 2 Sep 2026 22:20:58 +0300
Subject: [PATCH 11/12] kto? dimmon
---
.../UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs | 2 +-
Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs | 2 +-
Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs | 2 +-
Resources/ConfigPresets/Corvax/common.toml | 3 +++
4 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
index acd6feba68c7..f5c7eca78890 100644
--- a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
+++ b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
@@ -57,7 +57,7 @@ public void Update(int? roles, bool? canReturnToBody, bool? canEnterGhostBar = t
// Goobstation start
GhostRolesButton.Disabled = !canTakeGhostRoles ?? true;
// Goobstation end
- GhostGoLobbyButton.Disabled = !canGoLobby ?? true; // CorvaxGoob-GoLobby
+ GhostGoLobbyButton.Visible = canGoLobby ?? true; // Corvax-GoLobby
if (roles != null)
{
diff --git a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
index 4e28e2f42b09..74a164001b89 100644
--- a/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
+++ b/Content.Server/_CorvaxGoob/Ghost/GhostGoLobbySystem.cs
@@ -84,7 +84,7 @@ private void TryGhostGoLobby(EntityUid uid, ICommonSession session)
if (!TryComp(uid, out var ghost))
return;
- var timeSinceDeath = _timing.CurTime - ghost.TimeOfDeath;
+ var timeSinceDeath = _timing.RealTime - ghost.TimeOfDeath;
if (timeSinceDeath < _deathTime)
{
var remaining = (int) Math.Ceiling((_deathTime - timeSinceDeath).TotalMinutes);
diff --git a/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs b/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
index cf43992b871a..0fd4d0c17cce 100644
--- a/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
+++ b/Content.Shared/_CorvaxGoob/CCCVars/CCCVars.cs
@@ -153,7 +153,7 @@ public sealed class CCCVars
CVarDef.Create("photo.playtime_require_time", 20f, CVar.SERVERONLY);
public static readonly CVarDef GhostGoLobbyEnabled =
- CVarDef.Create("ghost.go_lobby.enabled", true, CVar.SERVER | CVar.REPLICATED);
+ CVarDef.Create("ghost.go_lobby.enabled", false, CVar.SERVER | CVar.REPLICATED);
public static readonly CVarDef GhostGoLobbyTimeHours =
CVarDef.Create("ghost.go_lobby.require_time", 25f, CVar.SERVERONLY);
diff --git a/Resources/ConfigPresets/Corvax/common.toml b/Resources/ConfigPresets/Corvax/common.toml
index 32a6a9342059..7f178022df8d 100644
--- a/Resources/ConfigPresets/Corvax/common.toml
+++ b/Resources/ConfigPresets/Corvax/common.toml
@@ -41,3 +41,6 @@ icons_enabled = true
[misc]
space_whale_spawn = false
+
+[ghost.go_lobby]
+enabled = true
From 3c0515fd23e465b45433dd5d3fad10850c9686c0 Mon Sep 17 00:00:00 2001
From: shimorio <124311259+shimorio@users.noreply.github.com>
Date: Wed, 2 Sep 2026 22:32:43 +0300
Subject: [PATCH 12/12] 1
---
.../UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
index f5c7eca78890..70156f963149 100644
--- a/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
+++ b/Content.Client/UserInterface/Systems/Ghost/Widgets/GhostGui.xaml.cs
@@ -57,7 +57,7 @@ public void Update(int? roles, bool? canReturnToBody, bool? canEnterGhostBar = t
// Goobstation start
GhostRolesButton.Disabled = !canTakeGhostRoles ?? true;
// Goobstation end
- GhostGoLobbyButton.Visible = canGoLobby ?? true; // Corvax-GoLobby
+ GhostGoLobbyButton.Visible = canGoLobby ?? true; // CorvaxGoob-GoLobby
if (roles != null)
{