summaryrefslogtreecommitdiff
path: root/src/order_cmd.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-12-23 18:43:38 +0000
committerrubidium <rubidium@openttd.org>2009-12-23 18:43:38 +0000
commit277794e26bc005488300cc7df76a1278276246d7 (patch)
tree346e8e38e79c240f640e9931e8870ddfefbf6bd7 /src/order_cmd.cpp
parentfbaba4e6bd93cacdadd393f2b7f65b44b55bfe18 (diff)
downloadopenttd-277794e26bc005488300cc7df76a1278276246d7.tar.xz
(svn r18615) -Fix: conditional orders were seen as 'valid' and as such aircraft with only conditional orders did not crash
Diffstat (limited to 'src/order_cmd.cpp')
-rw-r--r--src/order_cmd.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index 91726579e..a07b2ac89 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -1596,13 +1596,24 @@ uint16 GetServiceIntervalClamped(uint interval, CompanyID company_id)
* Check if a vehicle has any valid orders
*
* @return false if there are no valid orders
+ * @note Conditional orders are not considered valid destination orders
*
*/
static bool CheckForValidOrders(const Vehicle *v)
{
const Order *order;
- FOR_VEHICLE_ORDERS(v, order) if (!order->IsType(OT_DUMMY)) return true;
+ FOR_VEHICLE_ORDERS(v, order) {
+ switch (order->GetType()) {
+ case OT_GOTO_STATION:
+ case OT_GOTO_DEPOT:
+ case OT_GOTO_WAYPOINT:
+ return true;
+
+ default:
+ break;
+ }
+ }
return false;
}
@@ -1784,7 +1795,7 @@ bool ProcessOrders(Vehicle *v)
const Order *order = v->GetOrder(v->cur_order_index);
/* If no order, do nothing. */
- if (order == NULL || (v->type == VEH_AIRCRAFT && order->IsType(OT_DUMMY) && !CheckForValidOrders(v))) {
+ if (order == NULL || (v->type == VEH_AIRCRAFT && !CheckForValidOrders(v))) {
if (v->type == VEH_AIRCRAFT) {
/* Aircraft do something vastly different here, so handle separately */
extern void HandleMissingAircraftOrders(Aircraft *v);