Changeset - r5746:434d92110285
[Not reviewed]
master
0 2 0
bjarni - 17 years ago 2007-01-21 00:13:39
bjarni@openttd.org
(svn r8294) -Fix: deleting a vehicle with shared orders, but no orders would fail to reset prev_shared and next_shared
-As a result, vehicles in the game could end up having prev/next pointers to vehicles, that was no longer in the game
2 files changed with 13 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/vehicle.cpp
Show inline comments
 
@@ -572,7 +572,7 @@ void DestroyVehicle(Vehicle *v)
 

	
 
	UpdateVehiclePosHash(v, INVALID_COORD, 0);
 
	v->next_hash = NULL;
 
	if (v->orders != NULL) DeleteVehicleOrders(v);
 
	if (IsPlayerBuildableVehicleType(v)) DeleteVehicleOrders(v);
 

	
 
	/* Now remove any artic part. This will trigger an other
 
	 *  destroy vehicle, which on his turn can remove any
src/vehicle.h
Show inline comments
 
@@ -407,6 +407,18 @@ static inline void DeleteVehicle(Vehicle
 
	v->type = 0;
 
}
 

	
 
static inline bool IsPlayerBuildableVehicleType(const Vehicle *v)
 
{
 
	switch (v->type) {
 
		case VEH_Train:
 
		case VEH_Road:
 
		case VEH_Ship:
 
		case VEH_Aircraft:
 
			return true;
 
	}
 
	return false;
 
}
 

	
 
#define FOR_ALL_VEHICLES_FROM(v, start) for (v = GetVehicle(start); v != NULL; v = (v->index + 1U < GetVehiclePoolSize()) ? GetVehicle(v->index + 1) : NULL) if (IsValidVehicle(v))
 
#define FOR_ALL_VEHICLES(v) FOR_ALL_VEHICLES_FROM(v, 0)
 

	
0 comments (0 inline, 0 general)