diff --git a/OpenRA.Server/Server.cs b/OpenRA.Server/Server.cs index e6ac243982..1787d7ec58 100644 --- a/OpenRA.Server/Server.cs +++ b/OpenRA.Server/Server.cs @@ -269,6 +269,18 @@ namespace OpenRA.Server new ServerOrder(0, "StartGame", "").Serialize()); } break; + + case "Chat": + if (so.Data.StartsWith("/name ")) + { + var newName = so.Data.Substring(6); + Console.WriteLine("Player @{0} is now known as {1}", + conn.socket.RemoteEndPoint, newName); + + DispatchOrders(null, 0, + new ServerOrder(conn.PlayerIndex, "SetName", newName).Serialize()); + } + break; } } @@ -279,7 +291,8 @@ namespace OpenRA.Server conns.Remove(c); - /* todo: tell everyone else that `c` has dropped */ + DispatchOrders(c, 0, + new ServerOrder(c.PlayerIndex, "Chat", "Connection Dropped").Serialize()); } public static void Write(this Stream s, byte[] data) { s.Write(data, 0, data.Length); } diff --git a/OpenRa.Game/UnitOrders.cs b/OpenRa.Game/UnitOrders.cs index 4ce12c33f9..58570ff895 100755 --- a/OpenRa.Game/UnitOrders.cs +++ b/OpenRa.Game/UnitOrders.cs @@ -108,6 +108,12 @@ namespace OpenRa.Game Game.chat.AddLine(Pair.New(order.Player.PlayerName, "is now YOU.")); break; } + case "SetName": + { + Game.chat.AddLine(Pair.New(order.Player.PlayerName, "is now known as " + order.TargetString)); + order.Player.PlayerName = order.TargetString; + break; + } case "StartGame": { Game.chat.AddLine(Pair.New("Server:", "The game has started."));