From 3439d208d7f4626ae20d23aa088ca5e0866b6ec0 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 29 Mar 2024 16:09:13 +0000 Subject: [PATCH] TBTR: Fix cost estimation of replacement when using wagon attach callbacks Do not CMD_SELL_VEHICLE in cost estimation, just use the vehicle values --- src/train_cmd.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 5915e96305..151cd2e198 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -7367,10 +7367,15 @@ CommandCost CmdTemplateReplaceVehicle(TileIndex tile, DoCommandFlag flags, uint3 if (!tv->IsSetKeepRemainingVehicles()) { /* Sell leftovers */ for (const Train *u : in) { - buy.AddCost(DoCommand(u->tile, u->index, 0, flags, CMD_SELL_VEHICLE)); + /* Do not dry-run selling each part using CMD_SELL_VEHICLE because this can fail due to consist/wagon-attachment callbacks */ + buy.AddCost(-u->value); + if (u->other_multiheaded_part != nullptr) { + buy.AddCost(-u->other_multiheaded_part->value); + } } } } + if (buy.Failed()) buy.MultiplyCost(0); return buy; }