summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aircraft_cmd.c9
-rw-r--r--vehicle.c2
-rw-r--r--vehicle.h2
3 files changed, 10 insertions, 3 deletions
diff --git a/aircraft_cmd.c b/aircraft_cmd.c
index 713475de8..8f834ea38 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 5f1992e51..03103820f 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 1b5c2cee6..2f582630a 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;