diff --git a/OpenRa.Game/Network/OrderManager.cs b/OpenRa.Game/Network/OrderManager.cs index ce64aa8c1d..ecc2cfbc23 100755 --- a/OpenRa.Game/Network/OrderManager.cs +++ b/OpenRa.Game/Network/OrderManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using IjwFramework.Types; namespace OpenRa.Network { @@ -60,7 +61,7 @@ namespace OpenRa.Network Connection.Send( immediateOrders.Serialize( 0 ) ); localOrders.RemoveAll( o => o.IsImmediate ); - var immediatePackets = new List(); + var immediatePackets = new List>(); Connection.Receive( ( clientId, packet ) => @@ -71,14 +72,14 @@ namespace OpenRa.Network else if( packet.Length >= 5 && packet[ 4 ] == 0x65 ) CheckSync( packet ); else if( frame == 0 ) - immediatePackets.Add( packet ); + immediatePackets.Add( Pair.New( clientId, packet ) ); else frameClientData.GetOrAdd( frame ).Add( clientId, packet ); } ); foreach( var p in immediatePackets ) - foreach( var o in p.ToOrderList( world ) ) - UnitOrders.ProcessOrder( o ); + foreach( var o in p.Second.ToOrderList( world ) ) + UnitOrders.ProcessOrder( p.First, o ); } Dictionary syncForFrame = new Dictionary(); @@ -123,9 +124,9 @@ namespace OpenRa.Network var sync = new List(); sync.Add( world.SyncHash() ); - foreach( var order in frameData.OrderBy( p => p.Key ).SelectMany( o => o.Value.ToOrderList( world ) ) ) + foreach( var order in frameData.OrderBy( p => p.Key ).SelectMany( o => o.Value.ToOrderList( world ).Select( a => new { Client = o.Key, Order = a } ) ) ) { - UnitOrders.ProcessOrder( order ); + UnitOrders.ProcessOrder( order.Client, order.Order ); sync.Add( world.SyncHash() ); } diff --git a/OpenRa.Game/Network/UnitOrders.cs b/OpenRa.Game/Network/UnitOrders.cs index 04ec32dc96..c43d62356b 100755 --- a/OpenRa.Game/Network/UnitOrders.cs +++ b/OpenRa.Game/Network/UnitOrders.cs @@ -8,13 +8,14 @@ namespace OpenRa.Network { static class UnitOrders { - public static void ProcessOrder( Order order ) + public static void ProcessOrder( int clientId, Order order ) { switch( order.OrderString ) { case "Chat": { - Game.chat.AddLine(order.Player, order.TargetString); + if( clientId != Game.orderManager.Connection.LocalClientId ) + Game.chat.AddLine(order.Player, order.TargetString); break; } case "AssignPlayer":