mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-04 06:00:15 +00:00
(svn r24912) -Fix [FS#5389]: Upgrading bridges could steal road types. (adf88)
This commit is contained in:
parent
1ec4cf6ff1
commit
eda4cfeabe
@ -161,15 +161,17 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, D
|
|||||||
* Make a bridge ramp for roads.
|
* Make a bridge ramp for roads.
|
||||||
* @param t the tile to make a bridge ramp
|
* @param t the tile to make a bridge ramp
|
||||||
* @param o the new owner of the bridge ramp
|
* @param o the new owner of the bridge ramp
|
||||||
|
* @param owner_road the new owner of the road on the bridge
|
||||||
|
* @param owner_tram the new owner of the tram on the bridge
|
||||||
* @param bridgetype the type of bridge this bridge ramp belongs to
|
* @param bridgetype the type of bridge this bridge ramp belongs to
|
||||||
* @param d the direction this ramp must be facing
|
* @param d the direction this ramp must be facing
|
||||||
* @param r the road type of the bridge
|
* @param r the road type of the bridge
|
||||||
*/
|
*/
|
||||||
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, DiagDirection d, RoadTypes r)
|
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadTypes r)
|
||||||
{
|
{
|
||||||
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD, 0);
|
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD, 0);
|
||||||
SetRoadOwner(t, ROADTYPE_ROAD, o);
|
SetRoadOwner(t, ROADTYPE_ROAD, owner_road);
|
||||||
if (o != OWNER_TOWN) SetRoadOwner(t, ROADTYPE_TRAM, o);
|
if (owner_tram != OWNER_TOWN) SetRoadOwner(t, ROADTYPE_TRAM, owner_tram);
|
||||||
SetRoadTypes(t, r);
|
SetRoadTypes(t, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,18 +455,24 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u
|
|||||||
SetTunnelBridgeReservation(tile_end, pbs_reservation);
|
SetTunnelBridgeReservation(tile_end, pbs_reservation);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TRANSPORT_ROAD:
|
case TRANSPORT_ROAD: {
|
||||||
|
RoadTypes prev_roadtypes = IsBridgeTile(tile_start) ? GetRoadTypes(tile_start) : ROADTYPES_NONE;
|
||||||
if (c != NULL) {
|
if (c != NULL) {
|
||||||
/* Add all new road types to the company infrastructure counter. */
|
/* Add all new road types to the company infrastructure counter. */
|
||||||
RoadType new_rt;
|
RoadType new_rt;
|
||||||
FOR_EACH_SET_ROADTYPE(new_rt, roadtypes ^ (IsBridgeTile(tile_start) ? GetRoadTypes(tile_start) : ROADTYPES_NONE)) {
|
FOR_EACH_SET_ROADTYPE(new_rt, roadtypes ^ prev_roadtypes) {
|
||||||
/* A full diagonal road tile has two road bits. */
|
/* A full diagonal road tile has two road bits. */
|
||||||
Company::Get(owner)->infrastructure.road[new_rt] += (bridge_len + 2) * 2 * TUNNELBRIDGE_TRACKBIT_FACTOR;
|
Company::Get(owner)->infrastructure.road[new_rt] += (bridge_len + 2) * 2 * TUNNELBRIDGE_TRACKBIT_FACTOR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MakeRoadBridgeRamp(tile_start, owner, bridge_type, dir, roadtypes);
|
Owner owner_road = owner;
|
||||||
MakeRoadBridgeRamp(tile_end, owner, bridge_type, ReverseDiagDir(dir), roadtypes);
|
Owner owner_tram = owner;
|
||||||
|
if (HasBit(prev_roadtypes, ROADTYPE_ROAD)) owner_road = GetRoadOwner(tile_start, ROADTYPE_ROAD);
|
||||||
|
if (HasBit(prev_roadtypes, ROADTYPE_TRAM)) owner_tram = GetRoadOwner(tile_start, ROADTYPE_TRAM);
|
||||||
|
MakeRoadBridgeRamp(tile_start, owner, owner_road, owner_tram, bridge_type, dir, roadtypes);
|
||||||
|
MakeRoadBridgeRamp(tile_end, owner, owner_road, owner_tram, bridge_type, ReverseDiagDir(dir), roadtypes);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case TRANSPORT_WATER:
|
case TRANSPORT_WATER:
|
||||||
if (!IsBridgeTile(tile_start) && c != NULL) c->infrastructure.water += (bridge_len + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR;
|
if (!IsBridgeTile(tile_start) && c != NULL) c->infrastructure.water += (bridge_len + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR;
|
||||||
|
Loading…
Reference in New Issue
Block a user