diff --git a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs index 8d1d79b352..b69ad28a3d 100644 --- a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs @@ -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(); diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs index c73be9437c..199d0e6909 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs @@ -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); diff --git a/mods/cnc/chrome/lobby.yaml b/mods/cnc/chrome/lobby.yaml index c15a57c511..cbf3380d14 100644 --- a/mods/cnc/chrome/lobby.yaml +++ b/mods/cnc/chrome/lobby.yaml @@ -295,31 +295,14 @@ Container@SERVER_LOBBY: Width:190 Height:25 MaxLength:16 - DropDownButton@COLOR: - Width:70 - Height:25 - X:210 - Font:Regular - IgnoreChildMouseOver: true - Children: - ColorBlock@COLORBLOCK: - X:5 - Y:6 - Width:PARENT_RIGHT-35 - Height:PARENT_BOTTOM-12 Label@SPECTATOR: Text:Spectator - Width:220-55 + Width:315-55 Height:25 - X:280 + X:210 Y:0 Align:Center Font:Bold - Checkbox@STATUS_CHECKBOX: - X:448 - Y:2 - Width:20 - Height:20 Container@TEMPLATE_NONEDITABLE_SPECTATOR: X:5 Y:0 @@ -363,27 +346,14 @@ Container@SERVER_LOBBY: X:180 Y:2 Font:Bold - ColorBlock@COLORBLOCK: - X:215 - Y:6 - Width:35 - Height:13 Label@SPECTATOR: Text:Spectator - Width:220-55 + Width:315-55 Height:25 - X:280 + X:210 Y:0 Align:Center Font:Bold - Image@STATUS_IMAGE: - Visible:false - X:450 - Y:4 - Width:20 - Height:20 - ImageCollection:checkbox-bits - ImageName:checked Container@TEMPLATE_NEW_SPECTATOR: X:5 Y:0 diff --git a/mods/d2k/chrome/lobby.yaml b/mods/d2k/chrome/lobby.yaml index 6e84285366..96f93f4682 100644 --- a/mods/d2k/chrome/lobby.yaml +++ b/mods/d2k/chrome/lobby.yaml @@ -273,38 +273,14 @@ Background@SERVER_LOBBY: Width:135 Height:25 MaxLength:16 - DropDownButton@COLOR: - Width:80 - Height:25 - X:160 - Font:Regular - Children: - ColorBlock@COLORBLOCK: - X:5 - Y:6 - Width:PARENT_RIGHT-35 - Height:PARENT_BOTTOM-12 Label@SPECTATOR: Text:Spectator - Width:198 + Width:278 Height:25 - X:240 + X:160 Y:0 Align:Center Font:Bold - Checkbox@STATUS_CHECKBOX: - X:448 - Y:2 - Width:20 - Height:20 - Image@STATUS_IMAGE: - Visible:false - X:450 - Y:4 - Width:20 - Height:20 - ImageCollection:checkbox-bits - ImageName:checked Container@TEMPLATE_NONEDITABLE_SPECTATOR: X:5 Y:0 @@ -347,27 +323,14 @@ Background@SERVER_LOBBY: X:125 Y:2 Font:Bold - ColorBlock@COLORBLOCK: - X:165 - Y:6 - Width:45 - Height:13 Label@SPECTATOR: Text:Spectator - Width:198 + Width:278 Height:25 - X:240 + X:160 Y:0 Align:Center Font:Bold - Image@STATUS_IMAGE: - Visible:false - X:450 - Y:4 - Width:20 - Height:20 - ImageCollection:checkbox-bits - ImageName:checked Container@TEMPLATE_NEW_SPECTATOR: X:5 Y:0 diff --git a/mods/ra/chrome/lobby.yaml b/mods/ra/chrome/lobby.yaml index 84729ad0d4..5a2c39ddfc 100644 --- a/mods/ra/chrome/lobby.yaml +++ b/mods/ra/chrome/lobby.yaml @@ -273,38 +273,14 @@ Background@SERVER_LOBBY: Width:135 Height:25 MaxLength:16 - DropDownButton@COLOR: - Width:80 - Height:25 - X:160 - Font:Regular - Children: - ColorBlock@COLORBLOCK: - X:5 - Y:6 - Width:PARENT_RIGHT-35 - Height:PARENT_BOTTOM-12 Label@SPECTATOR: Text:Spectator - Width:198 + Width:278 Height:25 - X:240 + X:160 Y:0 Align:Center Font:Bold - Checkbox@STATUS_CHECKBOX: - X:448 - Y:2 - Width:20 - Height:20 - Image@STATUS_IMAGE: - Visible:false - X:450 - Y:4 - Width:20 - Height:20 - ImageCollection:checkbox-bits - ImageName:checked Container@TEMPLATE_NONEDITABLE_SPECTATOR: X:5 Y:0 @@ -347,27 +323,14 @@ Background@SERVER_LOBBY: X:125 Y:2 Font:Bold - ColorBlock@COLORBLOCK: - X:165 - Y:6 - Width:45 - Height:13 Label@SPECTATOR: Text:Spectator - Width:198 + Width:278 Height:25 - X:240 + X:160 Y:0 Align:Center Font:Bold - Image@STATUS_IMAGE: - Visible:false - X:450 - Y:4 - Width:20 - Height:20 - ImageCollection:checkbox-bits - ImageName:checked Container@TEMPLATE_NEW_SPECTATOR: X:5 Y:0