summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2011-01-23 18:31:04 +0000
committerfrosch <frosch@openttd.org>2011-01-23 18:31:04 +0000
commit072f6d67efbe1b535a5e65c75e8992f7c5b7ae50 (patch)
treea4ddae42ab437b94badc01441825a53436d0021e /src
parent25a22ec255289ed3dcc6f8f615924657faaa2027 (diff)
downloadopenttd-072f6d67efbe1b535a5e65c75e8992f7c5b7ae50.tar.xz
(svn r21904) -Fix: Include the capacity of non-refittable vehicles in the refitted-capacity, if their cargo matches.
Diffstat (limited to 'src')
-rw-r--r--src/vehicle_cmd.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp
index a083a40a0..fca07e86e 100644
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -270,13 +270,19 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles,
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 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles,
/* 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;