mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r12988) -Fix [FS#1992](r12913): [autoreplace] failing to replace a road vehicle could free it's slot without the vehicle knowing it (leading to assert)
This commit is contained in:
parent
3d5567ccf7
commit
0cfd2baa3c
|
@ -2746,6 +2746,10 @@ Vehicle* BackuppedVehicle::RestoreBackupVehicle(Vehicle *v, Player *p)
|
|||
|
||||
assert(v->owner == p->index);
|
||||
|
||||
/* Cache the result of the vehicle type check since it will not change
|
||||
* and we need this check once for every run though the loop. */
|
||||
bool is_road_veh = v->type == VEH_ROAD;
|
||||
|
||||
while (true) {
|
||||
Vehicle *dest = GetVehicle(backup->index);
|
||||
/* The vehicle should be free since we are restoring something we just sold. */
|
||||
|
@ -2761,6 +2765,12 @@ Vehicle* BackuppedVehicle::RestoreBackupVehicle(Vehicle *v, Player *p)
|
|||
dest->left_coord = INVALID_COORD;
|
||||
UpdateVehiclePosHash(dest, INVALID_COORD, 0);
|
||||
|
||||
if (is_road_veh) {
|
||||
/* Removed the slot in the road vehicles as the slot is gone.
|
||||
* We don't want a pointer to a slot that's gone. */
|
||||
dest->u.road.slot = NULL;
|
||||
}
|
||||
|
||||
if (!dest->cargo.Empty()) {
|
||||
/* The vehicle in question contains some cargo.
|
||||
* However we lost the list so we will have to recreate it.
|
||||
|
|
Loading…
Reference in New Issue