From d4157b36625aed9f0b8c71ee7f9cc38a62dfeeb6 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 21 Jan 2017 01:35:31 +0000 Subject: [PATCH] TBTR: Handle leftover template vehicles without owners in old saves. --- src/saveload/extended_ver_sl.cpp | 2 +- src/saveload/tbtr_template_veh_sl.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index dfc45e58e3..99e766fda2 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -45,7 +45,7 @@ std::vector _sl_xv_discardable_chunk_ids; ///< list of chunks static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version os SLXI chunk const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { - { XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 2, 2, "template_replacement", NULL, NULL, "TRPL,TMPL" }, + { XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 3, 3, "template_replacement", NULL, NULL, "TRPL,TMPL" }, { XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker }; diff --git a/src/saveload/tbtr_template_veh_sl.cpp b/src/saveload/tbtr_template_veh_sl.cpp index f17607401e..cfc1b55dff 100644 --- a/src/saveload/tbtr_template_veh_sl.cpp +++ b/src/saveload/tbtr_template_veh_sl.cpp @@ -3,6 +3,7 @@ #include "../tbtr_template_vehicle.h" #include "../tbtr_template_vehicle_func.h" #include "../train.h" +#include "../company_base.h" #include "../core/backup_type.hpp" #include "../core/random_func.hpp" @@ -107,6 +108,15 @@ void AfterLoadTemplateVehiclesUpdateImage() SavedRandomSeeds saved_seeds; SaveRandomSeeds(&saved_seeds); + if (!SlXvIsFeaturePresent(XSLFI_TEMPLATE_REPLACEMENT, 3)) { + FOR_ALL_TEMPLATES(tv) { + if (tv->Prev() == NULL && !Company::IsValidID(tv->owner)) { + // clean up leftover template vehicles which no longer have a valid owner + delete tv; + } + } + } + FOR_ALL_TEMPLATES(tv) { if (tv->Prev() == NULL) { Backup cur_company(_current_company, tv->owner, FILE_LINE);