changeset 13963:62925b6feb3b draft

(svn r18499) -Fix/Change/Feature [FS#3159]: autoreplace and autorenew always reset their cargo sub type to 0. Now find a sub cargo type with the exact same name and use that, otherwise fallback to 0. So cargo sub types can be maintained via autoreplace *if* the new vehicle supports the same cargo sub type.
author rubidium <rubidium@openttd.org>
date Mon, 14 Dec 2009 19:19:47 +0000
parents 9b98b4f050e5
children 3087cddf0b7c
files src/autoreplace_cmd.cpp
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/autoreplace_cmd.cpp
+++ b/src/autoreplace_cmd.cpp
@@ -271,8 +271,13 @@
 	*new_vehicle = new_veh;
 
 	/* Refit the vehicle if needed */
+	byte subtype = GetBestFittingSubType(old_veh, new_veh);
+	/* If the subtype isn't zero and the refit cargo is not set,
+	 * we're better off setting the refit cargo too. */
+	if (subtype != 0 && refit_cargo == CT_NO_REFIT) refit_cargo = old_veh->cargo_type;
+
 	if (refit_cargo != CT_NO_REFIT) {
-		cost.AddCost(DoCommand(0, new_veh->index, refit_cargo, DC_EXEC, GetCmdRefitVeh(new_veh)));
+		cost.AddCost(DoCommand(0, new_veh->index, refit_cargo | (subtype << 8), DC_EXEC, GetCmdRefitVeh(new_veh)));
 		assert(cost.Succeeded()); // This should be ensured by GetNewCargoTypeForReplace()
 	}