(svn r11618) -Fix: buoys are just waypoints, so don't allow load/unload/transfert for them

This commit is contained in:
glx 2007-12-11 17:44:55 +00:00
parent 6f73382317
commit fb1d768924
3 changed files with 20 additions and 8 deletions

View File

@ -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(); return InitializeWindowsAndCaches();
} }

View File

@ -676,7 +676,7 @@ CommandCost CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (sel_ord >= v->num_orders) return CMD_ERROR; if (sel_ord >= v->num_orders) return CMD_ERROR;
order = GetVehicleOrder(v, sel_ord); 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_DEPOT || p2 == OFB_UNLOAD) &&
(order->type != OT_GOTO_WAYPOINT || p2 != OFB_NON_STOP)) { (order->type != OT_GOTO_WAYPOINT || p2 != OFB_NON_STOP)) {
return CMD_ERROR; return CMD_ERROR;

View File

@ -152,7 +152,15 @@ static void DrawOrdersWindow(Window *w)
if (order != NULL) { if (order != NULL) {
switch (order->type) { 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: case OT_GOTO_DEPOT:
w->DisableWidget(ORDER_WIDGET_TRANSFER); w->DisableWidget(ORDER_WIDGET_TRANSFER);
@ -163,12 +171,6 @@ static void DrawOrdersWindow(Window *w)
SetDParam(2,STR_SERVICE); SetDParam(2,STR_SERVICE);
break; 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 default: // every other orders
w->DisableWidget(ORDER_WIDGET_NON_STOP); w->DisableWidget(ORDER_WIDGET_NON_STOP);
w->DisableWidget(ORDER_WIDGET_FULL_LOAD); w->DisableWidget(ORDER_WIDGET_FULL_LOAD);