diff --git a/lang/english.txt b/lang/english.txt index 04271e675d..9d9f8916ba 100644 --- a/lang/english.txt +++ b/lang/english.txt @@ -1140,6 +1140,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Can't build locks here... STR_BUILD_LOCKS_TIP :{BLACK}Build locks STR_LANDINFO_LOCK :Lock +STR_BUOY_IS_IN_USE :{WHITE}... buoy is in use! + STR_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUMU16}x{NUMU16} ({STRING}) STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Can't remove part of station... diff --git a/station_cmd.c b/station_cmd.c index fe990857a0..091205e0e0 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -1751,6 +1751,23 @@ int32 CmdBuildBuoy(int x, int y, uint32 flags, uint32 p1, uint32 p2) return _price.build_dock; } +/* Checks if any ship is servicing the buoy specified. Returns yes or no */ +static bool CheckShipsOnBuoy(Station *st) +{ + const Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->type == VEH_Ship) { + const Order *order; + FOR_VEHICLE_ORDERS(v, order) { + if (order->type == OT_GOTO_STATION && order->station == st->index) { + return true; + } + } + } + } + return false; +} + static int32 RemoveBuoy(Station *st, uint32 flags) { uint tile; @@ -1762,6 +1779,9 @@ static int32 RemoveBuoy(Station *st, uint32 flags) tile = st->dock_tile; + if (CheckShipsOnBuoy(st)) + return_cmd_error(STR_BUOY_IS_IN_USE); + if (!EnsureNoVehicle(tile)) return CMD_ERROR;