(svn r1727) - Fix: now CmdBuildRailVehicle() behaves correctly if DC_EXEC is set
authorbjarni
Sun, 30 Jan 2005 13:03:32 +0000
changeset 1223 228277b970ca
parent 1222 6d21e92b33c3
child 1224 8046852a843f
(svn r1727) - Fix: now CmdBuildRailVehicle() behaves correctly if DC_EXEC is set
this commit alters ai.c a little to get rid of the workaround from r1725 so AI players could still build locomotives
ai.c
train_cmd.c
--- a/ai.c	Sun Jan 30 08:25:39 2005 +0000
+++ b/ai.c	Sun Jan 30 13:03:32 2005 +0000
@@ -116,7 +116,7 @@
 	p->ai.state_counter = 0;
 }
 
-static int AiChooseTrainToBuild(byte railtype, int32 money, byte flag)
+static int AiChooseTrainToBuild(byte railtype, int32 money, byte flag, TileIndex tile)
 {
 	int best_veh_index = -1;
 	byte best_veh_score = 0;
@@ -131,7 +131,7 @@
 		    || !HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D)
 			continue;
 
-		r = DoCommandByTile(0, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
+		r = DoCommandByTile(tile, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
 		if (r != CMD_ERROR &&
 					(!(_cmd_build_rail_veh_var1&1) || !(flag&1)) &&
 					r <= money &&
@@ -238,7 +238,7 @@
 	}
 
 	// XXX: check if a wagon
-	return AiChooseTrainToBuild(v->u.rail.railtype, avail_money, 0);
+	return AiChooseTrainToBuild(v->u.rail.railtype, avail_money, 0, v->tile);
 }
 
 static int AiChooseShipToReplaceWith(Player *p, Vehicle *v)
@@ -2393,7 +2393,7 @@
 	}
 
 	// Which locomotive to build?
-	veh = AiChooseTrainToBuild(p->ai.railtype_to_use, p->player_money, (cargo!=CT_PASSENGERS)?1:0);
+	veh = AiChooseTrainToBuild(p->ai.railtype_to_use, p->player_money, (cargo!=CT_PASSENGERS)?1:0, tile);
 	if (veh == -1) {
 handle_nocash:
 		// after a while, if AI still doesn't have cash, get out of this block by selling the wagons.
--- a/train_cmd.c	Sun Jan 30 08:25:39 2005 +0000
+++ b/train_cmd.c	Sun Jan 30 13:03:32 2005 +0000
@@ -528,11 +528,9 @@
 
 	if (!IsEngineBuildable(p1, VEH_Train)) return CMD_ERROR;
 
-	/* NOTE: The AI sends build engine commands without DC_EXEC to figure out if
-	it can affort an engine before trying to buy it*/
-	if (!IsTrainDepotTile((TileIndex)tile) && flags & DC_EXEC) return CMD_ERROR;
-
-	if (_map_owner[tile] != _current_player && flags & DC_EXEC) return CMD_ERROR;
+	if (!IsTrainDepotTile((TileIndex)tile)) return CMD_ERROR;
+
+	if (_map_owner[tile] != _current_player) return CMD_ERROR;
 
 	_cmd_build_rail_veh_var1 = 0;