Merge pull request #9639 from abcdefg30/specchat

Add team chat for spectators
This commit is contained in:
Oliver Brakmann
2015-12-01 22:32:57 +01:00
2 changed files with 13 additions and 13 deletions

View File

@@ -76,19 +76,18 @@ namespace OpenRA.Network
if (world == null) if (world == null)
{ {
if (orderManager.LocalClient != null && client.Team == orderManager.LocalClient.Team) if (orderManager.LocalClient != null && client.Team == orderManager.LocalClient.Team)
Game.AddChatLine(client.Color.RGB, client.Name + " (Team)", Game.AddChatLine(client.Color.RGB, client.Name + " (Team)", order.TargetString);
order.TargetString);
} }
else else
{ {
var player = world.FindPlayerByClient(client); var player = world.FindPlayerByClient(client);
if (player == null) return; if (player != null && ((world.LocalPlayer != null && player.Stances[world.LocalPlayer] == Stance.Ally) || player.WinState == WinState.Lost))
if ((world.LocalPlayer != null && player.Stances[world.LocalPlayer] == Stance.Ally) || player.WinState == WinState.Lost)
{ {
var suffix = player.WinState == WinState.Lost ? " (Dead)" : " (Team)"; var suffix = player.WinState == WinState.Lost ? " (Dead)" : " (Team)";
Game.AddChatLine(client.Color.RGB, client.Name + suffix, order.TargetString); Game.AddChatLine(client.Color.RGB, client.Name + suffix, order.TargetString);
} }
else if (orderManager.LocalClient != null && orderManager.LocalClient.IsObserver && client.IsObserver)
Game.AddChatLine(client.Color.RGB, client.Name + " (Spectators)", order.TargetString);
} }
} }

View File

@@ -47,7 +47,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
chatTraits = world.WorldActor.TraitsImplementing<INotifyChat>().ToArray(); chatTraits = world.WorldActor.TraitsImplementing<INotifyChat>().ToArray();
var players = world.Players.Where(p => p != world.LocalPlayer && !p.NonCombatant && !p.IsBot); var players = world.Players.Where(p => p != world.LocalPlayer && !p.NonCombatant && !p.IsBot);
disableTeamChat = world.LocalPlayer == null || world.LobbyInfo.IsSinglePlayer || !players.Any(p => p.IsAlliedWith(world.LocalPlayer)); disableTeamChat = world.IsReplay || world.LobbyInfo.IsSinglePlayer || (world.LocalPlayer != null && !players.Any(p => p.IsAlliedWith(world.LocalPlayer)));
teamChat = !disableTeamChat; teamChat = !disableTeamChat;
tabCompletion.Commands = chatTraits.OfType<ChatCommands>().SelectMany(x => x.Commands.Keys).ToList(); tabCompletion.Commands = chatTraits.OfType<ChatCommands>().SelectMany(x => x.Commands.Keys).ToList();
@@ -71,15 +71,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
var team = teamChat && !disableTeamChat; var team = teamChat && !disableTeamChat;
if (chatText.Text != "") if (chatText.Text != "")
{
if (!chatText.Text.StartsWith("/")) if (!chatText.Text.StartsWith("/"))
orderManager.IssueOrder(Order.Chat(team, chatText.Text.Trim())); orderManager.IssueOrder(Order.Chat(team, chatText.Text.Trim()));
else else if (chatTraits != null)
if (chatTraits != null) {
{ var text = chatText.Text.Trim();
var text = chatText.Text.Trim(); foreach (var trait in chatTraits)
foreach (var trait in chatTraits) trait.OnChat(orderManager.LocalClient.Name, text);
trait.OnChat(orderManager.LocalClient.Name, text); }
} }
chatText.Text = ""; chatText.Text = "";
CloseChat(); CloseChat();