mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-11 08:49:50 +00:00
(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.
This commit is contained in:
parent
79027229b9
commit
514edcc19d
@ -459,6 +459,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
|||||||
|
|
||||||
/* Append engines to the new chain
|
/* 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.
|
* 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 */
|
* OTOH the vehicle attach callback is more expensive this way :s */
|
||||||
Train *last_engine = NULL; ///< Shall store the last engine unit after this step
|
Train *last_engine = NULL; ///< Shall store the last engine unit after this step
|
||||||
if (cost.Succeeded()) {
|
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 (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;
|
if (last_engine == NULL) last_engine = append;
|
||||||
cost.AddCost(MoveVehicle(append, new_head, DC_EXEC, false));
|
cost.AddCost(MoveVehicle(append, new_head, DC_EXEC, false));
|
||||||
if (cost.Failed()) break;
|
if (cost.Failed()) break;
|
||||||
|
Loading…
Reference in New Issue
Block a user