diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 0c8328c4e2..dbfa8f8639 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -161,6 +161,11 @@ namespace OpenRA.Server throw new InvalidOperationException("Already got 8 players"); } + static int ChooseFreeSlot() + { + return lobbyInfo.Slots.First(s => !s.Closed && s.Bot == null).Index; + } + static void AcceptConnection() { var newConn = new Connection { socket = listener.AcceptSocket() }; @@ -195,6 +200,7 @@ namespace OpenRA.Server State = Session.ClientState.NotReady, SpawnPoint = 0, Team = 0, + Slot = ChooseFreeSlot(), }); Log.Write("server", "Client {0}: Accepted connection from {1}", diff --git a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs index d32ff54467..96ab3ba1cc 100644 --- a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs @@ -261,6 +261,12 @@ namespace OpenRA.Widgets.Delegates template = EmptySlotTemplateHost.Clone(); var name = template.GetWidget("NAME"); name.GetText = () => s.Closed ? "Closed" : "Open"; + name.OnMouseUp = _ => + { + Game.IssueOrder( + Order.Command((s.Closed ? "slot_open " : "slot_close ") + s.Index)); + return true; + }; } else { @@ -271,7 +277,10 @@ namespace OpenRA.Widgets.Delegates var join = template.GetWidget("JOIN"); if (join != null) + { join.OnMouseUp = _ => { Game.IssueOrder(Order.Command("slot " + s.Index)); return true; }; + join.IsVisible = () => !s.Closed; + } } else if (c.Index == Game.LocalClient.Index && c.State != Session.ClientState.Ready) { @@ -406,4 +415,4 @@ namespace OpenRA.Widgets.Delegates return true; } } -} +} \ No newline at end of file