Disable job buttons when they aren't available or late join is disallowed (#2251)
* Disable job buttons when they aren't available In real time too, the technology is overwhelming * Jobs are all unavailable when late join is disallowed. * Better ToggleDisallowLateJoin command parsing * Add togglelatejoin to groups. Co-authored-by: Víctor Aguilera Puerto <zddm@outlook.es>
This commit is contained in:
@@ -196,5 +196,11 @@ namespace Content.Server.GameTicking
|
||||
{
|
||||
_spawnedPositions[jobId] = _spawnedPositions.GetValueOrDefault(jobId, 0) + 1;
|
||||
}
|
||||
|
||||
private void UpdateJobsAvailable()
|
||||
{
|
||||
var lobbyPlayers = _playersInLobby.Keys.Select(p => p.ConnectedClient).ToList();
|
||||
_netManager.ServerSendToMany(GetJobsAvailable(), lobbyPlayers);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,6 +143,7 @@ namespace Content.Server.GameTicking
|
||||
_netManager.RegisterNetMessage<MsgRoundEndMessage>(nameof(MsgRoundEndMessage));
|
||||
_netManager.RegisterNetMessage<MsgRequestWindowAttention>(nameof(MsgRequestWindowAttention));
|
||||
_netManager.RegisterNetMessage<MsgTickerLateJoinStatus>(nameof(MsgTickerLateJoinStatus));
|
||||
_netManager.RegisterNetMessage<MsgTickerJobsAvailable>(nameof(MsgTickerJobsAvailable));
|
||||
|
||||
SetStartPreset(_configurationManager.GetCVar(CCVars.GameLobbyDefaultPreset));
|
||||
|
||||
@@ -307,6 +308,7 @@ namespace Content.Server.GameTicking
|
||||
_sendStatusToAll();
|
||||
ReqWindowAttentionAll();
|
||||
UpdateLateJoinStatus();
|
||||
UpdateJobsAvailable();
|
||||
}
|
||||
|
||||
private void UpdateLateJoinStatus()
|
||||
@@ -420,6 +422,7 @@ namespace Content.Server.GameTicking
|
||||
{
|
||||
DisallowLateJoin = disallowLateJoin;
|
||||
UpdateLateJoinStatus();
|
||||
UpdateJobsAvailable();
|
||||
}
|
||||
|
||||
public T AddGameRule<T>() where T : GameRule, new()
|
||||
@@ -817,6 +820,7 @@ namespace Content.Server.GameTicking
|
||||
var character = GetPlayerProfile(session);
|
||||
|
||||
SpawnPlayer(session, character, jobId, lateJoin);
|
||||
UpdateJobsAvailable();
|
||||
}
|
||||
|
||||
private void SpawnPlayer(IPlayerSession session,
|
||||
@@ -915,6 +919,7 @@ namespace Content.Server.GameTicking
|
||||
_netManager.ServerSendMessage(_getStatusMsg(session), session.ConnectedClient);
|
||||
_netManager.ServerSendMessage(GetInfoMsg(), session.ConnectedClient);
|
||||
_netManager.ServerSendMessage(GetPlayerStatus(), session.ConnectedClient);
|
||||
_netManager.ServerSendMessage(GetJobsAvailable(), session.ConnectedClient);
|
||||
}
|
||||
|
||||
private void _playerJoinGame(IPlayerSession session)
|
||||
@@ -938,6 +943,22 @@ namespace Content.Server.GameTicking
|
||||
return msg;
|
||||
}
|
||||
|
||||
private MsgTickerJobsAvailable GetJobsAvailable()
|
||||
{
|
||||
var message = _netManager.CreateNetMessage<MsgTickerJobsAvailable>();
|
||||
|
||||
// If late join is disallowed, return no available jobs.
|
||||
if (DisallowLateJoin)
|
||||
return message;
|
||||
|
||||
message.JobsAvailable = GetAvailablePositions()
|
||||
.Where(e => e.Value > 0)
|
||||
.Select(e => e.Key)
|
||||
.ToArray();
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
private MsgTickerLobbyReady GetStatusSingle(IPlayerSession player, PlayerStatus status)
|
||||
{
|
||||
var msg = _netManager.CreateNetMessage<MsgTickerLobbyReady>();
|
||||
|
||||
@@ -262,7 +262,15 @@ namespace Content.Server.GameTicking
|
||||
|
||||
var ticker = IoCManager.Resolve<IGameTicker>();
|
||||
|
||||
ticker.ToggleDisallowLateJoin(bool.Parse(args[0]));
|
||||
if (bool.TryParse(args[0], out var result))
|
||||
{
|
||||
ticker.ToggleDisallowLateJoin(bool.Parse(args[0]));
|
||||
shell.SendText(player, result ? "Late joining has been disabled." : "Late joining has been enabled.");
|
||||
}
|
||||
else
|
||||
{
|
||||
shell.SendText(player, "Invalid argument.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user