changeset 18291:d196ce663830 draft

(svn r23127) -Fix [FS#4819] (r23086): Don't crash when refitting default vehicles.
author michi_cc <michi_cc@openttd.org>
date Sun, 06 Nov 2011 22:14:55 +0000
parents 5c97f9a40d05
children 32b005946b0e
files src/vehicle_cmd.cpp
diffstat 1 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -212,15 +212,19 @@
 {
 	/* 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];
+
+	/* 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;
+		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;