(svn r2261) - Fix: When crashed vehicles try to find a depot for servicing, openttd asserts.
authormatthijs
Tue, 03 May 2005 19:31:33 +0000
changeset 1757 b179d50241dc
parent 1756 cf2c7fb6bce8
child 1758 68668114f92e
(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
ship_cmd.c
train_cmd.c
vehicle.c
--- a/roadveh_cmd.c	Tue May 03 15:20:08 2005 +0000
+++ b/roadveh_cmd.c	Tue May 03 19:31:33 2005 +0000
@@ -353,6 +353,9 @@
 	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) {
 
--- a/ship_cmd.c	Tue May 03 15:20:08 2005 +0000
+++ b/ship_cmd.c	Tue May 03 19:31:33 2005 +0000
@@ -1002,6 +1002,9 @@
 	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) {
 
--- a/train_cmd.c	Tue May 03 15:20:08 2005 +0000
+++ b/train_cmd.c	Tue May 03 19:31:33 2005 +0000
@@ -1298,7 +1298,8 @@
 	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 @@
 	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)) {
--- a/vehicle.c	Tue May 03 15:20:08 2005 +0000
+++ b/vehicle.c	Tue May 03 19:31:33 2005 +0000
@@ -55,6 +55,9 @@
 	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);