changeset 14028:bc26fd686681 draft

(svn r18571) -Fix (r18551): Vehicles not carrying any cargo (e.g. engines) were not considered for sending to depot for replacement.
author frosch <frosch@openttd.org>
date Sun, 20 Dec 2009 15:21:39 +0000
parents c44b6212e488
children fd863f5283b0
files src/vehicle.cpp
diffstat 1 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -125,9 +125,20 @@
 		if (new_engine == INVALID_ENGINE || !HasBit(Engine::Get(new_engine)->company_avail, v->owner)) continue;
 
 		/* Check refittability */
-		CargoID cargo_type = CT_INVALID;
-		if (IsArticulatedVehicleCarryingDifferentCargos(v, &cargo_type) || cargo_type == CT_INVALID ||
-				!HasBit(GetIntersectionOfArticulatedRefitMasks(new_engine, true), cargo_type)) continue;
+		uint32 available_cargo_types, union_mask;
+		GetArticulatedRefitMasks(new_engine, true, &union_mask, &available_cargo_types);
+		/* Is there anything to refit? */
+		if (union_mask != 0) {
+			CargoID cargo_type;
+			/* We cannot refit to mixed cargos in an automated way */
+			if (IsArticulatedVehicleCarryingDifferentCargos(v, &cargo_type)) continue;
+
+			/* Did the old vehicle carry anything? */
+			if (cargo_type != CT_INVALID) {
+				/* We can't refit the vehicle to carry the cargo we want */
+				if (!HasBit(available_cargo_types, cargo_type)) continue;
+			}
+		}
 
 		/* Check money.
 		 * We want 2*(the price of the new vehicle) without looking at the value of the vehicle we are going to sell. */