# HG changeset patch # User Darkvater # Date 1154345358 0 # Node ID c63f74223041a5012dc6d244740a21c934b5be1e # Parent 4207bb54e7c8ff30dcdd24805f68051e72278648 (svn r5668) - Backport from trunk (r5454): Helicopters stopping in depot after autorenew/autoreplace diff -r 4207bb54e7c8 -r c63f74223041 aircraft_cmd.c --- a/aircraft_cmd.c Sun Jul 30 23:43:47 2006 +0000 +++ b/aircraft_cmd.c Mon Jul 31 11:29:18 2006 +0000 @@ -386,8 +386,8 @@ * @param p1 vehicle ID to send to the hangar * @param p2 various bitmasked elements * - p2 = 0 - aircraft goes to the depot and stays there (user command) - * - p2 non-zero - aircraft will try to goto a depot, but not stop there (eg forced servicing) - * - p2 (bit 17) - aircraft will try to goto a depot at the next airport + * - p2 (bit 16) - aircraft will try to goto a depot, but not stop there (eg autorenew or autoreplace) + * - p2 (bit 17) - aircraft will try to goto a depot at the airport specified by low word of p2 XXX - Not Used */ int32 CmdSendAircraftToHangar(int x, int y, uint32 flags, uint32 p1, uint32 p2) { @@ -408,11 +408,11 @@ } } else { bool next_airport_has_hangar = true; + /* If bit 17 is set, next airport is specified by low word of p2, otherwise it's the target airport */ /* XXX - I don't think p2 is any valid station cause all calls use either 0, 1, or 1<<16!!!!!!!!! */ StationID next_airport_index = (HASBIT(p2, 17)) ? (StationID)p2 : v->u.air.targetairport; const Station *st = GetStation(next_airport_index); - // If an airport doesn't have terminals (so no landing space for airports), - // it surely doesn't have any hangars + /* If the station is not a valid airport or if it has no hangars */ if (!IsValidStation(st) || st->airport_tile == 0 || GetAirport(st->airport_type)->nof_depots == 0) { StationID station; @@ -1440,12 +1440,14 @@ AircraftNextAirportPos_and_Order(v); // check if the aircraft needs to be replaced or renewed and send it to a hangar if needed + // unless it is due for renewal but the engine is no longer available if (v->owner == _local_player && ( EngineHasReplacementForPlayer(p, v->engine_type) || - (p->engine_renew && v->age - v->max_age > p->engine_renew_months * 30) + ((p->engine_renew && v->age - v->max_age > p->engine_renew_months * 30) && + HASBIT(GetEngine(v->engine_type)->player_avail, _local_player)) )) { _current_player = _local_player; - DoCommandP(v->tile, v->index, 1, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR); + DoCommandP(v->tile, v->index, 1 << 16, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR); _current_player = OWNER_NONE; } }