summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2004-08-17 16:20:04 +0000
committertruelight <truelight@openttd.org>2004-08-17 16:20:04 +0000
commit4b919416a2d627fc6c979bc12069f120040a48f7 (patch)
tree8e87986ba34d24e9358ebd81cc9cac5469c51089
parent5e25a4ee7996a4cc3456c91ba07f27b5e810ffdf (diff)
downloadopenttd-4b919416a2d627fc6c979bc12069f120040a48f7.tar.xz
(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
-rw-r--r--ai.c16
-rw-r--r--aircraft_cmd.c4
-rw-r--r--roadveh_cmd.c4
-rw-r--r--ship_cmd.c4
-rw-r--r--train_cmd.c4
5 files changed, 24 insertions, 8 deletions
diff --git a/ai.c b/ai.c
index 70679deca..4039229a4 100644
--- a/ai.c
+++ b/ai.c
@@ -301,6 +301,8 @@ static void AiHandleReplaceTrain(Player *p)
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(Player *p)
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(Player *p)
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 *p)
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(Player *p)
}
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(Player *p)
}
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--;
diff --git a/aircraft_cmd.c b/aircraft_cmd.c
index c4500864e..a9fad4326 100644
--- a/aircraft_cmd.c
+++ b/aircraft_cmd.c
@@ -525,7 +525,7 @@ static void CheckIfAircraftNeedsService(Vehicle *v)
{
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(Vehicle *v)
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);
diff --git a/roadveh_cmd.c b/roadveh_cmd.c
index 79022d231..0ddb23387 100644
--- a/roadveh_cmd.c
+++ b/roadveh_cmd.c
@@ -1497,7 +1497,7 @@ static void CheckIfRoadVehNeedsService(Vehicle *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(Vehicle *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
diff --git a/ship_cmd.c b/ship_cmd.c
index 6c8b0cc7a..cc5127033 100644
--- a/ship_cmd.c
+++ b/ship_cmd.c
@@ -85,7 +85,7 @@ static void CheckIfShipNeedsService(Vehicle *v)
{
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(Vehicle *v)
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);
diff --git a/train_cmd.c b/train_cmd.c
index 97c18f736..b78cc1619 100644
--- a/train_cmd.c
+++ b/train_cmd.c
@@ -2520,7 +2520,7 @@ static void CheckIfTrainNeedsService(Vehicle *v)
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(Vehicle *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