summaryrefslogtreecommitdiff
path: root/aircraft_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'aircraft_cmd.c')
-rw-r--r--aircraft_cmd.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/aircraft_cmd.c b/aircraft_cmd.c
index a5a93770f..f2ddad671 100644
--- a/aircraft_cmd.c
+++ b/aircraft_cmd.c
@@ -478,8 +478,8 @@ int32 CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
* @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(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
@@ -500,11 +500,11 @@ int32 CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
}
} 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;
@@ -1565,12 +1565,14 @@ 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
+ // 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;
}
}