Changeset - r4528:f8bacc36dd6b
[Not reviewed]
master
0 2 0
tron - 18 years ago 2006-09-03 10:30:38
tron@openttd.org
(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
2 files changed with 8 insertions and 20 deletions:
0 comments (0 inline, 0 general)
order_cmd.c
Show inline comments
 
@@ -968,6 +968,10 @@ void RemoveOrderFromAllVehicles(OrderTyp
 
	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(OrderTyp
 
			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(OrderTyp
 
		/* 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;
station_cmd.c
Show inline comments
 
@@ -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);
 

	
0 comments (0 inline, 0 general)