using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using System.Threading.Tasks;
+using Content.Server.GameTicking.Events;
using Content.Server.GameTicking.Presets;
using Content.Server.GameTicking.Rules;
using Content.Server.Ghost.Components;
mind.TransferTo(ghost);
return true;
}
+
+ private void IncrementRoundNumber()
+ {
+ 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);
+ }
}
public sealed class GhostAttemptHandleEvent : HandledEntityEventArgs
_chatManager.DispatchServerMessage(session, Loc.GetString("game-ticker-player-join-game-message"));
_playerGameStatuses[session.UserId] = PlayerGameStatus.JoinedGame;
+ _db.AddRoundPlayers(RoundId, session.UserId);
RaiseNetworkEvent(new TickerJoinGameEvent(), session.ConnectedClient);
}
private void PlayerJoinLobby(IPlayerSession session)
{
_playerGameStatuses[session.UserId] = LobbyEnabled ? PlayerGameStatus.NotReadyToPlay : PlayerGameStatus.ReadyToPlay;
+ _db.AddRoundPlayers(RoundId, session.UserId);
var client = session.ConnectedClient;
RaiseNetworkEvent(new TickerJoinLobbyEvent(), client);
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>();
LobbySong = _robustRandom.Pick(_lobbyMusicCollection.PickFiles).ToString();
RandomizeLobbyBackground();
ResettingCleanup();
+ IncrementRoundNumber();
if (!LobbyEnabled)
{
_roundStartTime = _gameTiming.CurTime + LobbyDuration;
SendStatusToAll();
+ UpdateInfoText();
ReqWindowAttentionAll();
}