Changeset - r13005:5a544214fd6c
[Not reviewed]
master
0 1 0
rubidium - 15 years ago 2009-09-12 14:37:29
rubidium@openttd.org
(svn r17509) -Fix [FS#3196]: if building a part fails during cloning, sell what was already cloned instead of leaving it 'for free'
-Fix: make cloning multiheaded trains possible with with 'max - 1' vehicles existing
1 file changed with 15 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/vehicle_cmd.cpp
Show inline comments
 
@@ -359,10 +359,23 @@ CommandCost CmdCloneVehicle(TileIndex ti
 
			continue;
 
		}
 

	
 
		CommandCost cost = DoCommand(tile, v->engine_type, build_argument, flags, GetCmdBuildVeh(v));
 
		/* In case we're building a multi headed vehicle and the maximum number of
 
		 * vehicles is almost reached (e.g. max trains - 1) not all vehicles would
 
		 * be cloned. When the non-primary engines were build they were seen as
 
		 * 'new' vehicles whereas they would immediately be joined with a primary
 
		 * engine. This caused the vehicle to be not build as 'the limit' had been
 
		 * reached, resulting in partially build vehicles and such. */
 
		DoCommandFlag build_flags = flags;
 
		if ((flags & DC_EXEC) && !v->IsPrimaryVehicle()) build_flags |= DC_AUTOREPLACE;
 

	
 
		CommandCost cost = DoCommand(tile, v->engine_type, build_argument, build_flags, GetCmdBuildVeh(v));
 
		build_argument = 3; // ensure that we only assign a number to the first engine
 

	
 
		if (CmdFailed(cost)) return cost;
 
		if (CmdFailed(cost)) {
 
			/* Can't build a part, then sell the stuff we already made; clear up the mess */
 
			if (w_front != NULL) DoCommand(w_front->tile, w_front->index, 1, flags, GetCmdSellVeh(w_front));
 
			return cost;
 
		}
 

	
 
		total_cost.AddCost(cost);
 

	
0 comments (0 inline, 0 general)