Changeset - r25970:7acdd433f2c3
[Not reviewed]
master
0 1 0
SamuXarick - 3 years ago 2021-09-18 11:25:07
43006711+SamuXarick@users.noreply.github.com
Fix #9521: Don't load at just removed docks that were part of a multi-dock station (#9524)
1 file changed with 18 insertions and 13 deletions:
0 comments (0 inline, 0 general)
src/station_cmd.cpp
Show inline comments
 
@@ -2720,19 +2720,24 @@ static CommandCost RemoveDock(TileIndex 
 
		ClearDockingTilesCheckingNeighbours(tile1);
 
		ClearDockingTilesCheckingNeighbours(tile2);
 

	
 
		/* 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. */
 
		if (!(st->facilities & FACIL_DOCK)) {
 
			for (Ship *s : Ship::Iterate()) {
 
				if (s->current_order.IsType(OT_LOADING) && s->current_order.GetDestination() == st->index) {
 
					s->LeaveStation();
 
				}
 

	
 
				if (s->current_order.IsType(OT_GOTO_STATION) && s->current_order.GetDestination() == st->index) {
 
					s->SetDestTile(s->GetOrderStationLocation(st->index));
 
				}
 
		for (Ship *s : Ship::Iterate()) {
 
			/* Find all ships going to our dock. */
 
			if (s->current_order.GetDestination() != st->index) {
 
				continue;
 
			}
 

	
 
			/* Find ships that are marked as "loading" but are no longer on a
 
			 * docking tile. Force them to leave the station (as they were loading
 
			 * on the removed dock). */
 
			if (s->current_order.IsType(OT_LOADING) && !(IsDockingTile(s->tile) && IsShipDestinationTile(s->tile, st->index))) {
 
				s->LeaveStation();
 
			}
 

	
 
			/* If we no longer have a dock, mark the order as invalid and send
 
			 * the ship to the next order (or, if there is none, make it
 
			 * wander the world). */
 
			if (s->current_order.IsType(OT_GOTO_STATION) && !(st->facilities & FACIL_DOCK)) {
 
				s->SetDestTile(s->GetOrderStationLocation(st->index));
 
			}
 
		}
 
	}
0 comments (0 inline, 0 general)