(svn r12482) -Fix: [build train] we don't need to have a depot in order to just check the price of a rail vehicle so don't check for compatible rails on the tile either
authorbjarni
Fri, 28 Mar 2008 22:59:43 +0000
changeset 9277 c57fc7171a46
parent 9276 26340fca374c
child 9278 9d3a631e14c1
(svn r12482) -Fix: [build train] we don't need to have a depot in order to just check the price of a rail vehicle so don't check for compatible rails on the tile either
also wagons will only need tracks they can drive on in order to be build so there is no reason to check for power in the depot
src/train_cmd.cpp
--- a/src/train_cmd.cpp	Fri Mar 28 21:28:32 2008 +0000
+++ b/src/train_cmd.cpp	Fri Mar 28 22:59:43 2008 +0000
@@ -548,6 +548,9 @@
 	uint num_vehicles = 1 + CountArticulatedParts(engine, false);
 
 	if (!(flags & DC_QUERY_COST)) {
+		/* Check that the wagon can drive on the track in question */
+		if (!IsCompatibleRail(rvi->railtype, GetRailType(tile))) return CMD_ERROR;
+
 		/* Allow for the wagon and the articulated parts, plus one to "terminate" the list. */
 		Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1));
 		memset(vl, 0, sizeof(*vl) * (num_vehicles + 1));
@@ -702,10 +705,6 @@
 
 	const RailVehicleInfo *rvi = RailVehInfo(p1);
 
-	/* Check if depot and new engine uses the same kind of tracks */
-	/* We need to see if the engine got power on the tile to avoid eletric engines in non-electric depots */
-	if (!HasPowerOnRail(rvi->railtype, GetRailType(tile))) return CMD_ERROR;
-
 	if (rvi->railveh_type == RAILVEH_WAGON) return CmdBuildRailWagon(p1, tile, flags);
 
 	CommandCost value = EstimateTrainCost(p1, rvi);
@@ -715,6 +714,10 @@
 		CountArticulatedParts(p1, false);
 
 	if (!(flags & DC_QUERY_COST)) {
+		/* Check if depot and new engine uses the same kind of tracks *
+		 * We need to see if the engine got power on the tile to avoid eletric engines in non-electric depots */
+		if (!HasPowerOnRail(rvi->railtype, GetRailType(tile))) return CMD_ERROR;
+
 		/* Allow for the dual-heads and the articulated parts, plus one to "terminate" the list. */
 		Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1));
 		memset(vl, 0, sizeof(*vl) * (num_vehicles + 1));