(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
pull/155/head
tron 18 years ago
parent d5e5a78cf4
commit 951ddbf3eb

@ -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;

@ -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);

Loading…
Cancel
Save