Add mind entities to PVS overrides (#20847)

This commit is contained in:
Leon Friedrich
2023-10-11 14:45:05 +11:00
committed by GitHub
parent f789de2cd3
commit 440a578047
2 changed files with 13 additions and 1 deletions

View File

@@ -29,8 +29,11 @@ namespace Content.Server.GameTicking
if (_mind.TryGetMind(session.UserId, out var mindId, out var mind)) 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; mind.Session = session;
_pvsOverride.AddSessionOverride(mindId.Value, session);
}
DebugTools.Assert(mind.Session == 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))); _chatManager.SendAdminAnnouncement(Loc.GetString("player-leave-message", ("name", args.Session.Name)));
if (mind != null) if (mind != null)
{
_pvsOverride.ClearOverride(mindId!.Value);
mind.Session = null; mind.Session = null;
}
_userDb.ClientDisconnected(session); _userDb.ClientDisconnected(session);
break; break;

View File

@@ -7,6 +7,7 @@ using Content.Shared.Mind;
using Content.Shared.Mind.Components; using Content.Shared.Mind.Components;
using Content.Shared.Players; using Content.Shared.Players;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.GameStates;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Network; using Robust.Shared.Network;
@@ -25,6 +26,7 @@ public sealed class MindSystem : SharedMindSystem
[Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly SharedGhostSystem _ghosts = default!; [Dependency] private readonly SharedGhostSystem _ghosts = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly PvsOverrideSystem _pvsOverride = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -258,6 +260,8 @@ public sealed class MindSystem : SharedMindSystem
var oldEntity = mind.OwnedEntity; var oldEntity = mind.OwnedEntity;
if (oldComp != null && oldEntity != null) if (oldComp != null && oldEntity != null)
{ {
if (oldComp.Mind != null)
_pvsOverride.ClearOverride(oldComp.Mind.Value);
oldComp.Mind = null; oldComp.Mind = null;
RaiseLocalEvent(oldEntity.Value, new MindRemovedMessage(oldEntity.Value, mind), true); RaiseLocalEvent(oldEntity.Value, new MindRemovedMessage(oldEntity.Value, mind), true);
} }
@@ -309,6 +313,7 @@ public sealed class MindSystem : SharedMindSystem
if (mind.UserId == userId) if (mind.UserId == userId)
return; return;
_pvsOverride.ClearOverride(mindId);
if (userId != null && !_players.TryGetPlayerData(userId.Value, out _)) if (userId != null && !_players.TryGetPlayerData(userId.Value, out _))
{ {
Log.Error($"Attempted to set mind user to invalid value {userId}"); 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)) if (_players.TryGetSessionById(userId.Value, out var ret))
{ {
mind.Session = ret; mind.Session = ret;
_pvsOverride.AddSessionOverride(mindId, ret);
_actor.Attach(mind.CurrentEntity, ret); _actor.Attach(mind.CurrentEntity, ret);
} }