diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index e6338f7ba2..1c3544129d 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -43,9 +43,11 @@ namespace OpenRA.Server static bool isInternetServer; static string masterServerUrl; static bool isInitialPing; + static ModData ModData; + static Map Map; public static void ServerMain(bool internetServer, string masterServerUrl, string name, int port, int extport, - string[] mods, string map, bool cheats) + string[] mods, string map, bool cheats, ModData modData) { Log.AddChannel("server", "server.log"); @@ -56,18 +58,23 @@ namespace OpenRA.Server Name = name; ExternalPort = extport; randomSeed = (int)DateTime.Now.ToBinary(); + ModData = modData; lobbyInfo = new Session(); lobbyInfo.GlobalSettings.Mods = mods; lobbyInfo.GlobalSettings.RandomSeed = randomSeed; lobbyInfo.GlobalSettings.Map = map; lobbyInfo.GlobalSettings.AllowCheats = cheats; + + LoadMap(); // populates the Session's slots, too. Log.Write("server", "Initial mods: "); foreach( var m in lobbyInfo.GlobalSettings.Mods ) Log.Write("server","- {0}", m); Log.Write("server", "Initial map: {0}",lobbyInfo.GlobalSettings.Map); + + try { @@ -109,6 +116,11 @@ namespace OpenRA.Server } ) { IsBackground = true }.Start(); } + static void LoadMap() + { + Map = new Map(ModData.AvailableMaps[lobbyInfo.GlobalSettings.Map].Package); + } + static int ChooseFreePlayerIndex() { for (var i = 0; i < 8; i++) @@ -337,7 +349,9 @@ namespace OpenRA.Server SendChatTo( conn, "Only the host can change the map" ); return true; } - lobbyInfo.GlobalSettings.Map = s; + lobbyInfo.GlobalSettings.Map = s; + LoadMap(); + foreach(var client in lobbyInfo.Clients) { client.SpawnPoint = 0; diff --git a/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs b/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs index d26518473f..3d4f8004a5 100644 --- a/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/CreateServerMenuDelegate.cs @@ -43,8 +43,9 @@ namespace OpenRA.Widgets.Delegates Game.Settings.ExternalPort = int.Parse(cs.GetWidget("EXTERNAL_PORT").Text); Game.Settings.Save(); - Server.Server.ServerMain(Game.Settings.AdvertiseOnline, Game.Settings.MasterServer, Game.Settings.LastServerTitle, - Game.Settings.ListenPort, Game.Settings.ExternalPort, mods, map, Game.Settings.AllowCheats); + Server.Server.ServerMain(Game.Settings.AdvertiseOnline, Game.Settings.MasterServer, Game.Settings.LastServerTitle, + Game.Settings.ListenPort, Game.Settings.ExternalPort, mods, map, Game.Settings.AllowCheats, + Game.modData); Game.JoinServer(IPAddress.Loopback.ToString(), Game.Settings.ListenPort); return true;