mirror of https://github.com/OpenTTD/OpenTTD
(svn r13976) -Fix (r13953) [YAPP]: A crashing train could sometimes free the reservation of another train. (assisted by michi_cc)
parent
a5453e43b1
commit
b92c4cfc92
|
@ -3437,11 +3437,6 @@ static void SetVehicleCrashed(Vehicle *v)
|
||||||
for (const Vehicle *u = v; u != NULL; u = u->Next()) {
|
for (const Vehicle *u = v; u != NULL; u = u->Next()) {
|
||||||
ClearPathReservation(u->tile, GetVehicleTrackdir(u));
|
ClearPathReservation(u->tile, GetVehicleTrackdir(u));
|
||||||
}
|
}
|
||||||
/* Try to reserve all tiles directly under the train, but not the whole
|
|
||||||
* railway station platform or both tunnel/bridge ends. */
|
|
||||||
for (const Vehicle *u = v; u != NULL; u = u->Next()) {
|
|
||||||
TryReserveRailTrack(u->tile, TrackdirToTrack(GetVehicleTrackdir(u)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we may need to update crossing we were approaching */
|
/* we may need to update crossing we were approaching */
|
||||||
|
@ -3511,6 +3506,15 @@ static Vehicle *FindTrainCollideEnum(Vehicle *v, void *data)
|
||||||
tcc->num += 2 + CountPassengersInTrain(coll);
|
tcc->num += 2 + CountPassengersInTrain(coll);
|
||||||
SetVehicleCrashed(coll);
|
SetVehicleCrashed(coll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Try to reserve all tiles directly under the crashed trains.
|
||||||
|
* As there might be more than two trains involved, we have to do that for all vehicles */
|
||||||
|
const Vehicle *u;
|
||||||
|
FOR_ALL_VEHICLES(u) {
|
||||||
|
if (u->type == VEH_TRAIN && HASBITS(u->vehstatus, VS_CRASHED)) {
|
||||||
|
TryReserveRailTrack(u->tile, TrackBitsToTrack(u->u.rail.track));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue