changeset 15724:db6f7934da37 draft

(svn r20391) -Fix [FS#3993]: Prevent buying more vehicles than allowed.
author alberth <alberth@openttd.org>
date Fri, 06 Aug 2010 20:10:53 +0000
parents e4e81e86026e
children 597cad644741
files src/vehicle.cpp
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -1321,8 +1321,28 @@
 	return this->curid;
 }
 
+/**
+ * Get an unused unit number for a vehicle (if allowed).
+ * @param type Type of vehicle
+ * @return A unused unit number for the given type of vehicle if it is allowed to build one, else \c UINT16_MAX.
+ */
 UnitID GetFreeUnitNumber(VehicleType type)
 {
+	/* Check whether it is allowed to build another vehicle. */
+	uint max_veh;
+	switch (type) {
+		case VEH_TRAIN:    max_veh = _settings_game.vehicle.max_trains;   break;
+		case VEH_ROAD:     max_veh = _settings_game.vehicle.max_roadveh;  break;
+		case VEH_SHIP:     max_veh = _settings_game.vehicle.max_ships;    break;
+		case VEH_AIRCRAFT: max_veh = _settings_game.vehicle.max_aircraft; break;
+		default: NOT_REACHED();
+	}
+
+	uint amounts[4];
+	CountCompanyVehicles(_current_company, amounts);
+	assert((uint)type < lengthof(amounts));
+	if (amounts[type] >= max_veh) return UINT16_MAX; // Currently already at the limit, no room to make a new one.
+
 	FreeUnitIDGenerator gen(type, _current_company);
 
 	return gen.NextID();