diff --git a/OpenRA.Game/GameRules/Settings.cs b/OpenRA.Game/GameRules/Settings.cs
index 282c14442a..4709b1cca0 100755
--- a/OpenRA.Game/GameRules/Settings.cs
+++ b/OpenRA.Game/GameRules/Settings.cs
@@ -15,6 +15,7 @@ using System.IO;
using System.Windows.Forms;
using OpenRA.FileFormats;
using OpenRA.FileFormats.Graphics;
+using OpenRA.Server;
namespace OpenRA.GameRules
{
diff --git a/OpenRA.Game/Misc.cs b/OpenRA.Game/Misc.cs
deleted file mode 100644
index dee66b8200..0000000000
--- a/OpenRA.Game/Misc.cs
+++ /dev/null
@@ -1,176 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using OpenRA.Network;
-using OpenRA.Server;
-using OpenRA.Traits;
-
-namespace OpenRA
-{
- public interface IServerExtension
- {
- ///
- /// Return true to use the build-in handling
- ///
- bool OnReadyUp(Connection conn, Session.Client client);
- void OnStartGame();
- ///
- /// Return true to use the build-in handling
- ///
- bool OnNickChange(Connection conn, Session.Client client, string newName);
-
- ///
- /// Return true to use the build-in handling
- ///
- bool OnRaceChange(Connection conn, Session.Client client, string newRace);
-
- ///
- /// Return true to use the build-in handling
- ///
- bool OnSlotChange(Connection conn, Session.Client client, Session.Slot slot, Map map);
-
- ///
- /// Return true to use the build-in handling
- ///
- bool OnTeamChange(Connection conn, Session.Client getClient, int team);
-
- ///
- /// Return true to use the build-in handling
- ///
- bool OnSpawnpointChange(Connection conn, Session.Client getClient, int spawnPoint);
-
- ///
- /// Return true to use the build-in handling
- ///
- bool OnColorChange(Connection conn, Session.Client getClient, Color fromArgb, Color color);
-
- ///
- /// Return true to use the build-in handling
- ///
- bool OnChat(Connection conn, string message, bool teamChat);
-
- void OnServerStart();
- void OnServerStop(bool forced);
- void OnLoadMap(Map map);
-
- ///
- /// Return false to drop the connection
- ///
- bool OnValidateConnection(bool gameStarted, Connection newConn);
-
- void OnLobbySync(Session lobbyInfo, bool gameStarted);
- ///
- /// Return true to use the build-in handling
- ///
- bool OnPingMasterServer(Session lobbyInfo, bool gameStarted);
-
- ///
- /// Return true to use the build-in handling
- ///
- bool OnIngameChat(Session.Client client, string message, bool teamChat);
-
- void OnIngameSetStance(Player player, Player stanceForPlayer, Stance newStance);
-
- void OnLobbyUp();
- void OnRejoinLobby(World world);
- }
-
- public class NullServerExtension : IServerExtension
- {
- public virtual bool OnReadyUp(Connection conn, Session.Client client)
- {
- return true;
- }
-
- public virtual void OnStartGame()
- {
-
- }
-
- public virtual bool OnNickChange(Connection conn, Session.Client client, string newName)
- {
- return true;
- }
-
- public virtual bool OnRaceChange(Connection conn, Session.Client client, string newRace)
- {
- return true;
- }
-
- public virtual bool OnSlotChange(Connection conn, Session.Client client, Session.Slot slot, Map map)
- {
- return true;
- }
-
- public virtual bool OnTeamChange(Connection conn, Session.Client getClient, int team)
- {
- return true;
- }
-
- public virtual bool OnSpawnpointChange(Connection conn, Session.Client getClient, int spawnPoint)
- {
- return true;
- }
-
- public virtual bool OnColorChange(Connection conn, Session.Client getClient, Color fromArgb, Color color)
- {
- return true;
- }
-
- public virtual bool OnChat(Connection conn, string message, bool teamChat)
- {
- return true;
- }
-
- public virtual void OnServerStart()
- {
- }
-
- public virtual void OnServerStop(bool forced)
- {
-
- }
-
- public virtual void OnLoadMap(Map map)
- {
- // Good spot to manipulate amount of spectators! ie set Server.MaxSpectators
- }
-
- public virtual bool OnValidateConnection(bool gameStarted, Connection newConn)
- {
- return true;
- }
-
- public virtual void OnLobbySync(Session lobbyInfo, bool gameStarted)
- {
-
- }
-
- public virtual bool OnPingMasterServer(Session lobbyInfo, bool gameStarted)
- {
- return true;
- }
-
- public virtual bool OnIngameChat(Session.Client client, string message, bool teamChat)
- {
- return true;
- }
-
- public virtual void OnIngameSetStance(Player player, Player stanceForPlayer, Stance newStance)
- {
-
- }
-
- public virtual void OnLobbyUp()
- {
-
- }
-
- public virtual void OnRejoinLobby(World world)
- {
-
- }
- }
-}
diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj
index 92d665fb2d..c5f37e8455 100755
--- a/OpenRA.Game/OpenRA.Game.csproj
+++ b/OpenRA.Game/OpenRA.Game.csproj
@@ -211,7 +211,6 @@
-
@@ -220,6 +219,8 @@
+
+
@@ -256,4 +257,4 @@
-->
-
+
\ No newline at end of file
diff --git a/OpenRA.Game/Server/IServerExtension.cs b/OpenRA.Game/Server/IServerExtension.cs
new file mode 100644
index 0000000000..6742a825b6
--- /dev/null
+++ b/OpenRA.Game/Server/IServerExtension.cs
@@ -0,0 +1,74 @@
+using System.Drawing;
+using OpenRA.Network;
+using OpenRA.Traits;
+
+namespace OpenRA.Server
+{
+ public interface IServerExtension
+ {
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnReadyUp(Connection conn, Session.Client client);
+ void OnStartGame();
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnNickChange(Connection conn, Session.Client client, string newName);
+
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnRaceChange(Connection conn, Session.Client client, string newRace);
+
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnSlotChange(Connection conn, Session.Client client, Session.Slot slot, Map map);
+
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnTeamChange(Connection conn, Session.Client getClient, int team);
+
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnSpawnpointChange(Connection conn, Session.Client getClient, int spawnPoint);
+
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnColorChange(Connection conn, Session.Client getClient, Color fromArgb, Color color);
+
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnChat(Connection conn, string message, bool teamChat);
+
+ void OnServerStart();
+ void OnServerStop(bool forced);
+ void OnLoadMap(Map map);
+
+ ///
+ /// Return false to drop the connection
+ ///
+ bool OnValidateConnection(bool gameStarted, Connection newConn);
+
+ void OnLobbySync(Session lobbyInfo, bool gameStarted);
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnPingMasterServer(Session lobbyInfo, bool gameStarted);
+
+ ///
+ /// Return true to use the built-in handling
+ ///
+ bool OnIngameChat(Session.Client client, string message, bool teamChat);
+
+ void OnIngameSetStance(Player player, Player stanceForPlayer, Stance newStance);
+
+ void OnLobbyUp();
+ void OnRejoinLobby(World world);
+ }
+}
diff --git a/OpenRA.Game/Server/NullServerExtension.cs b/OpenRA.Game/Server/NullServerExtension.cs
new file mode 100644
index 0000000000..1b6cb79585
--- /dev/null
+++ b/OpenRA.Game/Server/NullServerExtension.cs
@@ -0,0 +1,30 @@
+using System.Drawing;
+using OpenRA.Network;
+using OpenRA.Traits;
+
+namespace OpenRA.Server
+{
+ public class NullServerExtension : IServerExtension
+ {
+ public virtual bool OnReadyUp(Connection conn, Session.Client client) { return true; }
+ public virtual void OnStartGame() { }
+ public virtual bool OnNickChange(Connection conn, Session.Client client, string newName) { return true; }
+ public virtual bool OnRaceChange(Connection conn, Session.Client client, string newRace) { return true; }
+ public virtual bool OnSlotChange(Connection conn, Session.Client client, Session.Slot slot, Map map) { return true; }
+ public virtual bool OnTeamChange(Connection conn, Session.Client getClient, int team) { return true; }
+ public virtual bool OnSpawnpointChange(Connection conn, Session.Client getClient, int spawnPoint) { return true; }
+ public virtual bool OnColorChange(Connection conn, Session.Client getClient, Color fromArgb, Color color) { return true; }
+ public virtual bool OnChat(Connection conn, string message, bool teamChat) { return true; }
+ public virtual void OnServerStart() { }
+ public virtual void OnServerStop(bool forced) { }
+ // Good spot to manipulate number of spectators! ie set Server.MaxSpectators
+ public virtual void OnLoadMap(Map map) { }
+ public virtual bool OnValidateConnection(bool gameStarted, Connection newConn) { return true; }
+ public virtual void OnLobbySync(Session lobbyInfo, bool gameStarted) { }
+ public virtual bool OnPingMasterServer(Session lobbyInfo, bool gameStarted) { return true; }
+ public virtual bool OnIngameChat(Session.Client client, string message, bool teamChat) { return true; }
+ public virtual void OnIngameSetStance(Player player, Player stanceForPlayer, Stance newStance) { }
+ public virtual void OnLobbyUp() { }
+ public virtual void OnRejoinLobby(World world) { }
+ }
+}