diff options
Diffstat (limited to 'order_cmd.c')
-rw-r--r-- | order_cmd.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/order_cmd.c b/order_cmd.c index 8614961c1..abef2d056 100644 --- a/order_cmd.c +++ b/order_cmd.c @@ -855,6 +855,24 @@ int32 CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) return 0; } + +static TileIndex GetStationTileForVehicle(const Vehicle* v, const Station* st) +{ + switch (v->type) { + default: NOT_REACHED(); + case VEH_Train: return st->train_tile; + case VEH_Aircraft: return st->airport_tile; + case VEH_Ship: return st->dock_tile; + case VEH_Road: + if (v->cargo_type == CT_PASSENGERS) { + return (st->bus_stops != NULL) ? st->bus_stops->xy : 0; + } else { + return (st->truck_stops != NULL) ? st->truck_stops->xy : 0; + } + } +} + + /** * * Check the orders of a vehicle, to see if there are invalid orders and stuff @@ -879,7 +897,6 @@ void CheckOrders(const Vehicle* v) if (v->owner == _local_player && v->day_counter % 20 == 0) { int n_st, problem_type = -1; const Order *order; - const Station *st; int message = 0; /* Check the order list */ @@ -893,11 +910,10 @@ void CheckOrders(const Vehicle* v) } /* Does station have a load-bay for this vehicle? */ if (order->type == OT_GOTO_STATION) { - TileIndex required_tile; + const Station* st = GetStation(order->station); + TileIndex required_tile = GetStationTileForVehicle(v, st); n_st++; - st = GetStation(order->station); - required_tile = GetStationTileForVehicle(v, st); if (required_tile == 0) problem_type = 3; } } |