Fix first round after a server restart being displayed as number 0 (#14194)

This commit is contained in:
DrSmugleaf
2023-02-21 01:16:25 +01:00
committed by GitHub
parent 20e39181f2
commit 10fa1bc1d2
3 changed files with 27 additions and 18 deletions

View File

@@ -180,24 +180,6 @@ namespace Content.Server.GameTicking
RoundLengthMetric.Set(0);
var playerIds = _playerGameStatuses.Keys.Select(player => player.UserId).ToArray();
var serverName = _configurationManager.GetCVar(CCVars.AdminLogsServerName);
// TODO FIXME AAAAAAAAAAAAAAAAAAAH THIS IS BROKEN
// Task.Run as a terrible dirty workaround to avoid synchronization context deadlock from .Result here.
// This whole setup logic should be made asynchronous so we can properly wait on the DB AAAAAAAAAAAAAH
var task = Task.Run(async () =>
{
var server = await _db.AddOrGetServer(serverName);
return await _db.AddNewRound(server, playerIds);
});
_taskManager.BlockWaitOnTask(task);
RoundId = task.GetAwaiter().GetResult();
var startingEvent = new RoundStartingEvent(RoundId);
RaiseLocalEvent(startingEvent);
var readyPlayers = new List<IPlayerSession>();
var readyPlayerProfiles = new Dictionary<NetUserId, HumanoidCharacterProfile>();
@@ -392,6 +374,7 @@ namespace Content.Server.GameTicking
LobbySong = _robustRandom.Pick(_lobbyMusicCollection.PickFiles).ToString();
RandomizeLobbyBackground();
ResettingCleanup();
IncrementRoundNumber();
if (!LobbyEnabled)
{
@@ -405,6 +388,7 @@ namespace Content.Server.GameTicking
_roundStartTime = _gameTiming.CurTime + LobbyDuration;
SendStatusToAll();
UpdateInfoText();
ReqWindowAttentionAll();
}