diff --git a/Robust.Server/GameStates/ServerGameStateManager.cs b/Robust.Server/GameStates/ServerGameStateManager.cs index 2e372e0a5..4cfa557f7 100644 --- a/Robust.Server/GameStates/ServerGameStateManager.cs +++ b/Robust.Server/GameStates/ServerGameStateManager.cs @@ -66,10 +66,14 @@ namespace Robust.Server.GameStates private void HandleClientDisconnect(object? sender, NetChannelArgs e) { - _entityManager.DropPlayerState(_playerManager.GetSessionById(e.Channel.SessionId)); + _ackedStates.Remove(e.Channel.ConnectionId); - if (_ackedStates.ContainsKey(e.Channel.ConnectionId)) - _ackedStates.Remove(e.Channel.ConnectionId); + if (!_playerManager.TryGetSessionByChannel(e.Channel, out var session)) + { + return; + } + + _entityManager.DropPlayerState(session); } private void HandleStateAck(MsgStateAck msg) diff --git a/Robust.Server/Player/PlayerManager.cs b/Robust.Server/Player/PlayerManager.cs index f9e72100a..65a559100 100644 --- a/Robust.Server/Player/PlayerManager.cs +++ b/Robust.Server/Player/PlayerManager.cs @@ -344,7 +344,10 @@ namespace Robust.Server.Player /// private void EndSession(object? sender, NetChannelArgs args) { - var session = GetSessionByChannel(args.Channel); + if (!TryGetSessionByChannel(args.Channel, out var session)) + { + return; + } // make sure nothing got messed up during the life of the session DebugTools.Assert(session.ConnectedClient == args.Channel);