mirror of https://github.com/OpenTTD/OpenTTD
(svn r5886) -Fix [FS#273]: Incomplete removal of player owned property due to lack of money.
parent
4b030f190c
commit
01cd75cc10
12
economy.c
12
economy.c
|
@ -244,6 +244,12 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
|
|||
PlayerID old = _current_player;
|
||||
_current_player = old_player;
|
||||
|
||||
/* Temporarily increase the player's money, to be sure that
|
||||
* removing his/her property doesn't fail because of lack of money */
|
||||
if (new_player == OWNER_SPECTATOR) {
|
||||
GetPlayer(old_player)->money64 = ((uint64)-1)>>1; // jackpot ;p
|
||||
}
|
||||
|
||||
if (new_player == OWNER_SPECTATOR) {
|
||||
Subsidy *s;
|
||||
|
||||
|
@ -255,8 +261,8 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
|
|||
}
|
||||
|
||||
/* Take care of rating in towns */
|
||||
{ Town *t;
|
||||
if (new_player != OWNER_SPECTATOR) {
|
||||
Town *t;
|
||||
FOR_ALL_TOWNS(t) {
|
||||
/* If a player takes over, give the ratings to that player. */
|
||||
if (IsValidTown(t) && HASBIT(t->have_ratings, old_player)) {
|
||||
|
@ -276,7 +282,6 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
int num_train = 0;
|
||||
|
@ -435,8 +440,7 @@ static void PlayersCheckBankrupt(Player *p)
|
|||
}
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
||||
// Convert everything the player owns to NO_OWNER
|
||||
p->money64 = p->player_money = 100000000;
|
||||
/* Remove the player */
|
||||
ChangeOwnershipOfPlayerItems(owner, OWNER_SPECTATOR);
|
||||
// Register the player as not-active
|
||||
p->is_active = false;
|
||||
|
|
12
openttd.c
12
openttd.c
|
@ -771,16 +771,18 @@ void SwitchMode(int new_mode)
|
|||
|
||||
case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
|
||||
if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR)) {
|
||||
PlayerID i;
|
||||
Player *p;
|
||||
|
||||
_opt_ptr = &_opt;
|
||||
|
||||
_local_player = OWNER_NONE;
|
||||
_generating_world = true;
|
||||
// delete all players.
|
||||
for (i = 0; i != MAX_PLAYERS; i++) {
|
||||
ChangeOwnershipOfPlayerItems(i, OWNER_SPECTATOR);
|
||||
_players[i].is_active = false;
|
||||
/* Delete all players */
|
||||
FOR_ALL_PLAYERS(p) {
|
||||
if (p->is_active) {
|
||||
ChangeOwnershipOfPlayerItems(p->index, OWNER_SPECTATOR);
|
||||
p->is_active = false;
|
||||
}
|
||||
}
|
||||
_generating_world = false;
|
||||
// delete all stations owned by a player
|
||||
|
|
|
@ -913,7 +913,6 @@ int32 CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
|
||||
/* Remove the company */
|
||||
ChangeOwnershipOfPlayerItems(p->index, OWNER_SPECTATOR);
|
||||
p->money64 = p->player_money = 100000000; // XXX - wtf?
|
||||
p->is_active = false;
|
||||
}
|
||||
RemoveAllEngineReplacementForPlayer(p);
|
||||
|
|
Loading…
Reference in New Issue