(svn r11717) -Fix [FS#1590]: make sure invalid players have all shares owned by PLAYER_SPECTATOR

This commit is contained in:
smatz
2007-12-28 18:25:30 +00:00
parent 40b5641eb4
commit 13ffc5b581
3 changed files with 25 additions and 2 deletions

View File

@@ -2239,14 +2239,33 @@ bool AfterLoadGame()
}
}
/* Update go to buoy orders because they are just waypoints */
if (CheckSavegameVersion(84)) {
/* Update go to buoy orders because they are just waypoints */
Order *order;
FOR_ALL_ORDERS(order) {
if (order->type == OT_GOTO_STATION && GetStation(order->dest)->IsBuoy()) {
order->flags = 0;
}
}
/* Set all share owners to PLAYER_SPECTATOR for
* 1) all inactive players
* (when inactive players were stored in the savegame - TTD, TTDP and some
* *really* old revisions of OTTD; else it is already set in InitializePlayers())
* 2) shares that are owned by inactive players or self
* (caused by cheating players in earlier revisions) */
Player *p;
FOR_ALL_PLAYERS(p) {
if (!p->is_active) {
for (uint i = 0; i < 4; i++) { p->share_owners[i] = PLAYER_SPECTATOR; }
} else {
for (uint i = 0; i < 4; i++) {
PlayerID o = p->share_owners[i];
if (o == PLAYER_SPECTATOR) continue;
if (!IsValidPlayer(o) || o == p->index || !GetPlayer(o)->is_active) p->share_owners[i] = PLAYER_SPECTATOR;
}
}
}
}
return InitializeWindowsAndCaches();