Disable 1 human versus bots games

Changed the Server.LockBots setting to Server.DisableSinglePlayer.

If the setting is enabled, and there is only one client in the server,
the game won't start.
This commit is contained in:
Alexandre Oliveira
2016-02-01 11:38:50 -02:00
parent ac2455824c
commit 989bf4f807
5 changed files with 22 additions and 10 deletions

View File

@@ -196,6 +196,7 @@ namespace OpenRA.Network
public bool ShortGame = true;
public bool AllowVersionMismatch;
public string GameUid;
public bool DisableSingleplayer;
public static Global Deserialize(MiniYaml data)
{

View File

@@ -148,7 +148,8 @@ namespace OpenRA.Server
RandomSeed = randomSeed,
Map = settings.Map,
ServerName = settings.Name,
Dedicated = settings.Dedicated
Dedicated = settings.Dedicated,
DisableSingleplayer = settings.DisableSinglePlayer,
}
};
@@ -395,8 +396,8 @@ namespace OpenRA.Server
if (Map.RuleDefinitions.Any() && !LobbyInfo.IsSinglePlayer)
SendOrderTo(newConn, "Message", "This map contains custom rules. Game experience may change.");
if (Settings.LockBots)
SendOrderTo(newConn, "Message", "Bots have been disabled on this server.");
if (Settings.DisableSinglePlayer)
SendOrderTo(newConn, "Message", "Singleplayer games have been disabled on this server.");
else if (MapPlayers.Players.Where(p => p.Value.Playable).All(p => !p.Value.AllowBots))
SendOrderTo(newConn, "Message", "Bots have been disabled on this map.");

View File

@@ -70,8 +70,8 @@ namespace OpenRA
[Desc("Automatically restart when a game ends. Disable this when something else already takes care about it.")]
public bool DedicatedLoop = true;
[Desc("Disallow AI bots.")]
public bool LockBots = false;
[Desc("Disallow games where only one player plays with bots.")]
public bool DisableSinglePlayer = false;
public string TimestampFormat = "s";

View File

@@ -67,6 +67,10 @@ namespace OpenRA.Mods.Common.Server
if (server.LobbyInfo.Slots.Any(sl => sl.Value.Required && server.LobbyInfo.ClientInSlot(sl.Key) == null))
return;
// Does server have only one player?
if (server.Settings.DisableSinglePlayer && playerClients.Count() == 1)
return;
server.StartGame();
}
@@ -115,6 +119,13 @@ namespace OpenRA.Mods.Common.Server
return true;
}
if (server.Settings.DisableSinglePlayer &&
server.LobbyInfo.Clients.Where(c => c.Bot == null && c.Slot != null).Count() == 1)
{
server.SendOrderTo(conn, "Message", "Unable to start the game until another player joins.");
return true;
}
server.StartGame();
return true;
}
@@ -373,8 +384,8 @@ namespace OpenRA.Mods.Common.Server
if (server.Map.RuleDefinitions.Any())
server.SendMessage("This map contains custom rules. Game experience may change.");
if (server.Settings.LockBots)
server.SendMessage("Bots have been disabled on this server.");
if (server.Settings.DisableSinglePlayer)
server.SendMessage("Singleplayer games have been disabled on this server.");
else if (server.MapPlayers.Players.Where(p => p.Value.Playable).All(p => !p.Value.AllowBots))
server.SendMessage("Bots have been disabled on this map.");
@@ -923,8 +934,6 @@ namespace OpenRA.Mods.Common.Server
static Session.Slot MakeSlotFromPlayerReference(PlayerReference pr)
{
if (!pr.Playable) return null;
if (Game.Settings.Server.LockBots)
pr.AllowBots = false;
return new Session.Slot
{
PlayerReference = pr.Name,

View File

@@ -318,7 +318,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (startGameButton != null)
{
startGameButton.IsDisabled = () => configurationDisabled() || Map.RuleStatus != MapRuleStatus.Cached ||
orderManager.LobbyInfo.Slots.Any(sl => sl.Value.Required && orderManager.LobbyInfo.ClientInSlot(sl.Key) == null);
orderManager.LobbyInfo.Slots.Any(sl => sl.Value.Required && orderManager.LobbyInfo.ClientInSlot(sl.Key) == null) ||
(orderManager.LobbyInfo.GlobalSettings.DisableSingleplayer && orderManager.LobbyInfo.IsSinglePlayer);
startGameButton.OnClick = () =>
{
// Bots and admins don't count