diff --git a/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs b/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs index 0701fcc1a3..0cb4a2fafe 100644 --- a/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs +++ b/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs @@ -56,11 +56,18 @@ namespace Content.Server.Ghost.Roles.Components } [ViewVariables(VVAccess.ReadOnly)] - public bool Taken { get; protected set; } + public bool Taken { get; set; } [ViewVariables] public uint Identifier { get; set; } + /// + /// Reregisters the ghost role when the current player ghosts. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("reregister")] + public bool ReregisterOnGhost { get; set; } = true; + protected override void Initialize() { base.Initialize(); diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index 5619a23fbf..879ab1cbe5 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -4,6 +4,7 @@ using Content.Server.EUI; using Content.Server.Ghost.Components; using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.UI; +using Content.Server.Mind.Components; using Content.Server.Players; using Content.Shared.Administration; using Content.Shared.GameTicking; @@ -42,6 +43,7 @@ namespace Content.Server.Ghost.Roles SubscribeLocalEvent(Reset); SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnMindRemoved); _playerManager.PlayerStatusChanged += PlayerStatusChanged; } @@ -200,6 +202,14 @@ namespace Content.Server.Ghost.Roles CloseEui(message.Player); } + private void OnMindRemoved(EntityUid uid, GhostRoleComponent component, MindRemovedMessage args) + { + if (!component.ReregisterOnGhost) + return; + component.Taken = false; + RegisterGhostRole(component); + } + public void Reset(RoundRestartCleanupEvent ev) { foreach (var session in _openUis.Keys)