@ -3438,12 +3438,28 @@ static bool AiCheckAirportResources(TileIndex tile, const AiDefaultBlockData *p,
static int AiFindBestDefaultAirportBlock ( TileIndex tile , byte cargo , byte heli , CommandCost * cost )
{
const AiDefaultBlockData * p ;
uint i ;
for ( i = 0 ; ( p = _airport_default_block_data [ i ] ) ! = NULL ; i + + ) {
// If we are doing a helicopter service, avoid building
// airports where they can't land.
if ( heli & & ! ( GetAirport ( p - > attr ) - > flags & AirportFTAClass : : HELICOPTERS ) ) continue ;
bool no_small = false ;
if ( ! heli ) {
/* do not build small airport if we have large available and we are not building heli route */
uint valid = GetValidAirports ( ) ;
for ( uint i = 0 ; ( p = _airport_default_block_data [ i ] ) ! = NULL ; i + + ) {
if ( HasBit ( valid , p - > attr ) & & ! ( GetAirport ( p - > attr ) - > flags & AirportFTAClass : : SHORT_STRIP ) ) {
no_small = true ;
break ;
}
}
}
for ( uint i = 0 ; ( p = _airport_default_block_data [ i ] ) ! = NULL ; i + + ) {
uint flags = GetAirport ( p - > attr ) - > flags ;
/* If we are doing a helicopter service, avoid building airports where they can't land */
if ( heli & & ! ( flags & AirportFTAClass : : HELICOPTERS ) ) continue ;
/* Similiar with aircraft ... */
if ( ! heli & & ! ( flags & AirportFTAClass : : AIRPLANES ) ) continue ;
/* Do not build small airport if we prefer large */
if ( no_small & & ( flags & AirportFTAClass : : SHORT_STRIP ) ) continue ;
* cost = AiDoBuildDefaultAirportBlock ( tile , p , 0 ) ;
if ( CmdSucceeded ( * cost ) & & AiCheckAirportResources ( tile , p , cargo ) )