summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2012-01-02 20:39:18 +0000
committerrubidium <rubidium@openttd.org>2012-01-02 20:39:18 +0000
commitcaa5762636a703be9c0573e33bfff53a68ac2c6a (patch)
tree98005ff4207a8077c232e10914ff792729e2054e /src
parent3655d5105b8cec5b3a2de711b8da66f8ed83a085 (diff)
downloadopenttd-caa5762636a703be9c0573e33bfff53a68ac2c6a.tar.xz
(svn r23717) -Fix [FS#4927]: ships going to wrong dock location when moving the dock while the game is paused
Diffstat (limited to 'src')
-rw-r--r--src/station_cmd.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 2086f3150..80cbaad03 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -18,6 +18,7 @@
#include "town.h"
#include "news_func.h"
#include "train.h"
+#include "ship.h"
#include "roadveh.h"
#include "industry.h"
#include "newgrf_cargo.h"
@@ -2521,6 +2522,8 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags)
CommandCost ret = CheckOwnership(st->owner);
if (ret.Failed()) return ret;
+ TileIndex docking_location = TILE_ADD(st->dock_tile, ToTileIndexDiff(GetDockOffset(st->dock_tile)));
+
TileIndex tile1 = st->dock_tile;
TileIndex tile2 = tile1 + TileOffsByDiagDir(GetDockDirection(tile1));
@@ -2546,6 +2549,18 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags)
st->UpdateVirtCoord();
st->RecomputeIndustriesNear();
DeleteStationIfEmpty(st);
+
+ /* All ships that were going to our station, can't go to it anymore.
+ * Just clear the order, then automatically the next appropriate order
+ * will be selected and in case of no appropriate order it will just
+ * wander around the world. */
+ Ship *s;
+ FOR_ALL_SHIPS(s) {
+ if (s->dest_tile == docking_location) {
+ s->dest_tile = 0;
+ s->current_order.Free();
+ }
+ }
}
return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_CLEAR_STATION_DOCK]);