From bdcafb38ccad4bb5ce94ee9c54dc9adfe2edca03 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 6 May 2019 12:19:38 +0100 Subject: [PATCH] Fix ScriptOrder::GetOrderDistance in VT_AIR mode on waypoint tiles --- src/script/api/script_order.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/script/api/script_order.cpp b/src/script/api/script_order.cpp index 26bbf8a666..23f4f7937c 100644 --- a/src/script/api/script_order.cpp +++ b/src/script/api/script_order.cpp @@ -669,8 +669,14 @@ static void _DoCommandReturnSetOrderFlags(class ScriptInstance *instance) /* static */ uint ScriptOrder::GetOrderDistance(ScriptVehicle::VehicleType vehicle_type, TileIndex origin_tile, TileIndex dest_tile) { if (vehicle_type == ScriptVehicle::VT_AIR) { - if (ScriptTile::IsStationTile(origin_tile) && ::Station::GetByTile(origin_tile)->airport.tile != INVALID_TILE) origin_tile = ::Station::GetByTile(origin_tile)->airport.tile; - if (ScriptTile::IsStationTile(dest_tile) && ::Station::GetByTile(dest_tile)->airport.tile != INVALID_TILE) dest_tile = ::Station::GetByTile(dest_tile)->airport.tile; + auto check_tile = [](TileIndex &tile) { + if (ScriptTile::IsStationTile(tile)) { + const Station *st = ::Station::GetByTile(tile); + if (st != nullptr && st->airport.tile != INVALID_TILE) tile = st->airport.tile; + } + }; + check_tile(origin_tile); + check_tile(dest_tile); return ScriptMap::DistanceSquare(origin_tile, dest_tile); } else {