From 24943a4759d290b2b01cc5d2607f6317b7ccfcb9 Mon Sep 17 00:00:00 2001 From: matthijs Date: Tue, 3 May 2005 19:31:33 +0000 Subject: [PATCH] (svn r2261) - Fix: When crashed vehicles try to find a depot for servicing, openttd asserts. Crashed vehicles shouldn't find depots anyway... --- roadveh_cmd.c | 3 +++ ship_cmd.c | 3 +++ train_cmd.c | 6 +++++- vehicle.c | 3 +++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/roadveh_cmd.c b/roadveh_cmd.c index 670af9f6ae..08507023d1 100644 --- a/roadveh_cmd.c +++ b/roadveh_cmd.c @@ -353,6 +353,9 @@ int32 CmdSendRoadVehToDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (v->type != VEH_Road || !CheckOwnership(v->owner)) return CMD_ERROR; + if (v->vehstatus & VS_CRASHED) + return CMD_ERROR; + if (v->current_order.type == OT_GOTO_DEPOT) { if (flags & DC_EXEC) { diff --git a/ship_cmd.c b/ship_cmd.c index 75ef25736d..90810ad968 100644 --- a/ship_cmd.c +++ b/ship_cmd.c @@ -1002,6 +1002,9 @@ int32 CmdSendShipToDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (v->type != VEH_Ship || !CheckOwnership(v->owner)) return CMD_ERROR; + if (v->vehstatus & VS_CRASHED) + return CMD_ERROR; + if (v->current_order.type == OT_GOTO_DEPOT) { if (flags & DC_EXEC) { diff --git a/train_cmd.c b/train_cmd.c index ebbb129ef9..d9eb5cd298 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -1298,7 +1298,8 @@ static bool TrainFindDepotEnumProc(uint tile, TrainFindDepotData *tfdd, int trac return length >= tfdd->best_length; } -// returns the tile of a depot to goto to. +// returns the tile of a depot to goto to. The given vehicle must be on track, +// so not crashed, in a depot, etc. static TrainFindDepotData FindClosestTrainDepot(Vehicle *v) { int i; @@ -1362,6 +1363,9 @@ int32 CmdTrainGotoDepot(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (v->type != VEH_Train || !CheckOwnership(v->owner)) return CMD_ERROR; + if (v->vehstatus & VS_CRASHED) + return CMD_ERROR; + if (v->current_order.type == OT_GOTO_DEPOT) { if (flags & DC_EXEC) { if (HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) { diff --git a/vehicle.c b/vehicle.c index 03da2fdbef..4cd4b7b3af 100644 --- a/vehicle.c +++ b/vehicle.c @@ -55,6 +55,9 @@ bool VehicleNeedsService(const Vehicle *v) if (_patches.no_servicing_if_no_breakdowns && _opt.diff.vehicle_breakdowns == 0) return false; + if (v->vehstatus & VS_CRASHED) + return false; /* Crashed vehicles don't need service anymore */ + return _patches.servint_ispercent ? (v->reliability < _engines[v->engine_type].reliability * (100 - v->service_interval) / 100) : (v->date_of_last_service + v->service_interval < _date);