Merge pull request #3475 from pchote/startgame-fix

Startgame fix and observer tweaks.
This commit is contained in:
Matthias Mailänder
2013-06-26 11:21:39 -07:00
5 changed files with 25 additions and 127 deletions

View File

@@ -55,12 +55,17 @@ namespace OpenRA.Mods.RA.Server
void CheckAutoStart(S server, Connection conn, Session.Client client)
{
var actualPlayers = server.conns
.Select(c => server.GetClient(c))
.Where(c => c.Slot != null);
var playerClients = server.lobbyInfo.Clients.Where(c => c.Bot == null && c.Slot != null);
if (actualPlayers.Count() > 0 && actualPlayers.All(c => c.State == Session.ClientState.Ready))
InterpretCommand(server, conn, client, "startgame");
// Are all players ready?
if (playerClients.Count() == 0 || playerClients.Any(c => c.State != Session.ClientState.Ready))
return;
// Are the map conditions satisfied?
if (server.lobbyInfo.Slots.Any(sl => sl.Value.Required && server.lobbyInfo.ClientInSlot(sl.Key) == null))
return;
server.StartGame();
}
public bool InterpretCommand(S server, Connection conn, Session.Client client, string cmd)
@@ -132,6 +137,7 @@ namespace OpenRA.Mods.RA.Server
{
client.Slot = null;
client.SpawnPoint = 0;
client.Color = HSLColor.FromRGB(255, 255, 255);
server.SyncLobbyInfo();
return true;
}},
@@ -525,8 +531,8 @@ namespace OpenRA.Mods.RA.Server
if (targetClient.Index != client.Index && !client.IsAdmin)
return true;
// Map has disabled color changes
if (targetClient.Slot != null && server.lobbyInfo.Slots[targetClient.Slot].LockColor)
// Spectator or map has disabled color changes
if (targetClient.Slot == null || server.lobbyInfo.Slots[targetClient.Slot].LockColor)
return true;
var ci = parts[1].Split(',').Select(cc => int.Parse(cc)).ToArray();

View File

@@ -459,8 +459,6 @@ namespace OpenRA.Mods.RA.Widgets.Logic
template = EditableSpectatorTemplate.Clone();
LobbyUtils.SetupEditableNameWidget(template, null, c, orderManager);
LobbyUtils.SetupEditableColorWidget(template, null, c, orderManager, colorPreview);
LobbyUtils.SetupEditableReadyWidget(template, null, client, orderManager);
}
// Non-editable spectator
else
@@ -470,8 +468,6 @@ namespace OpenRA.Mods.RA.Widgets.Logic
LobbyUtils.SetupNameWidget(template, null, client);
LobbyUtils.SetupKickWidget(template, null, client, orderManager);
LobbyUtils.SetupColorWidget(template, null, client);
LobbyUtils.SetupReadyWidget(template, null, client);
}
LobbyUtils.SetupClientWidget(template, null, c, orderManager, true);