changeset 2842:fa76710b941c draft

(svn r3390) -Fix: [autoreplace] fixed issue where autoreplace failed to attach the cars if the front engine was replaced and the front engine was multiheaded and the first vehicle after it was the rear part of that engine
author bjarni <bjarni@openttd.org>
date Sun, 08 Jan 2006 12:20:13 +0000
parents 03a4b5997078
children bbc15daeb0c2
files vehicle.c
diffstat 1 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/vehicle.c
+++ b/vehicle.c
@@ -1654,10 +1654,17 @@
 			new_front = true;
 
 			new_v->current_order = old_v->current_order;
-			if (old_v->type == VEH_Train){
-				// move the entire train to the new engine, including the old engine. It will be sold in a moment anyway
-				if (GetNextVehicle(old_v) != NULL) {
-					DoCommand(0, 0, (new_v->index << 16) | GetNextVehicle(old_v)->index, 1, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
+			if (old_v->type == VEH_Train && GetNextVehicle(old_v) != NULL){
+				Vehicle *temp_v = GetNextVehicle(old_v);
+
+				// move the entire train to the new engine, excluding the old engine
+				if (IsMultiheaded(old_v) && temp_v == old_v->u.rail.other_multiheaded_part) {
+					// we got front and rear of a multiheaded engine right after each other. We should work with the next in line instead
+					temp_v = GetNextVehicle(temp_v);
+				}
+
+				if (temp_v != NULL) {
+					DoCommand(0, 0, (new_v->index << 16) | temp_v->index, 1, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
 				}
 			}
 		}