Fix DeleteVisibleTrain being called on virtual trains
Add assertion to check for this case
This commit is contained in:
@@ -407,7 +407,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
|||||||
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
|
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
|
||||||
if (new_owner == INVALID_OWNER) {
|
if (new_owner == INVALID_OWNER) {
|
||||||
if (v->Previous() == NULL) {
|
if (v->Previous() == NULL) {
|
||||||
if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine()) {
|
if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine() && !Train::From(v)->IsVirtual()) {
|
||||||
DeleteVisibleTrain(Train::From(v));
|
DeleteVisibleTrain(Train::From(v));
|
||||||
} else {
|
} else {
|
||||||
delete v;
|
delete v;
|
||||||
|
@@ -175,7 +175,7 @@ static void RemoveAndSellVehicle(Vehicle *v, bool give_money)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* take special measures for trains, but not when sharing is disabled or when the train is a free wagon chain */
|
/* take special measures for trains, but not when sharing is disabled or when the train is a free wagon chain */
|
||||||
if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine()) {
|
if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine() && !Train::From(v)->IsVirtual()) {
|
||||||
DeleteVisibleTrain(Train::From(v));
|
DeleteVisibleTrain(Train::From(v));
|
||||||
} else {
|
} else {
|
||||||
delete v;
|
delete v;
|
||||||
|
@@ -4754,6 +4754,8 @@ void DeleteVisibleTrain(Train *v)
|
|||||||
{
|
{
|
||||||
SCOPE_INFO_FMT([v], "DeleteVisibleTrain: %s", scope_dumper().VehicleInfo(v));
|
SCOPE_INFO_FMT([v], "DeleteVisibleTrain: %s", scope_dumper().VehicleInfo(v));
|
||||||
|
|
||||||
|
assert(!v->IsVirtual());
|
||||||
|
|
||||||
FreeTrainTrackReservation(v);
|
FreeTrainTrackReservation(v);
|
||||||
TileIndex crossing = TrainApproachingCrossingTile(v);
|
TileIndex crossing = TrainApproachingCrossingTile(v);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user