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