summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/openttd.cpp10
-rw-r--r--src/order_cmd.cpp2
-rw-r--r--src/order_gui.cpp16
3 files changed, 20 insertions, 8 deletions
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 6df56e31b..4e3d244a8 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -2254,6 +2254,16 @@ bool AfterLoadGame()
}
}
+ /* Update go to buoy orders because they are just waypoints */
+ if (CheckSavegameVersion(84)) {
+ Order *order;
+ FOR_ALL_ORDERS(order) {
+ if (order->type == OT_GOTO_STATION && GetStation(order->dest)->IsBuoy()) {
+ order->flags = 0;
+ }
+ }
+ }
+
return InitializeWindowsAndCaches();
}
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index 590810429..7e1256727 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -676,7 +676,7 @@ CommandCost CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (sel_ord >= v->num_orders) return CMD_ERROR;
order = GetVehicleOrder(v, sel_ord);
- if (order->type != OT_GOTO_STATION &&
+ if ((order->type != OT_GOTO_STATION || GetStation(order->dest)->IsBuoy()) &&
(order->type != OT_GOTO_DEPOT || p2 == OFB_UNLOAD) &&
(order->type != OT_GOTO_WAYPOINT || p2 != OFB_NON_STOP)) {
return CMD_ERROR;
diff --git a/src/order_gui.cpp b/src/order_gui.cpp
index 8c3ff29b4..356782a39 100644
--- a/src/order_gui.cpp
+++ b/src/order_gui.cpp
@@ -152,7 +152,15 @@ static void DrawOrdersWindow(Window *w)
if (order != NULL) {
switch (order->type) {
- case OT_GOTO_STATION: break;
+ case OT_GOTO_STATION:
+ if (!GetStation(order->dest)->IsBuoy()) break;
+ /* Fall-through */
+
+ case OT_GOTO_WAYPOINT:
+ w->DisableWidget(ORDER_WIDGET_FULL_LOAD);
+ w->DisableWidget(ORDER_WIDGET_UNLOAD);
+ w->DisableWidget(ORDER_WIDGET_TRANSFER);
+ break;
case OT_GOTO_DEPOT:
w->DisableWidget(ORDER_WIDGET_TRANSFER);
@@ -163,12 +171,6 @@ static void DrawOrdersWindow(Window *w)
SetDParam(2,STR_SERVICE);
break;
- case OT_GOTO_WAYPOINT:
- w->DisableWidget(ORDER_WIDGET_FULL_LOAD);
- w->DisableWidget(ORDER_WIDGET_UNLOAD);
- w->DisableWidget(ORDER_WIDGET_TRANSFER);
- break;
-
default: // every other orders
w->DisableWidget(ORDER_WIDGET_NON_STOP);
w->DisableWidget(ORDER_WIDGET_FULL_LOAD);