changeset 17166:a8648b5d49a3 draft

(svn r21904) -Fix: Include the capacity of non-refittable vehicles in the refitted-capacity, if their cargo matches.
author frosch <frosch@openttd.org>
date Sun, 23 Jan 2011 18:31:04 +0000
parents 3c9baf898829
children bab4569abbb2
files src/vehicle_cmd.cpp
diffstat 1 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -270,13 +270,19 @@
 		if (v->type == VEH_TRAIN && !vehicles_to_refit.Contains(v->index) && !only_this) continue;
 
 		const Engine *e = Engine::Get(v->engine_type);
-		if (!e->CanCarryCargo() || !HasBit(e->info.refit_mask, new_cid)) continue;
+		if (!e->CanCarryCargo()) continue;
+
+		/* If the vehicle is not refittable, count its capacity nevertheless if the cargo matches */
+		bool refittable = HasBit(e->info.refit_mask, new_cid);
+		if (!refittable && v->cargo_type != new_cid) continue;
 
 		/* Back up the vehicle's cargo type */
 		CargoID temp_cid = v->cargo_type;
 		byte temp_subtype = v->cargo_subtype;
-		v->cargo_type = new_cid;
-		v->cargo_subtype = new_subtype;
+		if (refittable) {
+			v->cargo_type = new_cid;
+			v->cargo_subtype = new_subtype;
+		}
 
 		uint16 mail_capacity = 0;
 		uint amount = GetVehicleCapacity(v, &mail_capacity);
@@ -284,6 +290,8 @@
 		/* mail_capacity will always be zero if the vehicle is not an aircraft. */
 		total_mail_capacity += mail_capacity;
 
+		if (!refittable) continue;
+
 		/* Restore the original cargo type */
 		v->cargo_type = temp_cid;
 		v->cargo_subtype = temp_subtype;