Fix Vehicle::CopyVehicleConfigAndStatistics not releasing unit number

See: https://github.com/OpenTTD/OpenTTD/issues/12388
pull/684/head
Jonathan G Rennison 1 month ago
parent afaf452534
commit 315dd62bd9

@ -2225,8 +2225,7 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, DoCommandFlag flags, uint32_t p1,
} }
/* Remove stuff not valid anymore for non-front engines. */ /* Remove stuff not valid anymore for non-front engines. */
DeleteVehicleOrders(src); DeleteVehicleOrders(src);
Company::Get(src->owner)->freeunits[src->type].ReleaseID(src->unitnumber); src->ReleaseUnitNumber();
src->unitnumber = 0;
if (!_settings_game.vehicle.non_leading_engines_keep_name) { if (!_settings_game.vehicle.non_leading_engines_keep_name) {
src->name.clear(); src->name.clear();
} }

@ -3710,6 +3710,17 @@ void Vehicle::ResetRefitCaps()
for (Vehicle *v = this; v != nullptr; v = v->Next()) v->refit_cap = v->cargo_cap; for (Vehicle *v = this; v != nullptr; v = v->Next()) v->refit_cap = v->cargo_cap;
} }
/**
* Release the vehicle's unit number.
*/
void Vehicle::ReleaseUnitNumber()
{
if (this->unitnumber != 0) {
Company::Get(this->owner)->freeunits[this->type].ReleaseID(this->unitnumber);
this->unitnumber = 0;
}
}
static bool ShouldVehicleContinueWaiting(Vehicle *v) static bool ShouldVehicleContinueWaiting(Vehicle *v)
{ {
if (v->GetNumOrders() < 1) return false; if (v->GetNumOrders() < 1) return false;

@ -907,6 +907,8 @@ public:
void ResetRefitCaps(); void ResetRefitCaps();
void ReleaseUnitNumber();
/** /**
* Copy certain configurations and statistics of a vehicle after successful autoreplace/renew * Copy certain configurations and statistics of a vehicle after successful autoreplace/renew
* The function shall copy everything that cannot be copied by a command (like orders / group etc), * The function shall copy everything that cannot be copied by a command (like orders / group etc),
@ -917,6 +919,7 @@ public:
{ {
this->CopyConsistPropertiesFrom(src); this->CopyConsistPropertiesFrom(src);
this->ReleaseUnitNumber();
this->unitnumber = src->unitnumber; this->unitnumber = src->unitnumber;
this->current_order = src->current_order; this->current_order = src->current_order;

Loading…
Cancel
Save