From f9a8c3da46d448f50f64a4bc2deb90b236fb8ac3 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 15 Sep 2019 11:37:10 +0100 Subject: [PATCH] Fix locked wait times not being preserved when moving orders to new station --- src/order_cmd.cpp | 6 ++++++ src/timetable_cmd.cpp | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index a8a8be554f..1c3fda0129 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -2867,6 +2867,8 @@ CommandCost CmdMassChangeOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, u Order new_order; new_order.AssignOrder(*order); new_order.SetDestination(to_dest); + const bool wait_fixed = new_order.IsWaitFixed(); + const bool wait_timetabled = wait_fixed && new_order.IsWaitTimetabled(); new_order.SetWaitTimetabled(false); new_order.SetTravelTimetabled(false); if (DoCommand(0, v->index | ((index + 1) << 20), new_order.Pack(), flags, CMD_INSERT_ORDER).Succeeded()) { @@ -2875,6 +2877,10 @@ CommandCost CmdMassChangeOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, u order = v->orders.list->GetOrderAt(index); order->SetRefit(new_order.GetRefitCargo()); order->SetMaxSpeed(new_order.GetMaxSpeed()); + if (wait_fixed) { + extern void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32 wait_time, bool wait_timetabled); + SetOrderFixedWaitTime(v, index, new_order.GetWaitTime(), wait_timetabled); + } changed = true; } diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 00c89cc025..91da70aaff 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -997,3 +997,8 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling) SetWindowDirty(WC_VEHICLE_TIMETABLE, v->index); } } + +void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32 wait_time, bool wait_timetabled) { + ChangeTimetable(v, order_number, wait_time, MTF_WAIT_TIME, wait_timetabled, true); + ChangeTimetable(v, order_number, 1, MTF_SET_WAIT_FIXED, false, true); +}