diff options
author | smatz <smatz@openttd.org> | 2008-05-23 00:28:13 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2008-05-23 00:28:13 +0000 |
commit | 2d14e889b2ae8f656f73ed342e626109e2a096e2 (patch) | |
tree | 03700dbafbb61e9d203f1686f516bf8123e63303 /src/ai/default/default.cpp | |
parent | a1bf80933d0fe2d6f188bb6e31234fae558fb2cf (diff) | |
download | openttd-2d14e889b2ae8f656f73ed342e626109e2a096e2.tar.xz |
(svn r13217) -Fix: old AI was building small airports in years when they were not available in original game, causing small planes and helis everywhere
Diffstat (limited to 'src/ai/default/default.cpp')
-rw-r--r-- | src/ai/default/default.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/ai/default/default.cpp b/src/ai/default/default.cpp index 5af37de10..2af2da82a 100644 --- a/src/ai/default/default.cpp +++ b/src/ai/default/default.cpp @@ -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)) |