Changeset - r76:1049286a4b28
[Not reviewed]
master
0 5 0
truelight - 20 years ago 2004-08-17 16:20:04
truelight@openttd.org
(svn r77) -Fix: [1010788] AI service interval bug (tnx truesatan)
-Add: AI overrides service interval to 180 days
-Fix: AI hanged when all vehicles were disabled in Patch menu
5 files changed with 24 insertions and 8 deletions:
0 comments (0 inline, 0 general)
ai.c
Show inline comments
 
@@ -301,6 +301,8 @@ static void AiHandleReplaceTrain(Player 
 
			veh = _new_train_id;
 
			AiRestoreVehicleOrders(&_vehicles[veh], orderbak);
 
			DoCommandByTile(0, veh, 0, DC_EXEC, CMD_START_STOP_TRAIN);
 
			// Force the service interval to 180 days.. else things can go very wrong :p
 
			DoCommandByTile(0, veh, 180, DC_EXEC, CMD_CHANGE_TRAIN_SERVICE_INT);
 
		}
 
	}
 
}
 
@@ -327,6 +329,8 @@ static void AiHandleReplaceRoadVeh(Playe
 
			veh = _new_roadveh_id;
 
			AiRestoreVehicleOrders(&_vehicles[veh], orderbak);
 
			DoCommandByTile(0, veh, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
 
			// Force the service interval to 180 days.. else things can go very wrong :p
 
			DoCommandByTile(0, veh, 180, DC_EXEC, CMD_CHANGE_ROADVEH_SERVICE_INT);
 
		}
 
	}
 
}
 
@@ -353,6 +357,8 @@ static void AiHandleReplaceAircraft(Play
 
			veh = _new_aircraft_id;
 
			AiRestoreVehicleOrders(&_vehicles[veh], orderbak);
 
			DoCommandByTile(0, veh, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
 
			// Force the service interval to 180 days.. else things can go very wrong :p
 
			DoCommandByTile(0, veh, 180, DC_EXEC, CMD_CHANGE_AIRCRAFT_SERVICE_INT);
 
		}
 
	}
 
}
 
@@ -1492,6 +1498,10 @@ static void AiStateWantNewRoute(Player *
 
	for(;;) {
 
		r = (uint16)Random();
 
		
 
		if (_patches.ai_disable_veh_train && _patches.ai_disable_veh_roadveh &&
 
			_patches.ai_disable_veh_aircraft && _patches.ai_disable_veh_ship)
 
			return;
 
		
 
		if (r < 0x7626) {
 
			if (_patches.ai_disable_veh_train) continue;
 
			AiWantTrainRoute(p);
 
@@ -2422,6 +2432,8 @@ handle_nocash:
 
	}
 

	
 
	DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_TRAIN);
 
	// Force the service interval to 180 days.. else things can go very wrong :p
 
	DoCommandByTile(0, loco_id, 180, DC_EXEC, CMD_CHANGE_TRAIN_SERVICE_INT);
 

	
 
	if (p->ai.num_want_fullload != 0)
 
		p->ai.num_want_fullload--;
 
@@ -3167,6 +3179,8 @@ static void AiStateBuildRoadVehicles(Pla
 
	}
 

	
 
	DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
 
	// Force the service interval to 180 days.. else things can go very wrong :p
 
	DoCommandByTile(0, loco_id, 180, DC_EXEC, CMD_CHANGE_ROADVEH_SERVICE_INT);
 

	
 
	if (p->ai.num_want_fullload != 0)
 
		p->ai.num_want_fullload--;
 
@@ -3473,6 +3487,8 @@ static void AiStateBuildAircraftVehicles
 
	}
 

	
 
	DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
 
	// Force the service interval to 180 days.. else things can go very wrong :p
 
	DoCommandByTile(0, loco_id, 180, DC_EXEC, CMD_CHANGE_AIRCRAFT_SERVICE_INT);
 

	
 
	if (p->ai.num_want_fullload != 0)
 
		p->ai.num_want_fullload--;
aircraft_cmd.c
Show inline comments
 
@@ -525,7 +525,7 @@ static void CheckIfAircraftNeedsService(
 
{
 
	Station *st;
 

	
 
	if (_patches.servint_aircraft == 0 && IS_HUMAN_PLAYER(v->owner))
 
	if (_patches.servint_aircraft == 0)
 
		return;
 

	
 
	if (v->date_of_last_service + v->service_interval > _date)
 
@@ -537,7 +537,7 @@ static void CheckIfAircraftNeedsService(
 
	if ((v->next_order & (OT_MASK | OF_FULL_LOAD)) == (OT_GOTO_DEPOT | OF_FULL_LOAD))
 
		return;
 

	
 
 	if (_patches.gotodepot && IS_HUMAN_PLAYER(v->owner) && ScheduleHasDepotOrders(v->schedule_ptr))
 
 	if (_patches.gotodepot && ScheduleHasDepotOrders(v->schedule_ptr))
 
 		return;
 
 
 
	st = DEREF_STATION(v->next_order_param);
roadveh_cmd.c
Show inline comments
 
@@ -1497,7 +1497,7 @@ static void CheckIfRoadVehNeedsService(V
 
{
 
	int i;
 

	
 
	if (_patches.servint_roadveh == 0 && IS_HUMAN_PLAYER(v->owner))
 
	if (_patches.servint_roadveh == 0)
 
		return;
 

	
 
	if (v->date_of_last_service + v->service_interval > _date)
 
@@ -1506,7 +1506,7 @@ static void CheckIfRoadVehNeedsService(V
 
	if (v->vehstatus & VS_STOPPED)
 
		return;
 

	
 
	if (_patches.gotodepot && IS_HUMAN_PLAYER(v->owner) && ScheduleHasDepotOrders(v->schedule_ptr))
 
	if (_patches.gotodepot && ScheduleHasDepotOrders(v->schedule_ptr))
 
		return;
 
	
 
	// Don't interfere with a depot visit scheduled by the user, or a
ship_cmd.c
Show inline comments
 
@@ -85,7 +85,7 @@ static void CheckIfShipNeedsService(Vehi
 
{
 
	int i;
 

	
 
	if (_patches.servint_ships == 0 && IS_HUMAN_PLAYER(v->owner))
 
	if (_patches.servint_ships == 0)
 
		return;
 

	
 
	if (v->date_of_last_service + v->service_interval > _date)
 
@@ -97,7 +97,7 @@ static void CheckIfShipNeedsService(Vehi
 
	if ((v->next_order & (OT_MASK | OF_FULL_LOAD)) == (OT_GOTO_DEPOT | OF_FULL_LOAD))
 
		return;
 

	
 
	if (_patches.gotodepot && IS_HUMAN_PLAYER(v->owner) && ScheduleHasDepotOrders(v->schedule_ptr))
 
	if (_patches.gotodepot && ScheduleHasDepotOrders(v->schedule_ptr))
 
		return;
 

	
 
	i = FindClosestShipDepot(v);
train_cmd.c
Show inline comments
 
@@ -2520,7 +2520,7 @@ static void CheckIfTrainNeedsService(Veh
 
	uint tile;
 
	byte depot;
 

	
 
	if (_patches.servint_trains == 0 && IS_HUMAN_PLAYER(v->owner))
 
	if (_patches.servint_trains == 0)
 
		return;
 

	
 
	if (v->date_of_last_service + v->service_interval > _date)
 
@@ -2529,7 +2529,7 @@ static void CheckIfTrainNeedsService(Veh
 
	if (v->vehstatus & VS_STOPPED)
 
		return;
 

	
 
	if (_patches.gotodepot && IS_HUMAN_PLAYER(v->owner) && ScheduleHasDepotOrders(v->schedule_ptr))
 
	if (_patches.gotodepot && ScheduleHasDepotOrders(v->schedule_ptr))
 
		return;
 
	
 
	// Don't interfere with a depot visit scheduled by the user, or a
0 comments (0 inline, 0 general)