diff -r 32ce5530b9e3 -r 67a558a1aeb8 src/ai/api/ai_vehicle.cpp --- a/src/ai/api/ai_vehicle.cpp Sun Jul 15 00:15:23 2007 +0000 +++ b/src/ai/api/ai_vehicle.cpp Sun Jul 15 00:31:03 2007 +0000 @@ -9,6 +9,7 @@ #include "../../depot.h" #include "../../engine.h" #include "../../player.h" +#include "../../aircraft.h" /* static */ bool AIVehicle::IsValidEngine(EngineID engine_id) { @@ -26,6 +27,7 @@ EngineID best_engine = INVALID_ENGINE; EngineID engine_id; + uint best_cargo = 0; FOR_ALL_ENGINEIDS_OF_TYPE(engine_id, veh_type) { /* Is the vehicle available for this player */ @@ -38,7 +40,24 @@ case VEH_AIRCRAFT: if (cargo != CT_PASSENGERS && !CanRefitTo(engine_id, cargo)) continue; break; default: NOT_REACHED(); } - best_engine = engine_id; + switch (veh_type) { + case VEH_ROAD: + case VEH_TRAIN: + case VEH_SHIP: + best_engine = engine_id; + break; + case VEH_AIRCRAFT: + if (cargo != CT_MAIL && best_cargo < AircraftVehInfo(engine_id)->passenger_capacity) { + best_engine = engine_id; + best_cargo = AircraftVehInfo(engine_id)->passenger_capacity; + } + if (cargo == CT_MAIL && best_cargo < AircraftVehInfo(engine_id)->mail_capacity) { + best_engine = engine_id; + best_cargo = AircraftVehInfo(engine_id)->mail_capacity; + } + break; + default: NOT_REACHED(); + } } }