From 879ca660419f1137253cc7f9063e9babb8deb0f6 Mon Sep 17 00:00:00 2001 From: bjarni Date: Mon, 24 Jan 2005 18:21:23 +0000 Subject: [PATCH] (svn r1640) fix: now helicopters will use a hangar in schedule to be replaced in, even if they are only set to service there. Since helicopters are serviced at helipads, they will only go there if they needs to be replaced or renewed. --- aircraft_cmd.c | 9 ++++++--- vehicle.c | 2 ++ vehicle.h | 2 ++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/aircraft_cmd.c b/aircraft_cmd.c index 713475de89..8f834ea384 100644 --- a/aircraft_cmd.c +++ b/aircraft_cmd.c @@ -363,6 +363,8 @@ int32 CmdSendAircraftToHangar(int x, int y, uint32 flags, uint32 p1, uint32 p2) v = GetVehicle(p1); + if (p2 != 0) v->set_for_replacement = true; //now all clients knows that the vehicle wants to be replaced + if (!CheckOwnership(v->owner)) return CMD_ERROR; @@ -1030,7 +1032,8 @@ static void ProcessAircraftOrder(Vehicle *v) if (v->current_order.type == OT_GOTO_DEPOT && (v->current_order.flags & (OF_UNLOAD | OF_FULL_LOAD)) == (OF_UNLOAD | OF_FULL_LOAD) && - !VehicleNeedsService(v)) { + !VehicleNeedsService(v) && + v->set_for_replacement == false) { v->cur_order_index++; } @@ -1434,8 +1437,8 @@ static void AircraftEventHandler_HeliTakeOff(Vehicle *v, const AirportFTAClass * AircraftNextAirportPos_and_Order(v); // check if the aircraft needs to be replaced or renewed and send it to a hangar if needed - if ((v->owner == _local_player && _autoreplace_array[v->engine_type] != v->engine_type) || - (v->owner == _local_player && _patches.autorenew && v->age - v->max_age > (_patches.autorenew_months * 30))) { + if (v->current_order.type != OT_GOTO_DEPOT && ((v->owner == _local_player && _autoreplace_array[v->engine_type] != v->engine_type) || + (v->owner == _local_player && _patches.autorenew && v->age - v->max_age > (_patches.autorenew_months * 30)))) { _current_player = _local_player; DoCommandP(v->tile, v->index, 1, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR); _current_player = OWNER_NONE; diff --git a/vehicle.c b/vehicle.c index 5f1992e514..03103820f6 100644 --- a/vehicle.c +++ b/vehicle.c @@ -194,6 +194,7 @@ static Vehicle *InitializeVehicle(Vehicle *v) v->string_id = 0; v->next_shared = NULL; v->prev_shared = NULL; + v->set_for_replacement = false; /* random_bits is used to pick out a random sprite for vehicles which are technical the same (newgrf stuff). Because RandomRange() results in desyncs, and because it does @@ -1422,6 +1423,7 @@ int32 CmdReplaceVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) Engine *e; e = DEREF_ENGINE(new_engine_type); + v->set_for_replacement = false; v->reliability = e->reliability; v->reliability_spd_dec = e->reliability_spd_dec; v->age = 0; diff --git a/vehicle.h b/vehicle.h index 1b5c2cee66..2f582630a6 100644 --- a/vehicle.h +++ b/vehicle.h @@ -180,6 +180,8 @@ struct Vehicle { int32 profit_last_year; uint32 value; + bool set_for_replacement; // marks this vehicle to be replaced + union { VehicleRail rail; VehicleAir air;