summaryrefslogtreecommitdiff
path: root/src/station_cmd.cpp
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-08-08 13:29:18 +0000
committersmatz <smatz@openttd.org>2008-08-08 13:29:18 +0000
commit5229e45363cdbb2dbf8ae303475714e48fe4c4a6 (patch)
tree9b08fdf1809217b1d55fa4dc95bc38067a624c24 /src/station_cmd.cpp
parentde629dd62fd172bdb64023c53f6c32936f5c3f93 (diff)
downloadopenttd-5229e45363cdbb2dbf8ae303475714e48fe4c4a6.tar.xz
(svn r14021) -Fix (r13957) [YAPP]: Overbuilding station tiles with non-track tiles could produce stale reservations. (michi_cc)
Diffstat (limited to 'src/station_cmd.cpp')
-rw-r--r--src/station_cmd.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index baa3392c3..68eec417f 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -1031,6 +1031,9 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
if (v != NULL) {
FreeTrainTrackReservation(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);
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);