Changeset - r18978:7e76e962d9b9
[Not reviewed]
master
0 3 0
michi_cc - 12 years ago 2012-01-22 22:21:21
michi_cc@openttd.org
(svn r23844) -Fix (r23414): Infrastructure count for stations wasn't updated properly on company takeover. And don't count buoys while loading a game either.
3 files changed with 38 insertions and 10 deletions:
0 comments (0 inline, 0 general)
src/economy.cpp
Show inline comments
 
@@ -471,6 +471,9 @@ void ChangeOwnershipOfCompanyItems(Owner
 
		UpdateSignalsInBuffer();
 
	}
 

	
 
	/* Add airport infrastructure count of the old company to the new one. */
 
	if (new_owner != INVALID_OWNER) Company::Get(new_owner)->infrastructure.airport += Company::Get(old_owner)->infrastructure.airport;
 

	
 
	/* convert owner of stations (including deleted ones, but excluding buoys) */
 
	Station *st;
 
	FOR_ALL_STATIONS(st) {
src/saveload/company_sl.cpp
Show inline comments
 
@@ -139,7 +139,7 @@ void AfterLoadCompanyStats()
 

	
 
			case MP_STATION:
 
				c = Company::GetIfValid(GetTileOwner(tile));
 
				if (c != NULL && GetStationType(tile) != STATION_AIRPORT) c->infrastructure.station++;
 
				if (c != NULL && GetStationType(tile) != STATION_AIRPORT && !IsBuoy(tile)) c->infrastructure.station++;
 

	
 
				switch (GetStationType(tile)) {
 
					case STATION_RAIL:
src/station_cmd.cpp
Show inline comments
 
@@ -3612,16 +3612,41 @@ static void ChangeTileOwner_Station(Tile
 
		Company *old_company = Company::Get(old_owner);
 
		Company *new_company = Company::Get(new_owner);
 

	
 
		if ((IsRailWaypoint(tile) || IsRailStation(tile)) && !IsStationTileBlocked(tile)) {
 
			old_company->infrastructure.rail[GetRailType(tile)]--;
 
			new_company->infrastructure.rail[GetRailType(tile)]++;
 
		/* Update counts for underlying infrastructure. */
 
		switch (GetStationType(tile)) {
 
			case STATION_RAIL:
 
			case STATION_WAYPOINT:
 
				if (!IsStationTileBlocked(tile)) {
 
					old_company->infrastructure.rail[GetRailType(tile)]--;
 
					new_company->infrastructure.rail[GetRailType(tile)]++;
 
				}
 
				break;
 

	
 
			case STATION_BUS:
 
			case STATION_TRUCK:
 
				if (!IsDriveThroughStopTile(tile)) {
 
					/* Drive-through stops were already handled above. */
 
					old_company->infrastructure.road[FIND_FIRST_BIT(GetRoadTypes(tile))] -= 2;
 
					new_company->infrastructure.road[FIND_FIRST_BIT(GetRoadTypes(tile))] += 2;
 
				}
 
				break;
 

	
 
			case STATION_BUOY:
 
			case STATION_DOCK:
 
				if (GetWaterClass(tile) == WATER_CLASS_CANAL) {
 
					old_company->infrastructure.water--;
 
					new_company->infrastructure.water++;
 
				}
 
				break;
 

	
 
			default:
 
				break;
 
		}
 
		if (IsRoadStop(tile) && !IsDriveThroughStopTile(tile)) {
 
			RoadType rt;
 
			FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) {
 
				old_company->infrastructure.road[rt] -= 2;
 
				new_company->infrastructure.road[rt] += 2;
 
			}
 

	
 
		/* Update station tile count. */
 
		if (!IsBuoy(tile) && !IsAirport(tile)) {
 
			old_company->infrastructure.station--;
 
			new_company->infrastructure.station++;
 
		}
 

	
 
		/* for buoys, owner of tile is owner of water, st->owner == OWNER_NONE */
0 comments (0 inline, 0 general)