Merge pull request #5143 from Mailaender/skirmish-bots-forbidden-slots

Fixed bots being added when the map disallows it
This commit is contained in:
Paul Chote
2014-04-21 01:13:03 +12:00
2 changed files with 13 additions and 5 deletions

View File

@@ -76,6 +76,11 @@ namespace OpenRA.Network
return Slots.FirstOrDefault(s => !s.Value.Closed && ClientInSlot(s.Key) == null).Key;
}
public string FirstEmptyBotSlot()
{
return Slots.FirstOrDefault(s => !s.Value.Closed && ClientInSlot(s.Key) == null && s.Value.AllowBots).Key;
}
public bool IsSinglePlayer
{
get { return Clients.Count(c => c.Bot == null) == 1; }

View File

@@ -448,7 +448,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var disconnectButton = lobby.Get<ButtonWidget>("DISCONNECT_BUTTON");
disconnectButton.OnClick = () => { CloseWindow(); onExit(); };
if (this.skirmishMode)
if (skirmishMode)
disconnectButton.Text = "Cancel";
bool teamChat = false;
@@ -489,17 +489,20 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{ "worldRenderer", worldRenderer }
});
}
// Add a bot on the first lobbyinfo update
if (this.skirmishMode)
if (skirmishMode)
{
Game.LobbyInfoChanged += WidgetUtils.Once(() =>
{
var slot = orderManager.LobbyInfo.FirstEmptySlot();
var slot = orderManager.LobbyInfo.FirstEmptyBotSlot();
var bot = Rules.Info["player"].Traits.WithInterface<IBotInfo>().Select(t => t.Name).FirstOrDefault();
var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin);
if (slot != null && bot != null)
orderManager.IssueOrder(Order.Command("slot_bot {0} {1} {2}".F(slot, botController.Index, bot)));
});
}
}
void AddChatLine(Color c, string from, string text)
{
@@ -683,7 +686,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
spec = newSpectatorTemplate.Clone();
LobbyUtils.SetupKickSpectatorsWidget(spec, orderManager, lobby,
() => panel = PanelType.Kick, () => panel = PanelType.Players, this.skirmishMode);
() => panel = PanelType.Kick, () => panel = PanelType.Players, skirmishMode);
var btn = spec.Get<ButtonWidget>("SPECTATE");
btn.OnClick = () => orderManager.IssueOrder(Order.Command("spectate"));