From d684198b00b3729de9a6683c2d7ca6043aad331c Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 21 Dec 2020 12:25:25 +0100 Subject: [PATCH] Fixes observing from lobby nullspacing people on round restart Fixes #2791 --- Content.Server/GameTicking/GameTicker.cs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index e7f1cc04a4..9d5d86ea61 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -390,7 +390,7 @@ namespace Content.Server.GameTicking public void Respawn(IPlayerSession targetPlayer) { - targetPlayer.ContentData().WipeMind(); + targetPlayer.ContentData()?.WipeMind(); if (LobbyEnabled) _playerJoinLobby(targetPlayer); @@ -683,26 +683,32 @@ namespace Content.Server.GameTicking { // Delete all entities. foreach (var entity in _entityManager.GetEntities().ToList()) + { // TODO: Maybe something less naive here? // FIXME: Actually, definitely. entity.Delete(); + } _mapManager.Restart(); // Delete the minds of everybody. // TODO: Maybe move this into a separate manager? - foreach (var unCastData in PlayerManager.GetAllPlayerData()) unCastData.ContentData().WipeMind(); + foreach (var unCastData in PlayerManager.GetAllPlayerData()) + { + unCastData.ContentData()?.WipeMind(); + } // Clear up any game rules. - foreach (var rule in _gameRules) rule.Removed(); + foreach (var rule in _gameRules) + { + rule.Removed(); + } _gameRules.Clear(); // Move everybody currently in the server to lobby. foreach (var player in PlayerManager.GetAllPlayers()) { - if (_playersInLobby.ContainsKey(player)) continue; - _playerJoinLobby(player); } @@ -949,7 +955,7 @@ namespace Content.Server.GameTicking private void _playerJoinLobby(IPlayerSession session) { - _playersInLobby.Add(session, PlayerStatus.NotReady); + _playersInLobby[session] = PlayerStatus.NotReady; _netManager.ServerSendMessage(_netManager.CreateNetMessage(), session.ConnectedClient); _netManager.ServerSendMessage(_getStatusMsg(session), session.ConnectedClient); @@ -962,7 +968,9 @@ namespace Content.Server.GameTicking { _chatManager.DispatchServerMessage(session, "Welcome to Space Station 14! If this is your first time checking out the game, be sure to check out the tutorial in the top left!"); - if (_playersInLobby.ContainsKey(session)) _playersInLobby.Remove(session); + + if (_playersInLobby.ContainsKey(session)) + _playersInLobby.Remove(session); _netManager.ServerSendMessage(_netManager.CreateNetMessage(), session.ConnectedClient); }