Use MapPreview on the server.

This commit is contained in:
Paul Chote
2016-03-09 19:17:45 +00:00
parent 6c319d53dd
commit 1ba7a5e59e
2 changed files with 16 additions and 18 deletions

View File

@@ -51,8 +51,7 @@ namespace OpenRA.Server
public List<string> TempBans = new List<string>(); public List<string> TempBans = new List<string>();
// Managed by LobbyCommands // Managed by LobbyCommands
public Map Map; public MapPreview Map;
public MapPlayers MapPlayers;
readonly int randomSeed; readonly int randomSeed;
readonly TcpListener listener; readonly TcpListener listener;
@@ -323,7 +322,7 @@ namespace OpenRA.Server
} }
if (client.Slot != null) if (client.Slot != null)
SyncClientToPlayerReference(client, MapPlayers.Players[client.Slot]); SyncClientToPlayerReference(client, Map.Players.Players[client.Slot]);
else else
client.Color = HSLColor.FromRGB(255, 255, 255); client.Color = HSLColor.FromRGB(255, 255, 255);
@@ -392,12 +391,12 @@ namespace OpenRA.Server
SendOrderTo(newConn, "Message", motd); SendOrderTo(newConn, "Message", motd);
} }
if (Map.RuleDefinitions != null && !LobbyInfo.IsSinglePlayer) if (Map.Rules != ModData.DefaultRules && !LobbyInfo.IsSinglePlayer)
SendOrderTo(newConn, "Message", "This map contains custom rules. Game experience may change."); SendOrderTo(newConn, "Message", "This map contains custom rules. Game experience may change.");
if (Settings.DisableSinglePlayer) if (Settings.DisableSinglePlayer)
SendOrderTo(newConn, "Message", "Singleplayer games have been disabled on this server."); 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)) else if (Map.Players.Players.Where(p => p.Value.Playable).All(p => !p.Value.AllowBots))
SendOrderTo(newConn, "Message", "Bots have been disabled on this map."); SendOrderTo(newConn, "Message", "Bots have been disabled on this map.");
if (handshake.Mod == "{DEV_VERSION}") if (handshake.Mod == "{DEV_VERSION}")

View File

@@ -152,7 +152,7 @@ namespace OpenRA.Mods.Common.Server
client.SpawnPoint = 0; client.SpawnPoint = 0;
client.Slot = s; client.Slot = s;
S.SyncClientToPlayerReference(client, server.MapPlayers.Players[s]); S.SyncClientToPlayerReference(client, server.Map.Players.Players[s]);
if (!slot.LockColor) if (!slot.LockColor)
client.PreferredColor = client.Color = SanitizePlayerColor(server, client.Color, client.Index, conn); client.PreferredColor = client.Color = SanitizePlayerColor(server, client.Color, client.Index, conn);
@@ -311,7 +311,7 @@ namespace OpenRA.Mods.Common.Server
var tileset = server.Map.Rules.TileSet; var tileset = server.Map.Rules.TileSet;
var terrainColors = tileset.TerrainInfo.Where(ti => ti.RestrictPlayerColor).Select(ti => ti.Color); var terrainColors = tileset.TerrainInfo.Where(ti => ti.RestrictPlayerColor).Select(ti => ti.Color);
var playerColors = server.LobbyInfo.Clients.Select(c => c.Color.RGB) var playerColors = server.LobbyInfo.Clients.Select(c => c.Color.RGB)
.Concat(server.MapPlayers.Players.Values.Select(p => p.Color.RGB)); .Concat(server.Map.Players.Players.Values.Select(p => p.Color.RGB));
bot.Color = bot.PreferredColor = validator.RandomValidColor(server.Random, terrainColors, playerColors); bot.Color = bot.PreferredColor = validator.RandomValidColor(server.Random, terrainColors, playerColors);
server.LobbyInfo.Clients.Add(bot); server.LobbyInfo.Clients.Add(bot);
@@ -323,7 +323,7 @@ namespace OpenRA.Mods.Common.Server
bot.Bot = botType; bot.Bot = botType;
} }
S.SyncClientToPlayerReference(bot, server.MapPlayers.Players[parts[0]]); S.SyncClientToPlayerReference(bot, server.Map.Players.Players[parts[0]]);
server.SyncLobbyClients(); server.SyncLobbyClients();
server.SyncLobbySlots(); server.SyncLobbySlots();
return true; return true;
@@ -370,9 +370,9 @@ namespace OpenRA.Mods.Common.Server
if (c.Slot != null) if (c.Slot != null)
{ {
// Remove Bot from slot if slot forbids bots // Remove Bot from slot if slot forbids bots
if (c.Bot != null && !server.MapPlayers.Players[c.Slot].AllowBots) if (c.Bot != null && !server.Map.Players.Players[c.Slot].AllowBots)
server.LobbyInfo.Clients.Remove(c); server.LobbyInfo.Clients.Remove(c);
S.SyncClientToPlayerReference(c, server.MapPlayers.Players[c.Slot]); S.SyncClientToPlayerReference(c, server.Map.Players.Players[c.Slot]);
} }
else if (c.Bot != null) else if (c.Bot != null)
server.LobbyInfo.Clients.Remove(c); server.LobbyInfo.Clients.Remove(c);
@@ -387,12 +387,12 @@ namespace OpenRA.Mods.Common.Server
server.SendMessage("{0} changed the map to {1}.".F(client.Name, server.Map.Title)); server.SendMessage("{0} changed the map to {1}.".F(client.Name, server.Map.Title));
if (server.Map.RuleDefinitions != null) if (server.Map.Rules.Actors != server.ModData.DefaultRules.Actors)
server.SendMessage("This map contains custom rules. Game experience may change."); server.SendMessage("This map contains custom rules. Game experience may change.");
if (server.Settings.DisableSinglePlayer) if (server.Settings.DisableSinglePlayer)
server.SendMessage("Singleplayer games have been disabled on this server."); 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)) else if (server.Map.Players.Players.Where(p => p.Value.Playable).All(p => !p.Value.AllowBots))
server.SendMessage("Bots have been disabled on this map."); server.SendMessage("Bots have been disabled on this map.");
return true; return true;
@@ -875,7 +875,7 @@ namespace OpenRA.Mods.Common.Server
int spawnPoint; int spawnPoint;
if (!Exts.TryParseIntegerInvariant(parts[1], out spawnPoint) if (!Exts.TryParseIntegerInvariant(parts[1], out spawnPoint)
|| spawnPoint < 0 || spawnPoint > server.Map.SpawnPoints.Value.Length) || spawnPoint < 0 || spawnPoint > server.Map.SpawnPoints.Length)
{ {
Log.Write("server", "Invalid spawn point: {0}", parts[1]); Log.Write("server", "Invalid spawn point: {0}", parts[1]);
return true; return true;
@@ -1042,10 +1042,9 @@ namespace OpenRA.Mods.Common.Server
static void LoadMap(S server) static void LoadMap(S server)
{ {
server.Map = new Map(server.ModData, server.ModData.MapCache[server.LobbyInfo.GlobalSettings.Map].Package); server.Map = server.ModData.MapCache[server.LobbyInfo.GlobalSettings.Map];
server.MapPlayers = new MapPlayers(server.Map.PlayerDefinitions); server.LobbyInfo.Slots = server.Map.Players.Players
server.LobbyInfo.Slots = server.MapPlayers.Players
.Select(p => MakeSlotFromPlayerReference(p.Value)) .Select(p => MakeSlotFromPlayerReference(p.Value))
.Where(s => s != null) .Where(s => s != null)
.ToDictionary(s => s.PlayerReference, s => s); .ToDictionary(s => s.PlayerReference, s => s);
@@ -1067,7 +1066,7 @@ namespace OpenRA.Mods.Common.Server
var tileset = server.Map.Rules.TileSet; var tileset = server.Map.Rules.TileSet;
var terrainColors = tileset.TerrainInfo.Where(ti => ti.RestrictPlayerColor).Select(ti => ti.Color).ToList(); var terrainColors = tileset.TerrainInfo.Where(ti => ti.RestrictPlayerColor).Select(ti => ti.Color).ToList();
var playerColors = server.LobbyInfo.Clients.Where(c => c.Index != playerIndex).Select(c => c.Color.RGB) var playerColors = server.LobbyInfo.Clients.Where(c => c.Index != playerIndex).Select(c => c.Color.RGB)
.Concat(server.MapPlayers.Players.Values.Select(p => p.Color.RGB)).ToList(); .Concat(server.Map.Players.Players.Values.Select(p => p.Color.RGB)).ToList();
return validator.MakeValid(askColor.RGB, server.Random, terrainColors, playerColors, onError); return validator.MakeValid(askColor.RGB, server.Random, terrainColors, playerColors, onError);
} }
@@ -1086,7 +1085,7 @@ namespace OpenRA.Mods.Common.Server
if (slot == null) if (slot == null)
return null; return null;
return server.MapPlayers.Players[slot.PlayerReference]; return server.Map.Players.Players[slot.PlayerReference];
} }
} }
} }