void Battle::OnUserBattleStatusUpdated( User &user, UserBattleStatus status ) { if ( IsFounderMe() ) { if ( ( &user != &GetMe() ) && !status.IsBot() && ( m_opts.rankneeded != UserStatus::RANK_1 ) && !status.spectator ) { if ( m_opts.rankneeded > UserStatus::RANK_1 && user.GetStatus().rank < m_opts.rankneeded ) { DoAction( _T("Rank limit autospec: ") + user.GetNick() ); ForceSpectator( user, true ); } else if ( m_opts.rankneeded < UserStatus::RANK_1 && user.GetStatus().rank > ( -m_opts.rankneeded - 1 ) ) { DoAction( _T("Rank limit autospec: ") + user.GetNick() ); ForceSpectator( user, true ); } } UserBattleStatus previousstatus = user.BattleStatus(); if ( m_opts.lockexternalbalancechanges ) { if ( previousstatus.team != status.team ) { ForceTeam( user, previousstatus.team ); status.team = previousstatus.team; } if ( previousstatus.ally != status.ally ) { ForceAlly( user, previousstatus.ally ); status.ally = previousstatus.ally; } } } IBattle::OnUserBattleStatusUpdated( user, status ); if ( status.handicap != 0 ) { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , ( _T("Warning: user ") + user.GetNick() + _T(" got bonus ") ) << status.handicap ) ); } if ( IsFounderMe() ) { if ( ShouldAutoStart() ) { if ( sett().GetBattleLastAutoStartState() ) { if ( !spring().IsRunning() ) StartHostedBattle(); } } } if ( !GetMe().BattleStatus().spectator ) SetAutoUnspec(false); // we don't need auto unspec anymore ShouldAutoUnspec(); #ifndef SL_QT_MODE ui().OnUserBattleStatus( *this, user ); #endif }
void IBattle::OnUserBattleStatusUpdated( User &user, UserBattleStatus status ) { UserBattleStatus previousstatus = user.BattleStatus(); user.UpdateBattleStatus( status ); unsigned int oldspeccount = m_opts.spectators; m_opts.spectators = 0; m_players_sync = 0; m_players_ready = 0; m_players_ok = 0; m_teams_sizes.clear(); m_ally_sizes.clear(); for ( unsigned int i = 0; i < GetNumUsers(); i++ ) { User& loopuser = GetUser( i ); UserBattleStatus& loopstatus = loopuser.BattleStatus(); if ( loopstatus.spectator ) m_opts.spectators++; if ( !loopstatus.IsBot() ) { if ( !loopstatus.spectator ) { if ( loopstatus.ready && loopstatus.spectator ) m_players_ready++; if ( loopstatus.sync ) m_players_sync++; if ( loopstatus.ready && loopstatus.sync ) m_players_ok++; PlayerJoinedTeam( loopstatus.team ); PlayerJoinedAlly( loopstatus.ally ); } } } if ( oldspeccount != m_opts.spectators ) { if ( IsFounderMe() ) SendHostInfo( HI_Spectators ); } if ( !status.IsBot() ) { if ( ( status.ready && status.sync ) || status.spectator ) { std::map<wxString, time_t>::iterator itor = m_ready_up_map.find( user.GetNick() ); if ( itor != m_ready_up_map.end() ) { m_ready_up_map.erase( itor ); } } if ( ( !status.ready || !status.sync ) && !status.spectator ) { std::map<wxString, time_t>::iterator itor = m_ready_up_map.find( user.GetNick() ); if ( itor == m_ready_up_map.end() ) { m_ready_up_map[user.GetNick()] = time(0); } } } }