Remove the TeamChat order type
This commit is contained in:
@@ -195,12 +195,9 @@ namespace OpenRA
|
|||||||
|
|
||||||
// Named constructors for Orders.
|
// Named constructors for Orders.
|
||||||
// Now that Orders are resolved by individual Actors, these are weird; you unpack orders manually, but not pack them.
|
// Now that Orders are resolved by individual Actors, these are weird; you unpack orders manually, but not pack them.
|
||||||
public static Order Chat(bool team, string text, int teamNumber = 0)
|
public static Order Chat(string text, uint teamNumber = 0)
|
||||||
{
|
{
|
||||||
if (!team)
|
return new Order("Chat", null, false) { IsImmediate = true, TargetString = text, ExtraData = teamNumber };
|
||||||
return new Order("Chat", null, false) { IsImmediate = true, TargetString = text };
|
|
||||||
|
|
||||||
return new Order("TeamChat", null, false) { IsImmediate = true, TargetString = text, ExtraData = (uint)teamNumber };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Order HandshakeResponse(string text)
|
public static Order HandshakeResponse(string text)
|
||||||
|
|||||||
@@ -38,31 +38,6 @@ namespace OpenRA.Network
|
|||||||
|
|
||||||
switch (order.OrderString)
|
switch (order.OrderString)
|
||||||
{
|
{
|
||||||
case "Chat":
|
|
||||||
{
|
|
||||||
var client = orderManager.LobbyInfo.ClientWithIndex(clientId);
|
|
||||||
|
|
||||||
// Cut chat messages to the hard limit to avoid exploits
|
|
||||||
var message = order.TargetString;
|
|
||||||
if (message.Length > ChatMessageMaxLength)
|
|
||||||
message = order.TargetString.Substring(0, ChatMessageMaxLength);
|
|
||||||
|
|
||||||
if (client != null)
|
|
||||||
{
|
|
||||||
var player = world != null ? world.FindPlayerByClient(client) : null;
|
|
||||||
var suffix = (player != null && player.WinState == WinState.Lost) ? " (Dead)" : "";
|
|
||||||
suffix = client.IsObserver ? " (Spectator)" : suffix;
|
|
||||||
|
|
||||||
if (orderManager.LocalClient != null && client != orderManager.LocalClient && client.Team > 0 && client.Team == orderManager.LocalClient.Team)
|
|
||||||
suffix += " (Ally)";
|
|
||||||
|
|
||||||
Game.AddChatLine(client.Color, client.Name + suffix, message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Game.AddChatLine(Color.White, "(player {0})".F(clientId), message);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Server message
|
// Server message
|
||||||
case "Message":
|
case "Message":
|
||||||
Game.AddChatLine(Color.White, ServerChatName, order.TargetString);
|
Game.AddChatLine(Color.White, ServerChatName, order.TargetString);
|
||||||
@@ -77,7 +52,7 @@ namespace OpenRA.Network
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "TeamChat":
|
case "Chat":
|
||||||
{
|
{
|
||||||
var client = orderManager.LobbyInfo.ClientWithIndex(clientId);
|
var client = orderManager.LobbyInfo.ClientWithIndex(clientId);
|
||||||
if (client == null)
|
if (client == null)
|
||||||
@@ -88,6 +63,20 @@ namespace OpenRA.Network
|
|||||||
if (message.Length > ChatMessageMaxLength)
|
if (message.Length > ChatMessageMaxLength)
|
||||||
message = order.TargetString.Substring(0, ChatMessageMaxLength);
|
message = order.TargetString.Substring(0, ChatMessageMaxLength);
|
||||||
|
|
||||||
|
// ExtraData 0 means this is a normal chat order, everything else is team chat
|
||||||
|
if (order.ExtraData == 0)
|
||||||
|
{
|
||||||
|
var p = world != null ? world.FindPlayerByClient(client) : null;
|
||||||
|
var suffix = (p != null && p.WinState == WinState.Lost) ? " (Dead)" : "";
|
||||||
|
suffix = client.IsObserver ? " (Spectator)" : suffix;
|
||||||
|
|
||||||
|
if (orderManager.LocalClient != null && client != orderManager.LocalClient && client.Team > 0 && client.Team == orderManager.LocalClient.Team)
|
||||||
|
suffix += " (Ally)";
|
||||||
|
|
||||||
|
Game.AddChatLine(client.Color, client.Name + suffix, message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// We are still in the lobby
|
// We are still in the lobby
|
||||||
if (world == null)
|
if (world == null)
|
||||||
{
|
{
|
||||||
@@ -103,8 +92,8 @@ namespace OpenRA.Network
|
|||||||
var player = world.FindPlayerByClient(client);
|
var player = world.FindPlayerByClient(client);
|
||||||
var localClientIsObserver = orderManager.LocalClient.IsObserver || (world.LocalPlayer != null && world.LocalPlayer.WinState != WinState.Undefined);
|
var localClientIsObserver = orderManager.LocalClient.IsObserver || (world.LocalPlayer != null && world.LocalPlayer.WinState != WinState.Undefined);
|
||||||
|
|
||||||
// ExtraData gives us the team number, 0 means Spectators
|
// ExtraData gives us the team number, uint.MaxValue means Spectators
|
||||||
if (order.ExtraData == 0 && (localClientIsObserver || world.IsReplay))
|
if (order.ExtraData == uint.MaxValue && (localClientIsObserver || world.IsReplay))
|
||||||
{
|
{
|
||||||
// Validate before adding the line
|
// Validate before adding the line
|
||||||
if (client.IsObserver || (player != null && player.WinState != WinState.Undefined))
|
if (client.IsObserver || (player != null && player.WinState != WinState.Undefined))
|
||||||
|
|||||||
@@ -631,7 +631,6 @@ namespace OpenRA.Server
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "Chat":
|
case "Chat":
|
||||||
case "TeamChat":
|
|
||||||
case "PauseGame":
|
case "PauseGame":
|
||||||
DispatchOrdersToClients(conn, 0, so.Serialize());
|
DispatchOrdersToClients(conn, 0, so.Serialize());
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -96,7 +96,6 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
switch (order.OrderString)
|
switch (order.OrderString)
|
||||||
{
|
{
|
||||||
case "Chat":
|
case "Chat":
|
||||||
case "TeamChat":
|
|
||||||
case "HandshakeResponse":
|
case "HandshakeResponse":
|
||||||
case "PauseGame":
|
case "PauseGame":
|
||||||
case "StartGame":
|
case "StartGame":
|
||||||
|
|||||||
@@ -136,8 +136,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
if (!isObserver && orderManager.LocalClient == null && world.LocalPlayer == null)
|
if (!isObserver && orderManager.LocalClient == null && world.LocalPlayer == null)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var teamNumber = (isObserver || world.LocalPlayer.WinState != WinState.Undefined) ? 0 : orderManager.LocalClient.Team;
|
var teamNumber = (uint)0;
|
||||||
orderManager.IssueOrder(Order.Chat(team, chatText.Text.Trim(), teamNumber));
|
if (team)
|
||||||
|
teamNumber = (isObserver || world.LocalPlayer.WinState != WinState.Undefined) ? uint.MaxValue : (uint)orderManager.LocalClient.Team;
|
||||||
|
|
||||||
|
orderManager.IssueOrder(Order.Chat(chatText.Text.Trim(), teamNumber));
|
||||||
}
|
}
|
||||||
else if (chatTraits != null)
|
else if (chatTraits != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -402,11 +402,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
// Always scroll to bottom when we've typed something
|
// Always scroll to bottom when we've typed something
|
||||||
lobbyChatPanel.ScrollToBottom();
|
lobbyChatPanel.ScrollToBottom();
|
||||||
|
|
||||||
var teamNumber = 0;
|
var teamNumber = (uint)0;
|
||||||
if (teamChat && orderManager.LocalClient != null && !orderManager.LocalClient.IsObserver)
|
if (teamChat && orderManager.LocalClient != null)
|
||||||
teamNumber = orderManager.LocalClient.Team;
|
teamNumber = orderManager.LocalClient.IsObserver ? uint.MaxValue : (uint)orderManager.LocalClient.Team;
|
||||||
|
|
||||||
orderManager.IssueOrder(Order.Chat(teamChat, chatTextField.Text, teamNumber));
|
orderManager.IssueOrder(Order.Chat(chatTextField.Text, teamNumber));
|
||||||
chatTextField.Text = "";
|
chatTextField.Text = "";
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user