Merge pull request #9639 from abcdefg30/specchat
Add team chat for spectators
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user