summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbjarni <bjarni@openttd.org>2006-09-02 22:47:45 +0000
committerbjarni <bjarni@openttd.org>2006-09-02 22:47:45 +0000
commit302772883ce9dd965ca6dfe9ade85530c6de8210 (patch)
tree864702554fea3f8634aab76b6bd5d2d495093735
parent07199603b44327b9436ef0f878151a66243b45da (diff)
downloadopenttd-302772883ce9dd965ca6dfe9ade85530c6de8210.tar.xz
(svn r6352) -Fix: FS#322 Send to depot bug
now vehicles can't be sent to a depot when they are already inside a depot before they would remember the order and try to turn around when leaving the depot
-rw-r--r--aircraft_cmd.c2
-rw-r--r--roadveh_cmd.c2
-rw-r--r--ship_cmd.c2
-rw-r--r--train_cmd.c4
4 files changed, 9 insertions, 1 deletions
diff --git a/aircraft_cmd.c b/aircraft_cmd.c
index f6c991044..795a08540 100644
--- a/aircraft_cmd.c
+++ b/aircraft_cmd.c
@@ -509,7 +509,7 @@ int32 CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
v = GetVehicle(p1);
- if (v->type != VEH_Aircraft || !CheckOwnership(v->owner)) return CMD_ERROR;
+ if (v->type != VEH_Aircraft || !CheckOwnership(v->owner) || IsAircraftInHangar(v)) return CMD_ERROR;
if (v->current_order.type == OT_GOTO_DEPOT && !(p2 & DEPOT_LOCATE_HANGAR)) {
if (!!(p2 & DEPOT_SERVICE) == HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
diff --git a/roadveh_cmd.c b/roadveh_cmd.c
index 70dadb89b..0b37503e4 100644
--- a/roadveh_cmd.c
+++ b/roadveh_cmd.c
@@ -380,6 +380,8 @@ int32 CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (v->vehstatus & VS_CRASHED) return CMD_ERROR;
+ if (IsRoadVehInDepot(v)) return CMD_ERROR;
+
/* If the current orders are already goto-depot */
if (v->current_order.type == OT_GOTO_DEPOT) {
if (!!(p2 & DEPOT_SERVICE) == HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
diff --git a/ship_cmd.c b/ship_cmd.c
index 7cd4ddccd..68ce0073a 100644
--- a/ship_cmd.c
+++ b/ship_cmd.c
@@ -1018,6 +1018,8 @@ int32 CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (v->vehstatus & VS_CRASHED) return CMD_ERROR;
+ if (IsShipInDepot(v)) return CMD_ERROR;
+
/* If the current orders are already goto-depot */
if (v->current_order.type == OT_GOTO_DEPOT) {
if (!!(p2 & DEPOT_SERVICE) == HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
diff --git a/train_cmd.c b/train_cmd.c
index 3e69da86c..79457b5d2 100644
--- a/train_cmd.c
+++ b/train_cmd.c
@@ -1973,6 +1973,10 @@ int32 CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
return 0;
}
+ /* check if at a standstill (not stopped only) in a depot
+ * the check is down here to make it possible to alter stop/service for trains entering the depot */
+ if (IsTileDepotType(v->tile, TRANSPORT_RAIL) && v->cur_speed == 0) return CMD_ERROR;
+
tfdd = FindClosestTrainDepot(v, 0);
if (tfdd.best_length == (uint)-1) return_cmd_error(STR_883A_UNABLE_TO_FIND_ROUTE_TO);