From a58b975fd005840c5340e37bb9141b26c2a293fc Mon Sep 17 00:00:00 2001 From: michi_cc Date: Sun, 6 Nov 2011 22:14:55 +0000 Subject: (svn r23127) -Fix [FS#4819] (r23086): Don't crash when refitting default vehicles. --- src/vehicle_cmd.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 7c6e33ae0..a237b1941 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -212,15 +212,19 @@ static int GetRefitCostFactor(const Vehicle *v, EngineID engine_type, CargoID ne { /* Prepare callback param with info about the new cargo type. */ const Engine *e = Engine::Get(engine_type); - const CargoSpec *cs = CargoSpec::Get(new_cid); - uint32 param1 = (cs->classes << 16) | (new_subtype << 8) | e->GetGRF()->cargo_map[new_cid]; - - uint16 cb_res = GetVehicleCallback(CBID_VEHICLE_REFIT_COST, param1, 0, engine_type, v); - if (cb_res != CALLBACK_FAILED) { - *auto_refit_allowed = HasBit(cb_res, 14); - int factor = GB(cb_res, 0, 14); - if (factor >= 0x2000) factor -= 0x4000; // Treat as signed integer. - return factor; + + /* Is this vehicle a NewGRF vehicle? */ + if (e->GetGRF() != NULL) { + const CargoSpec *cs = CargoSpec::Get(new_cid); + uint32 param1 = (cs->classes << 16) | (new_subtype << 8) | e->GetGRF()->cargo_map[new_cid]; + + uint16 cb_res = GetVehicleCallback(CBID_VEHICLE_REFIT_COST, param1, 0, engine_type, v); + if (cb_res != CALLBACK_FAILED) { + *auto_refit_allowed = HasBit(cb_res, 14); + int factor = GB(cb_res, 0, 14); + if (factor >= 0x2000) factor -= 0x4000; // Treat as signed integer. + return factor; + } } *auto_refit_allowed = e->info.refit_cost == 0; -- cgit v1.2.3-70-g09d2