Add mind entities to PVS overrides (#20847)
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user