diff options
Diffstat (limited to 'src/order_cmd.cpp')
-rw-r--r-- | src/order_cmd.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index b980d1711..b9f1a0e4f 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -454,6 +454,20 @@ CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 case OUF_UNLOAD_IF_POSSIBLE: case OUFB_UNLOAD: case OUFB_TRANSFER: case OUFB_NO_UNLOAD: break; default: return CMD_ERROR; } + + /* Filter invalid stop locations */ + switch (new_order.GetStopLocation()) { + case OSL_PLATFORM_NEAR_END: + case OSL_PLATFORM_MIDDLE: + if (v->type != VEH_TRAIN) return CMD_ERROR; + /* FALL THROUGH */ + case OSL_PLATFORM_FAR_END: + break; + + default: + return CMD_ERROR; + } + break; } @@ -878,6 +892,11 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (data == order->GetNonStopType()) return CMD_ERROR; break; + case MOF_STOP_LOCATION: + if (v->type != VEH_TRAIN) return CMD_ERROR; + if (data >= OSL_END) return CMD_ERROR; + break; + case MOF_UNLOAD: if ((data & ~(OUFB_UNLOAD | OUFB_TRANSFER | OUFB_NO_UNLOAD)) != 0) return CMD_ERROR; /* Unload and no-unload are mutual exclusive and so are transfer and no unload. */ @@ -939,6 +958,10 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 order->SetNonStopType((OrderNonStopFlags)data); break; + case MOF_STOP_LOCATION: + order->SetStopLocation((OrderStopLocation)data); + break; + case MOF_UNLOAD: order->SetUnloadType((OrderUnloadFlags)data); if ((data & OUFB_NO_UNLOAD) != 0 && (order->GetLoadType() & OLFB_NO_LOAD) != 0) { |