diff --git a/OpenRA.Server/Server.cs b/OpenRA.Server/Server.cs index 1787d7ec58..8acb2b976a 100644 --- a/OpenRA.Server/Server.cs +++ b/OpenRA.Server/Server.cs @@ -280,6 +280,22 @@ namespace OpenRA.Server DispatchOrders(null, 0, new ServerOrder(conn.PlayerIndex, "SetName", newName).Serialize()); } + + if (so.Data.StartsWith("/lag ")) + { + int lag; + if (!int.TryParse(so.Data.Substring(5), out lag)) + { + Console.WriteLine("Invalid order lag: {0}", + so.Data.Substring(5)); + return; + } + + Console.WriteLine("Order lag is now {0} frames.", lag); + + DispatchOrders(null, 0, + new ServerOrder(0, "SetLag", lag.ToString()).Serialize()); + } break; } } diff --git a/OpenRa.Game/OrderManager.cs b/OpenRa.Game/OrderManager.cs index 5cf074a8ad..7399c9f8b1 100755 --- a/OpenRa.Game/OrderManager.cs +++ b/OpenRa.Game/OrderManager.cs @@ -13,7 +13,7 @@ namespace OpenRa.Game List sources; int frameNumber = 0; - const int FramesAhead = 3; + public int FramesAhead = 3; public bool GameStarted { get { return frameNumber != 0; } } public bool IsNetplay { get { return sources.OfType().Any(); } } diff --git a/OpenRa.Game/UnitOrders.cs b/OpenRa.Game/UnitOrders.cs index cdc374b95f..94a16ae291 100755 --- a/OpenRa.Game/UnitOrders.cs +++ b/OpenRa.Game/UnitOrders.cs @@ -119,6 +119,24 @@ namespace OpenRa.Game order.Player.PlayerName = order.TargetString; break; } + + case "SetLag": + { + int lag = int.Parse(order.TargetString); + if (Game.orderManager.GameStarted) + { + Game.chat.AddLine(Pair.New("Server", + string.Format("Failed to change lag to {0} frames", + lag))); + return; + } + + Game.orderManager.FramesAhead = lag; + Game.chat.AddLine(Pair.New("Server", + string.Format("Order lag is now {0} frames.", + lag))); + break; + } case "StartGame": { Game.chat.AddLine(Pair.New("Server:", "The game has started."));