From 514edcc19d158f3b95232507ce0e3dab11affbbf Mon Sep 17 00:00:00 2001 From: frosch Date: Fri, 20 Aug 2010 17:36:09 +0000 Subject: (svn r20583) -Fix: Autoreplace failed while attaching non-replaced wagons to the new chain, if to-be-sold-engines would become front-engines and the unitnumber limit would be exceeded. --- src/autoreplace_cmd.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/autoreplace_cmd.cpp') diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 8771ef936..6341c7b1b 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -459,6 +459,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon /* Append engines to the new chain * We do this from back to front, so that the head of the temporary vehicle chain does not change all the time. + * That way we also have less trouble when exceeding the unitnumber limit. * OTOH the vehicle attach callback is more expensive this way :s */ Train *last_engine = NULL; ///< Shall store the last engine unit after this step if (cost.Succeeded()) { @@ -467,6 +468,13 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon if (RailVehInfo(append->engine_type)->railveh_type == RAILVEH_WAGON) continue; + if (new_vehs[i] != NULL) { + /* Move the old engine to a separate row with DC_AUTOREPLACE. Else + * moving the wagon in front may fail later due to unitnumber limit. + * (We have to attach wagons without DC_AUTOREPLACE.) */ + MoveVehicle(old_vehs[i], NULL, DC_EXEC | DC_AUTOREPLACE, false); + } + if (last_engine == NULL) last_engine = append; cost.AddCost(MoveVehicle(append, new_head, DC_EXEC, false)); if (cost.Failed()) break; -- cgit v1.2.3-54-g00ecf