(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
authordominik
Thu, 20 Jan 2005 22:19:34 +0000
changeset 1078 326bae748bcb
parent 1077 3a38f07dddcc
child 1079 d6da6dc920a4
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
This makes buoys more useable in multiplayer games again, as buoys can't be deleted by other players if they are used.
lang/english.txt
station_cmd.c
--- a/lang/english.txt	Thu Jan 20 18:57:09 2005 +0000
+++ b/lang/english.txt	Thu Jan 20 22:19:34 2005 +0000
@@ -1140,6 +1140,8 @@
 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...
--- a/station_cmd.c	Thu Jan 20 18:57:09 2005 +0000
+++ b/station_cmd.c	Thu Jan 20 22:19:34 2005 +0000
@@ -1751,6 +1751,23 @@
 	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 @@
 
 	tile = st->dock_tile;
 
+	if (CheckShipsOnBuoy(st))
+		return_cmd_error(STR_BUOY_IS_IN_USE);
+
 	if (!EnsureNoVehicle(tile))
 		return CMD_ERROR;