From 4b919416a2d627fc6c979bc12069f120040a48f7 Mon Sep 17 00:00:00 2001 From: truelight Date: Tue, 17 Aug 2004 16:20:04 +0000 Subject: (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 --- ai.c | 16 ++++++++++++++++ aircraft_cmd.c | 4 ++-- roadveh_cmd.c | 4 ++-- ship_cmd.c | 4 ++-- train_cmd.c | 4 ++-- 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 -- cgit v1.2.3-70-g09d2