diff --git a/Content.Server/GameTicking/GameTicker.Player.cs b/Content.Server/GameTicking/GameTicker.Player.cs index f6402589b2..3aef1bbe78 100644 --- a/Content.Server/GameTicking/GameTicker.Player.cs +++ b/Content.Server/GameTicking/GameTicker.Player.cs @@ -29,8 +29,11 @@ namespace Content.Server.GameTicking if (_mind.TryGetMind(session.UserId, out var mindId, out var mind)) { - if (args.OldStatus == SessionStatus.Connecting && args.NewStatus == SessionStatus.Connected) + if (args.NewStatus != SessionStatus.Disconnected) + { mind.Session = session; + _pvsOverride.AddSessionOverride(mindId.Value, session); + } DebugTools.Assert(mind.Session == session); } @@ -109,7 +112,10 @@ namespace Content.Server.GameTicking { _chatManager.SendAdminAnnouncement(Loc.GetString("player-leave-message", ("name", args.Session.Name))); if (mind != null) + { + _pvsOverride.ClearOverride(mindId!.Value); mind.Session = null; + } _userDb.ClientDisconnected(session); break; diff --git a/Content.Server/Mind/MindSystem.cs b/Content.Server/Mind/MindSystem.cs index 06f97bd3b9..373007fd1b 100644 --- a/Content.Server/Mind/MindSystem.cs +++ b/Content.Server/Mind/MindSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Players; using Robust.Server.GameObjects; +using Robust.Server.GameStates; using Robust.Server.Player; using Robust.Shared.Map; using Robust.Shared.Network; @@ -25,6 +26,7 @@ public sealed class MindSystem : SharedMindSystem [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly SharedGhostSystem _ghosts = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly PvsOverrideSystem _pvsOverride = default!; public override void Initialize() { @@ -258,6 +260,8 @@ public sealed class MindSystem : SharedMindSystem var oldEntity = mind.OwnedEntity; if (oldComp != null && oldEntity != null) { + if (oldComp.Mind != null) + _pvsOverride.ClearOverride(oldComp.Mind.Value); oldComp.Mind = null; RaiseLocalEvent(oldEntity.Value, new MindRemovedMessage(oldEntity.Value, mind), true); } @@ -309,6 +313,7 @@ public sealed class MindSystem : SharedMindSystem if (mind.UserId == userId) return; + _pvsOverride.ClearOverride(mindId); if (userId != null && !_players.TryGetPlayerData(userId.Value, out _)) { Log.Error($"Attempted to set mind user to invalid value {userId}"); @@ -350,6 +355,7 @@ public sealed class MindSystem : SharedMindSystem if (_players.TryGetSessionById(userId.Value, out var ret)) { mind.Session = ret; + _pvsOverride.AddSessionOverride(mindId, ret); _actor.Attach(mind.CurrentEntity, ret); }