//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFPlayerResource::UpdatePlayerData( void ) { int i; BaseClass::UpdatePlayerData(); for ( i = 1 ; i <= gpGlobals->maxClients; i++ ) { CTFPlayer *pPlayer = (CTFPlayer*)UTIL_PlayerByIndex( i ); if ( pPlayer && pPlayer->IsConnected() ) { PlayerStats_t *pPlayerStats = CTF_GameStats.FindPlayerStats( pPlayer ); if ( pPlayerStats ) { m_iMaxHealth.Set( i, pPlayer->GetPlayerClass()->GetMaxHealth() ); m_iPlayerClass.Set( i, pPlayer->GetPlayerClass()->GetClassIndex() ); int iTotalScore = CTFGameRules::CalcPlayerScore( &pPlayerStats->statsAccumulated ); m_iTotalScore.Set( i, iTotalScore ); Vector vecColor = pPlayer->m_vecPlayerColor; m_iColors.Set(i, Vector(vecColor.x, vecColor.y, vecColor.z)); //Msg("Server %f %f %f\n", m_iColors.Get(i).x, m_iColors.Get(i).y, m_iColors.Get(i).z); m_iKillstreak.Set(i, pPlayer->m_Shared.GetKillstreak()); } } } }
//----------------------------------------------------------------------------- // Purpose: Gets a value from an array member //----------------------------------------------------------------------------- int CTFPlayerResource::GetTotalScore( int iIndex ) { CTFPlayer *pPlayer = (CTFPlayer*)UTIL_PlayerByIndex( iIndex ); if ( pPlayer && pPlayer->IsConnected() ) { return m_iTotalScore[iIndex]; } return 0; }
//----------------------------------------------------------------------------- // Purpose: Per-frame handler //----------------------------------------------------------------------------- void CTFGameStats::FrameUpdatePostEntityThink() { // see if any players have stat changes we need to send for( int iPlayerIndex = 1 ; iPlayerIndex <= MAX_PLAYERS; iPlayerIndex++ ) { CTFPlayer *pPlayer = ToTFPlayer( UTIL_PlayerByIndex( iPlayerIndex ) ); if ( pPlayer && pPlayer->IsConnected() && pPlayer->IsAlive() ) { PlayerStats_t &stats = m_aPlayerStats[pPlayer->entindex()]; // if there are any updated stats for this player and we haven't sent a stat update for this player in the last second, // send one now. if ( ( stats.iStatsChangedBits > 0 ) && ( gpGlobals->curtime >= stats.m_flTimeLastSend + 1.0f ) ) { SendStatsToPlayer( pPlayer, STATMSG_UPDATE ); } } } }