Changeset - r4260:59348b953ade
[Not reviewed]
master
0 3 0
Darkvater - 18 years ago 2006-08-14 11:44:19
darkvater@openttd.org
(svn r5886) -Fix [FS#273]: Incomplete removal of player owned property due to lack of money.
3 files changed with 30 insertions and 25 deletions:
0 comments (0 inline, 0 general)
economy.c
Show inline comments
 
@@ -244,6 +244,12 @@ void ChangeOwnershipOfPlayerItems(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,25 +261,24 @@ void ChangeOwnershipOfPlayerItems(Player
 
	}
 

	
 
	/* Take care of rating in towns */
 
	{ Town *t;
 
		if (new_player != OWNER_SPECTATOR) {
 
			FOR_ALL_TOWNS(t) {
 
				/* If a player takes over, give the ratings to that player. */
 
				if (IsValidTown(t) && HASBIT(t->have_ratings, old_player)) {
 
					if (HASBIT(t->have_ratings, new_player)) {
 
						// use max of the two ratings.
 
						t->ratings[new_player] = max(t->ratings[new_player], t->ratings[old_player]);
 
					} else {
 
						SETBIT(t->have_ratings, new_player);
 
						t->ratings[new_player] = t->ratings[old_player];
 
					}
 
	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)) {
 
				if (HASBIT(t->have_ratings, new_player)) {
 
					// use max of the two ratings.
 
					t->ratings[new_player] = max(t->ratings[new_player], t->ratings[old_player]);
 
				} else {
 
					SETBIT(t->have_ratings, new_player);
 
					t->ratings[new_player] = t->ratings[old_player];
 
				}
 
			}
 

	
 
				/* Reset ratings for the town */
 
				if (IsValidTown(t)) {
 
					t->ratings[old_player] = 500;
 
					CLRBIT(t->have_ratings, old_player);
 
				}
 
			/* Reset ratings for the town */
 
			if (IsValidTown(t)) {
 
				t->ratings[old_player] = 500;
 
				CLRBIT(t->have_ratings, old_player);
 
			}
 
		}
 
	}
 
@@ -435,8 +440,7 @@ static void PlayersCheckBankrupt(Player 
 
				}
 
#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;
openttd.c
Show inline comments
 
@@ -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
players.c
Show inline comments
 
@@ -913,7 +913,6 @@ int32 CmdPlayerCtrl(TileIndex tile, uint
 

	
 
			/* Remove the company */
 
			ChangeOwnershipOfPlayerItems(p->index, OWNER_SPECTATOR);
 
			p->money64 = p->player_money = 100000000; // XXX - wtf?
 
			p->is_active = false;
 
		}
 
		RemoveAllEngineReplacementForPlayer(p);
0 comments (0 inline, 0 general)