TBTR: Fix template replacement refits having 0 cost

This commit is contained in:
Jonathan G Rennison
2020-01-16 20:33:45 +00:00
parent 424813446f
commit 06a2bedfe5
3 changed files with 7 additions and 4 deletions

View File

@@ -346,18 +346,21 @@ int NumTrainsNeedTemplateReplacement(GroupID g_id, const TemplateVehicle *tv)
return count; return count;
} }
// refit each vehicle in t as is in tv, assume t and tv contain the same types of vehicles // refit each vehicle in t as is in tv, assume t and tv contain the same types of vehicles
void CmdRefitTrainFromTemplate(Train *t, TemplateVehicle *tv, DoCommandFlag flags) CommandCost CmdRefitTrainFromTemplate(Train *t, TemplateVehicle *tv, DoCommandFlag flags)
{ {
CommandCost cost(t->GetExpenseType(false));
while (t && tv) { while (t && tv) {
// refit t as tv // refit t as tv
uint32 cb = GetCmdRefitVeh(t); uint32 cb = GetCmdRefitVeh(t);
DoCommand(t->tile, t->index, tv->cargo_type | tv->cargo_subtype << 8 | (1 << 16) | (1 << 31), flags, cb); cost.AddCost(DoCommand(t->tile, t->index, tv->cargo_type | tv->cargo_subtype << 8 | (1 << 16) | (1 << 31), flags, cb));
// next // next
t = t->GetNextUnit(); t = t->GetNextUnit();
tv = tv->GetNextUnit(); tv = tv->GetNextUnit();
} }
return cost;
} }
/** using cmdtemplatereplacevehicle as test-function (i.e. with flag DC_NONE) is not a good idea as that function relies on /** using cmdtemplatereplacevehicle as test-function (i.e. with flag DC_NONE) is not a good idea as that function relies on

View File

@@ -46,7 +46,7 @@ int NumTrainsNeedTemplateReplacement(GroupID, const TemplateVehicle*);
CommandCost TestBuyAllTemplateVehiclesInChain(TemplateVehicle *tv, TileIndex tile); CommandCost TestBuyAllTemplateVehiclesInChain(TemplateVehicle *tv, TileIndex tile);
void CmdRefitTrainFromTemplate(Train *t, TemplateVehicle *tv, DoCommandFlag); CommandCost CmdRefitTrainFromTemplate(Train *t, TemplateVehicle *tv, DoCommandFlag);
void BreakUpRemainders(Train *t); void BreakUpRemainders(Train *t);
bool TemplateVehicleContainsEngineOfRailtype(const TemplateVehicle*, RailType); bool TemplateVehicleContainsEngineOfRailtype(const TemplateVehicle*, RailType);

View File

@@ -5659,7 +5659,7 @@ CommandCost CmdTemplateReplaceVehicle(TileIndex tile, DoCommandFlag flags, uint3
// refit, only if the template option is set so // refit, only if the template option is set so
if (use_refit && (need_refit || need_replacement)) { if (use_refit && (need_refit || need_replacement)) {
CmdRefitTrainFromTemplate(new_chain, tv, flags); buy.AddCost(CmdRefitTrainFromTemplate(new_chain, tv, flags));
} }
if (new_chain && remainder_chain) { if (new_chain && remainder_chain) {