mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r14021) -Fix (r13957) [YAPP]: Overbuilding station tiles with non-track tiles could produce stale reservations. (michi_cc)
This commit is contained in:
parent
de629dd62f
commit
5229e45363
@ -1031,6 +1031,9 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
|
|||||||
if (v != NULL) {
|
if (v != NULL) {
|
||||||
FreeTrainTrackReservation(v);
|
FreeTrainTrackReservation(v);
|
||||||
*affected_vehicles.Append() = v;
|
*affected_vehicles.Append() = v;
|
||||||
|
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), false);
|
||||||
|
for (; v->Next() != NULL; v = v->Next()) ;
|
||||||
|
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(GetVehicleTrackdir(v))), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1059,7 +1062,11 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
|
|||||||
} while (--numtracks);
|
} while (--numtracks);
|
||||||
|
|
||||||
for (uint i = 0; i < affected_vehicles.Length(); ++i) {
|
for (uint i = 0; i < affected_vehicles.Length(); ++i) {
|
||||||
TryPathReserve(affected_vehicles[i], true);
|
Vehicle *v = affected_vehicles[i];
|
||||||
|
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), true);
|
||||||
|
TryPathReserve(v, true);
|
||||||
|
for (; v->Next() != NULL; v = v->Next()) ;
|
||||||
|
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(GetVehicleTrackdir(v))), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
st->MarkTilesDirty(false);
|
st->MarkTilesDirty(false);
|
||||||
|
@ -1949,6 +1949,7 @@ static void ReverseTrainDirection(Vehicle *v)
|
|||||||
HasSignalOnTrackdir(v->tile, GetVehicleTrackdir(v)) &&
|
HasSignalOnTrackdir(v->tile, GetVehicleTrackdir(v)) &&
|
||||||
!IsPbsSignal(GetSignalType(v->tile, FindFirstTrack(v->u.rail.track))));
|
!IsPbsSignal(GetSignalType(v->tile, FindFirstTrack(v->u.rail.track))));
|
||||||
|
|
||||||
|
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), true);
|
||||||
if (TryPathReserve(v, true, first_tile_okay)) {
|
if (TryPathReserve(v, true, first_tile_okay)) {
|
||||||
/* Do a look-ahead now in case our current tile was already a safe tile. */
|
/* Do a look-ahead now in case our current tile was already a safe tile. */
|
||||||
CheckNextTrainTile(v);
|
CheckNextTrainTile(v);
|
||||||
|
Loading…
Reference in New Issue
Block a user