diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs
index b582377d8f..e8b98dcb31 100644
--- a/OpenRA.Game/Server/Server.cs
+++ b/OpenRA.Game/Server/Server.cs
@@ -336,10 +336,6 @@ namespace OpenRA.Server
// Send initial ping
SendOrderTo(newConn, "Ping", Game.RunTime.ToString());
- // Send Lobby info to newly connected client
- if (!client.IsAdmin)
- NotifyNewClientOfLobbyInfo(newConn);
-
if (Settings.Dedicated)
{
var motdFile = Path.Combine(Platform.SupportDir, "motd.txt");
@@ -359,39 +355,6 @@ namespace OpenRA.Server
catch (Exception) { DropClient(newConn); }
}
- void NotifyNewClientOfLobbyInfo(Connection newConn)
- {
- var defaults = new Session.Global();
- FieldLoader.Load(defaults, Game.modData.Manifest.LobbyDefaults);
-
- if (LobbyInfo.GlobalSettings.FragileAlliances != defaults.FragileAlliances)
- SendOrderTo(newConn, "Message", "Diplomacy Changes: {0}".F(LobbyInfo.GlobalSettings.FragileAlliances));
-
- if (LobbyInfo.GlobalSettings.AllowCheats != defaults.AllowCheats)
- SendOrderTo(newConn, "Message", "Allow Cheats: {0}".F(LobbyInfo.GlobalSettings.AllowCheats));
-
- if (LobbyInfo.GlobalSettings.Shroud != defaults.Shroud)
- SendOrderTo(newConn, "Message", "Shroud: {0}".F(LobbyInfo.GlobalSettings.Shroud));
-
- if (LobbyInfo.GlobalSettings.Fog != defaults.Fog)
- SendOrderTo(newConn, "Message", "Fog of war: {0}".F(LobbyInfo.GlobalSettings.Fog));
-
- if (LobbyInfo.GlobalSettings.Crates != defaults.Crates)
- SendOrderTo(newConn, "Message", "Crates Appear: {0}".F(LobbyInfo.GlobalSettings.Crates));
-
- if (LobbyInfo.GlobalSettings.AllyBuildRadius != defaults.AllyBuildRadius)
- SendOrderTo(newConn, "Message", "Build off Ally ConYards: {0}".F(LobbyInfo.GlobalSettings.AllyBuildRadius));
-
- if (LobbyInfo.GlobalSettings.StartingUnitsClass != defaults.StartingUnitsClass)
- SendOrderTo(newConn, "Message", "Starting Units: {0}".F(LobbyInfo.GlobalSettings.StartingUnitsClass));
-
- if (LobbyInfo.GlobalSettings.StartingCash != defaults.StartingCash)
- SendOrderTo(newConn, "Message", "Starting Cash: ${0}".F(LobbyInfo.GlobalSettings.StartingCash));
-
- if (LobbyInfo.GlobalSettings.TechLevel != defaults.TechLevel)
- SendOrderTo(newConn, "Message", "Tech Level: {0}".F(LobbyInfo.GlobalSettings.TechLevel));
- }
-
void SetOrderLag()
{
if (LobbyInfo.IsSinglePlayer)
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index 85dab4f5b9..82aa4542e6 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -559,6 +559,7 @@
+
diff --git a/OpenRA.Mods.RA/ServerTraits/LobbySettingsNotification.cs b/OpenRA.Mods.RA/ServerTraits/LobbySettingsNotification.cs
new file mode 100644
index 0000000000..0cf68370c0
--- /dev/null
+++ b/OpenRA.Mods.RA/ServerTraits/LobbySettingsNotification.cs
@@ -0,0 +1,60 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System.Linq;
+using OpenRA.Network;
+using OpenRA.Server;
+
+namespace OpenRA.Mods.RA.Server
+{
+ public class LobbySettingsNotification : ServerTrait, IClientJoined
+ {
+ public void ClientJoined(OpenRA.Server.Server server, Connection conn)
+ {
+ if (server.LobbyInfo.ClientWithIndex(conn.PlayerIndex).IsAdmin)
+ return;
+
+ var defaults = new Session.Global();
+ FieldLoader.Load(defaults, Game.modData.Manifest.LobbyDefaults);
+
+ if (server.LobbyInfo.GlobalSettings.FragileAlliances != defaults.FragileAlliances)
+ server.SendOrderTo(conn, "Message", "Diplomacy Changes: {0}".F(server.LobbyInfo.GlobalSettings.FragileAlliances));
+
+ if (server.LobbyInfo.GlobalSettings.AllowCheats != defaults.AllowCheats)
+ server.SendOrderTo(conn, "Message", "Allow Cheats: {0}".F(server.LobbyInfo.GlobalSettings.AllowCheats));
+
+ if (server.LobbyInfo.GlobalSettings.Shroud != defaults.Shroud)
+ server.SendOrderTo(conn, "Message", "Shroud: {0}".F(server.LobbyInfo.GlobalSettings.Shroud));
+
+ if (server.LobbyInfo.GlobalSettings.Fog != defaults.Fog)
+ server.SendOrderTo(conn, "Message", "Fog of war: {0}".F(server.LobbyInfo.GlobalSettings.Fog));
+
+ if (server.LobbyInfo.GlobalSettings.Crates != defaults.Crates)
+ server.SendOrderTo(conn, "Message", "Crates Appear: {0}".F(server.LobbyInfo.GlobalSettings.Crates));
+
+ if (server.LobbyInfo.GlobalSettings.AllyBuildRadius != defaults.AllyBuildRadius)
+ server.SendOrderTo(conn, "Message", "Build off Ally ConYards: {0}".F(server.LobbyInfo.GlobalSettings.AllyBuildRadius));
+
+ if (server.LobbyInfo.GlobalSettings.StartingUnitsClass != defaults.StartingUnitsClass)
+ {
+ var startUnitsInfo = server.Map.Rules.Actors["world"].Traits.WithInterface();
+ var selectedClass = startUnitsInfo.Where(u => u.Class == server.LobbyInfo.GlobalSettings.StartingUnitsClass).Select(u => u.ClassName).FirstOrDefault();
+ var className = selectedClass != null ? selectedClass : server.LobbyInfo.GlobalSettings.StartingUnitsClass;
+ server.SendOrderTo(conn, "Message", "Starting Units: {0}".F(className));
+ }
+
+ if (server.LobbyInfo.GlobalSettings.StartingCash != defaults.StartingCash)
+ server.SendOrderTo(conn, "Message", "Starting Cash: ${0}".F(server.LobbyInfo.GlobalSettings.StartingCash));
+
+ if (server.LobbyInfo.GlobalSettings.TechLevel != defaults.TechLevel)
+ server.SendOrderTo(conn, "Message", "Tech Level: {0}".F(server.LobbyInfo.GlobalSettings.TechLevel));
+ }
+ }
+}
\ No newline at end of file
diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml
index 38afa45035..348c62f414 100644
--- a/mods/cnc/mod.yaml
+++ b/mods/cnc/mod.yaml
@@ -152,6 +152,7 @@ ServerTraits:
LobbyCommands
PlayerPinger
MasterServerPinger
+ LobbySettingsNotification
LobbyDefaults:
AllowCheats: false
diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml
index e4703fe110..ad47ee8a29 100644
--- a/mods/d2k/mod.yaml
+++ b/mods/d2k/mod.yaml
@@ -134,6 +134,7 @@ ServerTraits:
LobbyCommands
PlayerPinger
MasterServerPinger
+ LobbySettingsNotification
LobbyDefaults:
AllowCheats: false
diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml
index 1bb66eab72..555af16850 100644
--- a/mods/ra/mod.yaml
+++ b/mods/ra/mod.yaml
@@ -150,6 +150,7 @@ ServerTraits:
LobbyCommands
PlayerPinger
MasterServerPinger
+ LobbySettingsNotification
LobbyDefaults:
AllowCheats: false
diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml
index e889a0e0ae..0609f5075f 100644
--- a/mods/ts/mod.yaml
+++ b/mods/ts/mod.yaml
@@ -179,6 +179,7 @@ ServerTraits:
LobbyCommands
PlayerPinger
MasterServerPinger
+ LobbySettingsNotification
LobbyDefaults:
AllowCheats: true