Mercurial > hg > openttd
changeset 4528:d6358ea16283 draft
(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
author | tron <tron@openttd.org> |
---|---|
date | Sun, 03 Sep 2006 10:30:38 +0000 |
parents | b67e06dd63e8 |
children | 556b84adf290 |
files | order_cmd.c station_cmd.c |
diffstat | 2 files changed, 8 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/order_cmd.c +++ b/order_cmd.c @@ -968,6 +968,10 @@ 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 @@ 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 @@ /* 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;
--- a/station_cmd.c +++ b/station_cmd.c @@ -2376,7 +2376,6 @@ void DestroyStation(Station *st) { StationID index; - Vehicle *v; index = st->index; @@ -2390,23 +2389,6 @@ /* 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);