(svn r15588) -Fix: change owner of waypoints and deleted stations when merging companies or when a company benkrupts

pull/155/head
smatz 15 years ago
parent 1362d2c16b
commit e7c2479216

@ -398,6 +398,24 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
UpdateSignalsInBuffer();
}
/* convert owner of stations (including deleted ones, but excluding buoys) */
Station *st;
FOR_ALL_STATIONS(st) {
if (st->owner == old_owner) {
/* if a company goes bankrupt, set owner to OWNER_NONE so the sign doesn't disappear immediately
* also, drawing station window would cause reading invalid company's colour */
st->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner;
}
}
/* do the same for waypoints (we need to do this here so deleted waypoints are converted too) */
Waypoint *wp;
FOR_ALL_WAYPOINTS(wp) {
if (wp->owner == old_owner) {
wp->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner;
}
}
/* In all cases clear replace engine rules.
* Even if it was copied, it could interfere with new owner's rules */
RemoveAllEngineReplacementForCompany(GetCompany(old_owner));

@ -1615,14 +1615,6 @@ bool AfterLoadGame()
}
}
}
/* Give owners to waypoints, based on rail tracks it is sitting on.
* If none is available, specify OWNER_NONE */
Waypoint *wp;
FOR_ALL_WAYPOINTS(wp) {
Owner owner = (IsRailWaypointTile(wp->xy) ? GetTileOwner(wp->xy) : OWNER_NONE);
wp->owner = IsValidCompanyID(owner) ? owner : OWNER_NONE;
}
}
if (CheckSavegameVersion(102)) {
@ -1722,6 +1714,26 @@ bool AfterLoadGame()
}
}
if (CheckSavegameVersion(114)) {
/* There could be (deleted) stations with invalid owner, set owner to OWNER NONE.
* The conversion affects oil rigs and buoys too, but it doesn't matter as
* they have st->owner == OWNER_NONE already. */
Station *st;
FOR_ALL_STATIONS(st) {
if (!IsValidCompanyID(st->owner)) st->owner = OWNER_NONE;
}
/* Give owners to waypoints, based on rail tracks it is sitting on.
* If none is available, specify OWNER_NONE.
* This code was in CheckSavegameVersion(101) in the past, but in some cases,
* the owner of waypoints could be incorrect. */
Waypoint *wp;
FOR_ALL_WAYPOINTS(wp) {
Owner owner = IsTileType(wp->xy, MP_RAILWAY) ? GetTileOwner(wp->xy) : OWNER_NONE;
wp->owner = IsValidCompanyID(owner) ? owner : OWNER_NONE;
}
}
GamelogPrintDebug(1);
bool ret = InitializeWindowsAndCaches();

@ -3120,10 +3120,8 @@ static void ChangeTileOwner_Station(TileIndex tile, Owner old_owner, Owner new_o
if (!IsTileOwner(tile, old_owner)) return;
if (new_owner != INVALID_OWNER) {
Station *st = GetStationByTile(tile);
/* for buoys, owner of tile is owner of water, st->owner == OWNER_NONE */
SetTileOwner(tile, new_owner);
if (!IsBuoy(tile)) st->owner = new_owner; // do not set st->owner for buoys
InvalidateWindowClassesData(WC_STATION_LIST, 0);
} else {
if (IsDriveThroughStopTile(tile)) {

Loading…
Cancel
Save