@ -595,10 +595,10 @@ void StartupCompanies()
}
/** Start a new competitor company if possible. */
static void MaybeStartNewCompany ( )
static bool MaybeStartNewCompany ( )
{
# ifdef ENABLE_NETWORK
if ( _networking & & Company : : GetNumItems ( ) > = _settings_client . network . max_companies ) return ;
if ( _networking & & Company : : GetNumItems ( ) > = _settings_client . network . max_companies ) return false ;
# endif /* ENABLE_NETWORK */
Company * c ;
@ -612,8 +612,10 @@ static void MaybeStartNewCompany()
if ( n < ( uint ) _settings_game . difficulty . max_no_competitors ) {
/* Send a command to all clients to start up a new AI.
* Works fine for Multiplayer and Singleplayer */
DoCommandP( 0 , 1 | INVALID_COMPANY < < 16 , 0 , CMD_COMPANY_CTRL ) ;
return DoCommandP( 0 , 1 | INVALID_COMPANY < < 16 , 0 , CMD_COMPANY_CTRL ) ;
}
return false ;
}
/** Initialize the pool of companies. */
@ -714,11 +716,15 @@ void OnTick_Companies()
}
if ( _next_competitor_start = = 0 ) {
_next_competitor_start = AI : : GetStartNextTime ( ) * DAY_TICKS ;
/* AI::GetStartNextTime() can return 0. */
_next_competitor_start = max ( 1 , AI : : GetStartNextTime ( ) * DAY_TICKS ) ;
}
if ( AI : : CanStartNew ( ) & & _game_mode ! = GM_MENU & & - - _next_competitor_start = = 0 ) {
MaybeStartNewCompany ( ) ;
if ( _game_mode ! = GM_MENU & & AI : : CanStartNew ( ) & & - - _next_competitor_start = = 0 ) {
/* Allow multiple AIs to possibly start in the same tick. */
do {
if ( ! MaybeStartNewCompany ( ) ) break ;
} while ( AI : : GetStartNextTime ( ) = = 0 ) ;
}
_cur_company_tick_index = ( _cur_company_tick_index + 1 ) % MAX_COMPANIES ;