diff --git a/OpenRA.Game/Chat.cs b/OpenRA.Game/Chat.cs index 9ca3619411..9867004bdb 100644 --- a/OpenRA.Game/Chat.cs +++ b/OpenRA.Game/Chat.cs @@ -32,11 +32,12 @@ namespace OpenRA public List recentLines = new List(); public string typing = ""; public bool isChatting = true; + public bool isTeamChat = false; public void Toggle() { if( isChatting && typing.Length > 0 ) - Game.IssueOrder( Order.Chat( typing ) ); + Game.IssueOrder( isTeamChat ? Order.TeamChat( typing ) : Order.Chat( typing ) ); typing = ""; if( Game.orderManager.GameStarted ) diff --git a/OpenRA.Game/Chrome.cs b/OpenRA.Game/Chrome.cs index 20c3be277c..f5b48d5ade 100644 --- a/OpenRA.Game/Chrome.cs +++ b/OpenRA.Game/Chrome.cs @@ -192,7 +192,7 @@ namespace OpenRA renderer.Device.EnableScissor(typingArea.Left, typingArea.Top, typingArea.Width, typingArea.Height); if (Game.chat.isChatting) - RenderChatLine(new ChatLine { Owner = "Chat:", Text = Game.chat.typing }, + RenderChatLine(new ChatLine { Owner = Game.chat.isTeamChat ? "TeamChat:" : "Chat:", Text = Game.chat.typing }, new int2(typingArea.X + 10, typingArea.Y + 6)); rgbaRenderer.Flush(); diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index caa9916b03..48a6b78da3 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -495,7 +495,10 @@ namespace OpenRA int sync = world.SyncHash(); if (e.KeyChar == '\r') + { chat.Toggle(); + chat.isTeamChat = modifiers.HasModifier(Modifiers.Shift); + } else if (Game.chat.isChatting) chat.TypeChar(e.KeyChar); else diff --git a/OpenRA.Game/Network/Order.cs b/OpenRA.Game/Network/Order.cs index 3861868b10..81beb8ada5 100755 --- a/OpenRA.Game/Network/Order.cs +++ b/OpenRA.Game/Network/Order.cs @@ -171,6 +171,11 @@ namespace OpenRA return new Order("Chat", null, text) { IsImmediate = true }; } + public static Order TeamChat(string text) + { + return new Order("TeamChat", null, text) { IsImmediate = true }; + } + public static Order StartProduction(Player subject, string item, int count) { return new Order("StartProduction", subject.PlayerActor, new int2( count, 0 ), item ); diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index 682d18fdd3..d07e9624c5 100755 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -37,6 +37,20 @@ namespace OpenRA.Network Game.chat.AddLine(client, order.TargetString); break; } + case "TeamChat": + { + var client = Game.LobbyInfo.Clients.FirstOrDefault(c => c.Index == clientId); + if (client != null) + { + var player = Game.world.players.Values.FirstOrDefault(p => p.Index == client.Index); + var isAlly = player != null && Game.world.LocalPlayer != null + && player.Stances[Game.world.LocalPlayer] == Stance.Ally; + + if (isAlly) + Game.chat.AddLine(client, "(Team) " + order.TargetString); + } + break; + } case "StartGame": { Game.chat.AddLine(Color.White, "Server", "The game has started.");