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!
foreach (var (player, job) in assignedJobs)
{
SpawnPlayer(player, job, false);
SpawnPlayer(player, profiles[player.Name], job, false);
}
// Time to start the preset.
@@ -344,7 +344,7 @@ namespace Content.Server.GameTicking
if (LobbyEnabled)
_playerJoinLobby(targetPlayer);
else
SpawnPlayer(targetPlayer);
SpawnPlayerAsync(targetPlayer);
}
public void MakeObserve(IPlayerSession player)
@@ -358,7 +358,7 @@ namespace Content.Server.GameTicking
{
if (!_playersInLobby.ContainsKey(player)) return;
SpawnPlayer(player, jobId);
SpawnPlayerAsync(player, jobId);
}
public void ToggleReady(IPlayerSession player, bool ready)
@@ -620,7 +620,7 @@ namespace Content.Server.GameTicking
_playerJoinLobby(player);
}
EntitySystem.Get<PathfindingSystem>().ResettingCleanup();
EntitySystem.Get<AiReachableSystem>().ResettingCleanup();
EntitySystem.Get<WireHackingSystem>().ResetLayouts();
@@ -684,13 +684,13 @@ namespace Content.Server.GameTicking
return;
}
SpawnPlayer(session);
SpawnPlayerAsync(session);
}
else
{
if (data.Mind.CurrentEntity == null)
{
SpawnPlayer(session);
SpawnPlayerAsync(session);
}
else
{
@@ -744,14 +744,22 @@ namespace Content.Server.GameTicking
}, _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
.GetPreferencesAsync(session.SessionId.Username))
.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();
data.WipeMind();
data.Mind = new Mind(session.SessionId)