From 23168f630952490f6a548f1889e1a3b035b29f1d Mon Sep 17 00:00:00 2001 From: tron Date: Sun, 3 Sep 2006 10:30:38 +0000 Subject: [PATCH] (svn r6355) -Fix: Go to hangar orders for aircraft could get spuriously removed when a road or rail depot got deleted (Darkvater and me) This bug is probably ages old --- order_cmd.c | 10 ++++++++-- station_cmd.c | 18 ------------------ 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/order_cmd.c b/order_cmd.c index ee4981965a..322448c5c2 100644 --- a/order_cmd.c +++ b/order_cmd.c @@ -968,6 +968,10 @@ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination) Order *order; bool need_invalidate; + /* Aircraft have StationIDs for depot orders and never use DepotIDs + * This fact is handled specially below + */ + /* Go through all vehicles */ FOR_ALL_VEHICLES(v) { if (v->orders == NULL) continue; @@ -977,7 +981,8 @@ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination) v->last_station_visited = INVALID_STATION; /* Check the current order */ - if (v->current_order.type == type && v->current_order.dest == destination) { + if ((v->type == VEH_Aircraft && v->current_order.type == OT_GOTO_DEPOT ? OT_GOTO_STATION : v->current_order.type) == type && + v->current_order.dest == destination) { /* Mark the order as DUMMY */ v->current_order.type = OT_DUMMY; v->current_order.flags = 0; @@ -987,7 +992,8 @@ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination) /* Clear the order from the order-list */ need_invalidate = false; FOR_VEHICLE_ORDERS(v, order) { - if (order->type == type && order->dest == destination) { + if ((v->type == VEH_Aircraft && order->type == OT_GOTO_DEPOT ? OT_GOTO_STATION : order->type) == type && + order->dest == destination) { /* Mark the order as DUMMY */ order->type = OT_DUMMY; order->flags = 0; diff --git a/station_cmd.c b/station_cmd.c index 1b71bdd85b..0acc48864b 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -2376,7 +2376,6 @@ void DestroyRoadStop(RoadStop* rs) void DestroyStation(Station *st) { StationID index; - Vehicle *v; index = st->index; @@ -2390,23 +2389,6 @@ void DestroyStation(Station *st) /* Now delete all orders that go to the station */ RemoveOrderFromAllVehicles(OT_GOTO_STATION, index); - //And do the same with aircraft that have the station as a hangar-stop - FOR_ALL_VEHICLES(v) { - bool invalidate = false; - if (v->type == VEH_Aircraft) { - Order *order; - FOR_VEHICLE_ORDERS(v, order) { - if (order->type == OT_GOTO_DEPOT && order->dest == index) { - order->type = OT_DUMMY; - order->flags = 0; - invalidate = true; - } - } - } - //Orders for the vehicle have been changed, invalidate the window - if (invalidate) InvalidateWindow(WC_VEHICLE_ORDERS, v->index); - } - //Subsidies need removal as well DeleteSubsidyWithStation(index);