(svn r14021) -Fix (r13957) [YAPP]: Overbuilding station tiles with non-track tiles could produce stale reservations. (michi_cc)
This commit is contained in:
		@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -1949,6 +1949,7 @@ static void ReverseTrainDirection(Vehicle *v)
 | 
			
		||||
			HasSignalOnTrackdir(v->tile, GetVehicleTrackdir(v)) &&
 | 
			
		||||
			!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)) {
 | 
			
		||||
			/* Do a look-ahead now in case our current tile was already a safe tile. */
 | 
			
		||||
			CheckNextTrainTile(v);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user