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);
}
{
_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;
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;
[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()
{
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);
}
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}");
if (_players.TryGetSessionById(userId.Value, out var ret))
{
mind.Session = ret;
+ _pvsOverride.AddSessionOverride(mindId, ret);
_actor.Attach(mind.CurrentEntity, ret);
}