File diff r5066:785ea87e93a4 → r5067:7312b67c8cc3
economy.c
Show inline comments
 
@@ -414,40 +414,51 @@ static void PlayersCheckBankrupt(Player 
 
			SetDParam(1, p->name_2);
 
			AddNewsItem( (StringID)(owner | NB_BBANKRUPT), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
 

	
 
			// If the player is human, and it is no network play, leave the player playing
 
			if (IsHumanPlayer(owner) && !_networking) {
 
				p->bankrupt_asked = 255;
 
				p->bankrupt_timeout = 0x456;
 
			} else {
 
			if (IsHumanPlayer(owner)) {
 
				/* XXX - If we are in offline mode, leave the player playing. Eg. there
 
				 * is no THE-END, otherwise mark the player as spectator to make sure
 
				 * he/she is no long in control of this company */
 
				if (!_networking) {
 
					p->bankrupt_asked = 0xFF;
 
					p->bankrupt_timeout = 0x456;
 
					break;
 
				} else if (owner == _local_player) {
 
					_local_player = _network_playas = PLAYER_SPECTATOR;
 
				}
 

	
 
#ifdef ENABLE_NETWORK
 
				/* If we are the server make sure it is clear that this player is not active */
 
				if (IsHumanPlayer(owner) && _network_server) {
 
				/* The server has to handle all administrative issues, for example
 
				 * updating and notifying all clients of what has happened */
 
				if (_network_server) {
 
					const NetworkClientState *cs;
 
					/* Find all clients that were in control of this company */
 
					NetworkClientInfo *ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX);
 

	
 
					/* The server has just gone belly-up, mark it as spectator */
 
					if (owner == ci->client_playas) {
 
						ci->client_playas = PLAYER_SPECTATOR;
 
						NetworkUpdateClientInfo(NETWORK_SERVER_INDEX);
 
					}
 

	
 
					/* Find all clients that were in control of this company,
 
					 * and mark them as spectator; broadcast this message to everyone */
 
					FOR_ALL_CLIENTS(cs) {
 
						NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs);
 
						ci = DEREF_CLIENT_INFO(cs);
 
						if (ci->client_playas == owner) {
 
							ci->client_playas = PLAYER_SPECTATOR;
 
							// Send the new info to all the clients
 
							NetworkUpdateClientInfo(_network_own_client_index);
 
							NetworkUpdateClientInfo(ci->client_index);
 
						}
 
					}
 
				}
 
				// Make sure the player no longer controls the company
 
				if (IsHumanPlayer(owner) && owner == _local_player) {
 
					// Switch the player to spectator..
 
					_local_player = PLAYER_SPECTATOR;
 
				}
 
#endif /* ENABLE_NETWORK */
 
			}
 

	
 
				/* Remove the player */
 
				ChangeOwnershipOfPlayerItems(owner, PLAYER_SPECTATOR);
 
				// Register the player as not-active
 
				p->is_active = false;
 
			/* Remove the player */
 
			ChangeOwnershipOfPlayerItems(owner, PLAYER_SPECTATOR);
 
			/* Register the player as not-active */
 
			p->is_active = false;
 

	
 
				if (!IsHumanPlayer(owner) && (!_networking || _network_server) && _ai.enabled)
 
					AI_PlayerDied(owner);
 
			}
 
			if (!IsHumanPlayer(owner) && (!_networking || _network_server) && _ai.enabled)
 
				AI_PlayerDied(owner);
 
		}
 
	}
 
}