ai/default/default.c
changeset 5031 93e873e3ab03
parent 5029 455ac4f14c9b
child 5247 1f982de55b88
--- a/ai/default/default.c	Sun Nov 05 22:11:12 2006 +0000
+++ b/ai/default/default.c	Sun Nov 05 22:49:34 2006 +0000
@@ -177,14 +177,18 @@
 		}
 
 		/* Skip vehicles which can't take our cargo type */
-		if (rvi->cargo_type != cargo) continue;
+		if (rvi->cargo_type != cargo && !CanRefitTo(i, cargo)) continue;
 
 		/* Rate and compare the engine by speed & capacity */
 		rating = rvi->max_speed * rvi->capacity;
 		if (rating <= best_veh_rating) continue;
 
 		ret = DoCommand(tile, i, 0, 0, CMD_BUILD_ROAD_VEH);
-		if (CmdFailed(ret) || ret > money) continue;
+		if (CmdFailed(ret)) continue;
+
+		/* Add the cost of refitting */
+		if (rvi->cargo_type != cargo) ret += GetRefitCost(i);
+		if (ret > money) continue;
 
 		best_veh_rating = rating;
 		best_veh_index = i;
@@ -3184,6 +3188,15 @@
 
 	loco_id = _new_vehicle_id;
 
+	if (GetVehicle(loco_id)->cargo_type != p->ai.cargo_type) {
+		/* Cargo type doesn't match, so refit it */
+		if (CmdFailed(DoCommand(tile, loco_id, p->ai.cargo_type, DC_EXEC, CMD_REFIT_ROAD_VEH))) {
+			/* Refit failed... sell the vehicle */
+			DoCommand(tile, loco_id, 0, DC_EXEC, CMD_SELL_ROAD_VEH);
+			return;
+		}
+	}
+
 	for (i = 0; p->ai.order_list_blocks[i] != 0xFF; i++) {
 		const AiBuildRec* aib = &p->ai.src + p->ai.order_list_blocks[i];
 		bool is_pass = (