diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 63a74b7f9c..98d931e153 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -70,6 +70,8 @@ DECLARE_ENUM_AS_BIT_SET(CmdInsertOrderIntlFlags) static CommandCost CmdInsertOrderIntl(DoCommandFlag flags, Vehicle *v, VehicleOrderID sel_ord, const Order &new_order, CmdInsertOrderIntlFlags insert_flags); +extern void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32_t wait_time, bool wait_timetabled, bool wait_fixed); + void IntialiseOrderDestinationRefcountMap() { ClearOrderDestinationRefcountMap(); @@ -1067,7 +1069,7 @@ CommandCost CmdDuplicateOrder(TileIndex tile, DoCommandFlag flags, uint32_t p1, Order new_order; new_order.AssignOrder(*src_order); const bool wait_fixed = new_order.IsWaitFixed(); - const bool wait_timetabled = wait_fixed && new_order.IsWaitTimetabled(); + const bool wait_timetabled = new_order.IsWaitTimetabled(); new_order.SetWaitTimetabled(false); new_order.SetTravelTimetabled(false); new_order.SetTravelTime(0); @@ -1079,10 +1081,7 @@ CommandCost CmdDuplicateOrder(TileIndex tile, DoCommandFlag flags, uint32_t p1, Order *order = v->orders->GetOrderAt(sel_ord + 1); order->SetRefit(new_order.GetRefitCargo()); order->SetMaxSpeed(new_order.GetMaxSpeed()); - if (wait_fixed) { - extern void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32_t wait_time, bool wait_timetabled); - SetOrderFixedWaitTime(v, sel_ord + 1, new_order.GetWaitTime(), wait_timetabled); - } + SetOrderFixedWaitTime(v, sel_ord + 1, new_order.GetWaitTime(), wait_timetabled, wait_fixed); } new_order.Free(); return CommandCost(); @@ -1837,7 +1836,7 @@ CommandCost CmdReverseOrderList(TileIndex tile, DoCommandFlag flags, uint32_t p1 Order new_order; new_order.AssignOrder(*v->GetOrder(i)); const bool wait_fixed = new_order.IsWaitFixed(); - const bool wait_timetabled = wait_fixed && new_order.IsWaitTimetabled(); + const bool wait_timetabled = new_order.IsWaitTimetabled(); new_order.SetWaitTimetabled(false); new_order.SetTravelTimetabled(false); new_order.SetTravelTime(0); @@ -1848,10 +1847,7 @@ CommandCost CmdReverseOrderList(TileIndex tile, DoCommandFlag flags, uint32_t p1 Order *order = v->orders->GetOrderAt(order_count); order->SetRefit(new_order.GetRefitCargo()); order->SetMaxSpeed(new_order.GetMaxSpeed()); - if (wait_fixed) { - extern void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32_t wait_time, bool wait_timetabled); - SetOrderFixedWaitTime(v, order_count, new_order.GetWaitTime(), wait_timetabled); - } + SetOrderFixedWaitTime(v, order_count, new_order.GetWaitTime(), wait_timetabled, wait_fixed); } new_order.Free(); } @@ -3892,19 +3888,16 @@ CommandCost CmdMassChangeOrder(TileIndex tile, DoCommandFlag flags, uint32_t p1, 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(); + const bool wait_timetabled = new_order.IsWaitTimetabled(); new_order.SetWaitTimetabled(false); - new_order.SetTravelTimetabled(false); + if (!new_order.IsTravelFixed()) new_order.SetTravelTimetabled(false); if (CmdInsertOrderIntl(flags, v, index + 1, new_order, CIOIF_ALLOW_LOAD_BY_CARGO_TYPE | CIOIF_ALLOW_DUPLICATE_UNBUNCH).Succeeded()) { DoCommand(0, v->index, index, flags, CMD_DELETE_ORDER); order = v->orders->GetOrderAt(index); order->SetRefit(new_order.GetRefitCargo()); order->SetMaxSpeed(new_order.GetMaxSpeed()); - if (wait_fixed) { - extern void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32_t wait_time, bool wait_timetabled); - SetOrderFixedWaitTime(v, index, new_order.GetWaitTime(), wait_timetabled); - } + SetOrderFixedWaitTime(v, index, new_order.GetWaitTime(), wait_timetabled, wait_fixed); changed = true; } diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 1418da4bf3..004b068ab9 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -1094,7 +1094,7 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling) SetTimetableWindowsDirty(v); } -void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32_t wait_time, bool wait_timetabled) { +void SetOrderFixedWaitTime(Vehicle *v, VehicleOrderID order_number, uint32_t wait_time, bool wait_timetabled, bool wait_fixed) { ChangeTimetable(v, order_number, wait_time, MTF_WAIT_TIME, wait_timetabled, true); - ChangeTimetable(v, order_number, 1, MTF_SET_WAIT_FIXED, false, true); + ChangeTimetable(v, order_number, wait_fixed ? 1 : 0, MTF_SET_WAIT_FIXED, false, true); }