Changeset - r4831:c6aa0c225e56
[Not reviewed]
master
0 1 0
peter1138 - 18 years ago 2006-10-12 15:03:19
peter1138@openttd.org
(svn r6755) - Fix: Pass the newly created vehicle when checking for articulated engines. As this could result in more parts being added than previously counted, we check to see if we need to allocate more vehicles as we add parts.
1 file changed with 11 insertions and 1 deletions:
0 comments (0 inline, 0 general)
train_cmd.c
Show inline comments
 
@@ -508,10 +508,15 @@ static void AddArticulatedParts(Vehicle 
 
	if (!HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return;
 

	
 
	for (i = 1; i < 10; i++) {
 
		callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, NULL);
 
		callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, v);
 
		if (callback == CALLBACK_FAILED || callback == 0xFF) return;
 

	
 
		/* Attempt to use pre-allocated vehicles until they run out. This can happen
 
		 * if the callback returns different values depending on the cargo type. */
 
		u->next = vl[i];
 
		if (u->next == NULL) u->next = AllocateVehicle();
 
		if (u->next == NULL) return;
 

	
 
		u = u->next;
 

	
 
		engine_type = GB(callback, 0, 7);
 
@@ -571,6 +576,8 @@ static int32 CmdBuildRailWagon(EngineID 
 
		int x;
 
		int y;
 

	
 
		memset(&vl, 0, sizeof(vl));
 

	
 
		if (!AllocateVehicles(vl, num_vehicles))
 
			return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
 

	
 
@@ -742,6 +749,9 @@ int32 CmdBuildRailVehicle(TileIndex tile
 

	
 
	if (!(flags & DC_QUERY_COST)) {
 
		Vehicle *vl[12]; // Allow for upto 10 artic parts and dual-heads
 

	
 
		memset(&vl, 0, sizeof(vl));
 

	
 
		if (!AllocateVehicles(vl, num_vehicles) || IsOrderPoolFull())
 
			return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
 

	
0 comments (0 inline, 0 general)