mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r15588) -Fix: change owner of waypoints and deleted stations when merging companies or when a company benkrupts
This commit is contained in:
parent
a41b143e58
commit
3fdac6f702
|
@ -398,6 +398,24 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||||
UpdateSignalsInBuffer();
|
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.
|
/* In all cases clear replace engine rules.
|
||||||
* Even if it was copied, it could interfere with new owner's rules */
|
* Even if it was copied, it could interfere with new owner's rules */
|
||||||
RemoveAllEngineReplacementForCompany(GetCompany(old_owner));
|
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)) {
|
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);
|
GamelogPrintDebug(1);
|
||||||
|
|
||||||
bool ret = InitializeWindowsAndCaches();
|
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 (!IsTileOwner(tile, old_owner)) return;
|
||||||
|
|
||||||
if (new_owner != INVALID_OWNER) {
|
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);
|
SetTileOwner(tile, new_owner);
|
||||||
if (!IsBuoy(tile)) st->owner = new_owner; // do not set st->owner for buoys
|
|
||||||
InvalidateWindowClassesData(WC_STATION_LIST, 0);
|
InvalidateWindowClassesData(WC_STATION_LIST, 0);
|
||||||
} else {
|
} else {
|
||||||
if (IsDriveThroughStopTile(tile)) {
|
if (IsDriveThroughStopTile(tile)) {
|
||||||
|
|
Loading…
Reference in New Issue