mirror of https://github.com/OpenTTD/OpenTTD.git
(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
This commit is contained in:
parent
c8c27b9740
commit
7871ce1879
|
@ -572,7 +572,7 @@ void DestroyVehicle(Vehicle *v)
|
||||||
|
|
||||||
UpdateVehiclePosHash(v, INVALID_COORD, 0);
|
UpdateVehiclePosHash(v, INVALID_COORD, 0);
|
||||||
v->next_hash = NULL;
|
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
|
/* Now remove any artic part. This will trigger an other
|
||||||
* destroy vehicle, which on his turn can remove any
|
* destroy vehicle, which on his turn can remove any
|
||||||
|
|
|
@ -407,6 +407,18 @@ static inline void DeleteVehicle(Vehicle *v)
|
||||||
v->type = 0;
|
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_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)
|
#define FOR_ALL_VEHICLES(v) FOR_ALL_VEHICLES_FROM(v, 0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue