summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lang/english.txt2
-rw-r--r--station_cmd.c20
2 files changed, 22 insertions, 0 deletions
diff --git a/lang/english.txt b/lang/english.txt
index 04271e675..9d9f8916b 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 fe990857a..091205e0e 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;