Changeset - r13997:ebb94425d99b
[Not reviewed]
master
0 1 0
rubidium - 14 years ago 2009-12-19 21:19:45
rubidium@openttd.org
(svn r18549) -Fix: first do the time-since-last-service check and only then determine whether autoreplace needs to take place. This way they will not keep autoreplacing continuously on failure, but only after some timeout.
1 file changed with 17 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/vehicle.cpp
Show inline comments
 
@@ -91,17 +91,27 @@ void VehicleServiceInDepot(Vehicle *v)
 

	
 
bool Vehicle::NeedsServicing() const
 
{
 
	/* Stopped or crashed vehicles will not move, as such making unmovable
 
	 * vehicles to go for service is lame. */
 
	if (this->vehstatus & (VS_STOPPED | VS_CRASHED)) return false;
 

	
 
	if (_settings_game.order.no_servicing_if_no_breakdowns && _settings_game.difficulty.vehicle_breakdowns == 0) {
 
		/* Vehicles set for autoreplacing needs to go to a depot even if breakdowns are turned off.
 
		 * Note: If servicing is enabled, we postpone replacement till next service. */
 
		return EngineHasReplacementForCompany(Company::Get(this->owner), this->engine_type, this->group_id);
 
	/* Are we ready for the next service cycle? */
 
	if (Company::Get(this->owner)->settings.vehicle.servint_ispercent ?
 
			(this->reliability >= Engine::Get(this->engine_type)->reliability * (100 - this->service_interval) / 100) :
 
			(this->date_of_last_service + this->service_interval >= _date)) {
 
		return false;
 
	}
 

	
 
	return Company::Get(this->owner)->settings.vehicle.servint_ispercent ?
 
		(this->reliability < Engine::Get(this->engine_type)->reliability * (100 - this->service_interval) / 100) :
 
		(this->date_of_last_service + this->service_interval < _date);
 
	/* If we're servicing anyway, because we have not disabled servicing when
 
	 * there are no breakdowns or we are playing with breakdowns, bail out. */
 
	if (!_settings_game.order.no_servicing_if_no_breakdowns ||
 
			_settings_game.difficulty.vehicle_breakdowns != 0) {
 
		return true;
 
	}
 

	
 
	/* Vehicles set for autoreplacing needs to go to a depot even if breakdowns are turned off.
 
	 * Note: If servicing is enabled, we postpone replacement till next service. */
 
	return EngineHasReplacementForCompany(Company::Get(this->owner), this->engine_type, this->group_id);
 
}
 

	
 
bool Vehicle::NeedsAutomaticServicing() const
0 comments (0 inline, 0 general)