Fix DeleteVisibleTrain being called on virtual trains

Add assertion to check for this case
pull/30/merge
Jonathan G Rennison 7 years ago
parent 1c04653518
commit 4b392b66db

@ -407,7 +407,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
if (new_owner == INVALID_OWNER) {
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));
} else {
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 */
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));
} else {
delete v;

@ -4754,6 +4754,8 @@ void DeleteVisibleTrain(Train *v)
{
SCOPE_INFO_FMT([v], "DeleteVisibleTrain: %s", scope_dumper().VehicleInfo(v));
assert(!v->IsVirtual());
FreeTrainTrackReservation(v);
TileIndex crossing = TrainApproachingCrossingTile(v);

Loading…
Cancel
Save