Fix async issues with SpawnPlayer.

Fixes #1705
This commit is contained in:
Pieter-Jan Briers
2020-08-16 02:22:10 +02:00
parent 05cf8303e4
commit 93ebd95f8a

View File

@@ -264,7 +264,7 @@ namespace Content.Server.GameTicking
// Spawn everybody in! // Spawn everybody in!
foreach (var (player, job) in assignedJobs) foreach (var (player, job) in assignedJobs)
{ {
SpawnPlayer(player, job, false); SpawnPlayer(player, profiles[player.Name], job, false);
} }
// Time to start the preset. // Time to start the preset.
@@ -344,7 +344,7 @@ namespace Content.Server.GameTicking
if (LobbyEnabled) if (LobbyEnabled)
_playerJoinLobby(targetPlayer); _playerJoinLobby(targetPlayer);
else else
SpawnPlayer(targetPlayer); SpawnPlayerAsync(targetPlayer);
} }
public void MakeObserve(IPlayerSession player) public void MakeObserve(IPlayerSession player)
@@ -358,7 +358,7 @@ namespace Content.Server.GameTicking
{ {
if (!_playersInLobby.ContainsKey(player)) return; if (!_playersInLobby.ContainsKey(player)) return;
SpawnPlayer(player, jobId); SpawnPlayerAsync(player, jobId);
} }
public void ToggleReady(IPlayerSession player, bool ready) public void ToggleReady(IPlayerSession player, bool ready)
@@ -620,7 +620,7 @@ namespace Content.Server.GameTicking
_playerJoinLobby(player); _playerJoinLobby(player);
} }
EntitySystem.Get<PathfindingSystem>().ResettingCleanup(); EntitySystem.Get<PathfindingSystem>().ResettingCleanup();
EntitySystem.Get<AiReachableSystem>().ResettingCleanup(); EntitySystem.Get<AiReachableSystem>().ResettingCleanup();
EntitySystem.Get<WireHackingSystem>().ResetLayouts(); EntitySystem.Get<WireHackingSystem>().ResetLayouts();
@@ -684,13 +684,13 @@ namespace Content.Server.GameTicking
return; return;
} }
SpawnPlayer(session); SpawnPlayerAsync(session);
} }
else else
{ {
if (data.Mind.CurrentEntity == null) if (data.Mind.CurrentEntity == null)
{ {
SpawnPlayer(session); SpawnPlayerAsync(session);
} }
else else
{ {
@@ -744,14 +744,22 @@ namespace Content.Server.GameTicking
}, _updateShutdownCts.Token); }, _updateShutdownCts.Token);
} }
private async void SpawnPlayer(IPlayerSession session, string jobId = null, bool lateJoin = true) private async void SpawnPlayerAsync(IPlayerSession session, string jobId = null, bool lateJoin = true)
{ {
_playerJoinGame(session);
var character = (HumanoidCharacterProfile) (await _prefsManager var character = (HumanoidCharacterProfile) (await _prefsManager
.GetPreferencesAsync(session.SessionId.Username)) .GetPreferencesAsync(session.SessionId.Username))
.SelectedCharacter; .SelectedCharacter;
SpawnPlayer(session, character, jobId, lateJoin);
}
private void SpawnPlayer(IPlayerSession session,
HumanoidCharacterProfile character,
string jobId = null,
bool lateJoin = true)
{
_playerJoinGame(session);
var data = session.ContentData(); var data = session.ContentData();
data.WipeMind(); data.WipeMind();
data.Mind = new Mind(session.SessionId) data.Mind = new Mind(session.SessionId)