summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/order_cmd.cpp7
-rw-r--r--src/vehicle.cpp5
2 files changed, 12 insertions, 0 deletions
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index 0cbb10b78..3adaab218 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -830,6 +830,13 @@ void InsertOrder(Vehicle *v, Order *new_o, VehicleOrderID sel_ord)
u->cur_real_order_index = cur;
}
}
+ if (sel_ord == u->cur_auto_order_index && u->IsGroundVehicle()) {
+ /* We are inserting an order just before the current automatic order.
+ * We do not know whether we will reach current automatic or the newly inserted order first.
+ * So, disable creation of automatic orders until we are on track again. */
+ uint16 &gv_flags = u->GetGroundVehicleFlags();
+ SetBit(gv_flags, GVF_SUPPRESS_AUTOMATIC_ORDERS);
+ }
if (sel_ord <= u->cur_auto_order_index) {
uint cur = u->cur_auto_order_index + 1;
/* Check if we don't go out of bound */
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index 66e858107..8d3aac139 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -1870,6 +1870,11 @@ void Vehicle::BeginLoading()
auto_order->MakeAutomatic(this->last_station_visited);
InsertOrder(this, auto_order, this->cur_auto_order_index);
if (this->cur_auto_order_index > 0) --this->cur_auto_order_index;
+
+ /* InsertOrder disabled creation of automatic orders for all vehicles with the same automatic order.
+ * Reenable it for this vehicle */
+ uint16 &gv_flags = this->GetGroundVehicleFlags();
+ ClrBit(gv_flags, GVF_SUPPRESS_AUTOMATIC_ORDERS);
}
this->current_order.MakeLoading(false);
}