(svn r3956) - Fix: [Multistop] Check the status of the destination road stop instead of a station's first road stop. This only has effect with road vehicle queuing disabled. Backport of r3663, r3681 from trunk 0.4.5
authorDarkvater
Sat, 18 Mar 2006 15:28:26 +0000
branch0.4.5
changeset 9926 af44c0a799ac
parent 9925 30810c6f84c6
child 9927 f38341625657
(svn r3956) - Fix: [Multistop] Check the status of the destination road stop instead of a station's first road stop. This only has effect with road vehicle queuing disabled. Backport of r3663, r3681 from trunk
roadveh_cmd.c
station.h
--- a/roadveh_cmd.c	Sat Mar 18 15:25:25 2006 +0000
+++ b/roadveh_cmd.c	Sat Mar 18 15:28:26 2006 +0000
@@ -1006,17 +1006,15 @@
 			/* Road depot */
 			bitmask |= _road_veh_fp_ax_or[GB(_m[tile].m5, 0, 2)];
 		}
-	} else if (IsTileType(tile, MP_STATION)) {
-		if (IsTileOwner(tile, OWNER_NONE) || IsTileOwner(tile, v->owner)) {
+	} else if (IsTileType(tile, MP_STATION) && IsRoadStationTile(tile)) {
+		if (IsTileOwner(tile, v->owner)) {
 			/* Our station */
-			const Station* st = GetStation(_m[tile].m2);
-			byte val = _m[tile].m5;
-			if (v->cargo_type != CT_PASSENGERS) {
-				if (IS_BYTE_INSIDE(val, 0x43, 0x47) && (_patches.roadveh_queue || st->truck_stops->status&3))
-					bitmask |= _road_veh_fp_ax_or[(val-0x43)&3];
-			} else {
-				if (IS_BYTE_INSIDE(val, 0x47, 0x4B) && (_patches.roadveh_queue || st->bus_stops->status&3))
-					bitmask |= _road_veh_fp_ax_or[(val-0x47)&3];
+			RoadStopType rstype = (v->cargo_type == CT_PASSENGERS) ? RS_BUS : RS_TRUCK;
+			if (GetRoadStopType(tile) == rstype) {
+				const RoadStop *rs = GetRoadStopByTile(tile, rstype);
+				if (rs != NULL && (_patches.roadveh_queue || GB(rs->status, 0, 2) != 0)) {
+					bitmask |= _road_veh_fp_ax_or[GetRoadStationDir(tile)];
+				}
 			}
 		}
 	}
--- a/station.h	Sat Mar 18 15:25:25 2006 +0000
+++ b/station.h	Sat Mar 18 15:28:26 2006 +0000
@@ -202,7 +202,7 @@
 uint32 GetCustomStationRelocation(const StationSpec *spec, const Station *st, byte ctype);
 
 RoadStop * GetRoadStopByTile(TileIndex tile, RoadStopType type);
-static inline int GetRoadStopType(TileIndex tile)
+static inline RoadStopType GetRoadStopType(TileIndex tile)
 {
 	return (_m[tile].m5 < 0x47) ? RS_TRUCK : RS_BUS;
 }