src/autoreplace_cmd.cpp
changeset 9141 0989911b79dd
parent 9140 7c8d8562b942
child 9234 bfc9d27d3d0d
--- a/src/autoreplace_cmd.cpp	Wed May 07 22:08:20 2008 +0000
+++ b/src/autoreplace_cmd.cpp	Wed May 07 23:00:11 2008 +0000
@@ -427,10 +427,14 @@
 				/* We are going to try to replace a vehicle but we don't have any backup so we will make one. */
 				backup.Backup(v, p);
 			}
-			/* Now replace the vehicle */
+			/* Now replace the vehicle.
+			 * First we need to cache if it's the front vehicle as we need to update the v pointer if it is.
+			 * If the replacement fails then we can't trust the data in the vehicle hence the reason to cache the result. */
+			bool IsFront = w->type != VEH_TRAIN || w->u.rail.first_engine == INVALID_ENGINE;
+
 			cost.AddCost(ReplaceVehicle(&w, DC_EXEC, cost.GetCost(), p, new_engine));
 
-			if (CmdSucceeded(cost) && (w->type != VEH_TRAIN || w->u.rail.first_engine == INVALID_ENGINE)) {
+			if (IsFront) {
 				/* now we bought a new engine and sold the old one. We need to fix the
 				 * pointers in order to avoid pointing to the old one for trains: these
 				 * pointers should point to the front engine and not the cars