//----------------------------------------------------------------------------- // Purpose: Resets the list of players //----------------------------------------------------------------------------- void CSpectatorMenu::Update( void ) { int itemID = 0; IGameResources *gr = GameResources(); Reset(); if( m_iDuckKey < 0 ) { m_iDuckKey = gameuifuncs->GetEngineKeyCodeForBind( "duck" ); } if ( !gr ) return; int iPlayerIndex; for ( iPlayerIndex = 1 ; iPlayerIndex <= gpGlobals->maxClients; iPlayerIndex++ ) { // does this slot in the array have a name? if ( !gr->IsConnected( iPlayerIndex ) ) continue; if ( gr->IsLocalPlayer( iPlayerIndex ) ) continue; if ( !gr->IsAlive( iPlayerIndex ) ) continue; wchar_t playerText[ 80 ], playerName[ 64 ], *team, teamText[ 64 ]; char localizeTeamName[64]; localize()->ConvertANSIToUnicode( UTIL_SafeName( gr->GetPlayerName(iPlayerIndex) ), playerName, sizeof( playerName ) ); const char * teamname = gr->GetTeamName( gr->GetTeam(iPlayerIndex) ); if ( teamname ) { Q_snprintf( localizeTeamName, sizeof( localizeTeamName ), "#%s", teamname ); team=localize()->Find( localizeTeamName ); if ( !team ) { localize()->ConvertANSIToUnicode( teamname , teamText, sizeof( teamText ) ); team = teamText; } localize()->ConstructString( playerText, sizeof( playerText ), localize()->Find( "#Spec_PlayerItem_Team" ), 2, playerName, team ); } else { localize()->ConstructString( playerText, sizeof( playerText ), localize()->Find( "#Spec_PlayerItem" ), 1, playerName ); } KeyValues *kv = new KeyValues("UserData", "player", gr->GetPlayerName( iPlayerIndex ) ); itemID = PlayerAddItem( itemID, playerText, kv ); // -1 means a new slot kv->deleteThis(); } // make sure the player combo box is up to date int playernum = GetSpectatorTarget(); const char *selectedPlayerName = gr->GetPlayerName( playernum ); for ( iPlayerIndex=0; iPlayerIndex<m_pPlayerList->GetItemCount(); ++iPlayerIndex ) { KeyValues *kv = m_pPlayerList->GetItemUserData( iPlayerIndex ); if ( kv && FStrEq( kv->GetString( "player" ), selectedPlayerName ) ) { m_pPlayerList->ActivateItemByRow( iPlayerIndex ); m_pPlayerList->SetText( selectedPlayerName ); break; } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CClientScoreBoardDialog::UpdatePlayerInfo() { m_iSectionId = 0; // 0'th row is a header int selectedRow = -1; // walk all the players and make sure they're in the scoreboard for ( int i = 1; i <= gpGlobals->maxClients; ++i ) { IGameResources *gr = GameResources(); if ( gr && gr->IsConnected( i ) ) { // add the player to the list KeyValues *playerData = new KeyValues("data"); GetPlayerScoreInfo( i, playerData ); UpdatePlayerAvatar( i, playerData ); const char *oldName = playerData->GetString("name",""); int bufsize = strlen(oldName) * 2 + 1; char *newName = (char *)_alloca( bufsize ); UTIL_MakeSafeName( oldName, newName, bufsize ); playerData->SetString("name", newName); int itemID = FindItemIDForPlayerIndex( i ); int sectionID = gr->GetTeam( i ); if ( gr->IsLocalPlayer( i ) ) { selectedRow = itemID; } if (itemID == -1) { // add a new row itemID = m_pPlayerList->AddItem( sectionID, playerData ); } else { // modify the current row m_pPlayerList->ModifyItem( itemID, sectionID, playerData ); } // set the row color based on the players team m_pPlayerList->SetItemFgColor( itemID, gr->GetTeamColor( sectionID ) ); playerData->deleteThis(); } else { // remove the player int itemID = FindItemIDForPlayerIndex( i ); if (itemID != -1) { m_pPlayerList->RemoveItem(itemID); } } } if ( selectedRow != -1 ) { m_pPlayerList->SetSelectedItem(selectedRow); } }
void CSpectatorMenu::Update( void ) { IGameResources *gr = GameResources(); Reset(); if ( m_iDuckKey == BUTTON_CODE_INVALID ) { m_iDuckKey = gameuifuncs->GetButtonCodeForBind( "duck" ); } if ( !gr ) return; int iPlayerIndex; for ( iPlayerIndex = 1 ; iPlayerIndex <= gpGlobals->maxClients; iPlayerIndex++ ) { // does this slot in the array have a name? if ( !gr->IsConnected( iPlayerIndex ) ) continue; if ( gr->IsLocalPlayer( iPlayerIndex ) ) continue; if ( !gr->IsAlive( iPlayerIndex ) ) continue; wchar_t playerText[ 80 ], playerName[ 64 ], *team, teamText[ 64 ]; char localizeTeamName[64]; char szPlayerIndex[16]; g_pVGuiLocalize->ConvertANSIToUnicode( UTIL_SafeName( gr->GetPlayerName(iPlayerIndex) ), playerName, sizeof( playerName ) ); const char * teamname = gr->GetTeamName( gr->GetTeam(iPlayerIndex) ); if ( teamname ) { Q_snprintf( localizeTeamName, sizeof( localizeTeamName ), "#%s", teamname ); team=g_pVGuiLocalize->Find( localizeTeamName ); if ( !team ) { g_pVGuiLocalize->ConvertANSIToUnicode( teamname , teamText, sizeof( teamText ) ); team = teamText; } g_pVGuiLocalize->ConstructString( playerText, sizeof( playerText ), g_pVGuiLocalize->Find( "#Spec_PlayerItem_Team" ), 2, playerName, team ); } else { g_pVGuiLocalize->ConstructString( playerText, sizeof( playerText ), g_pVGuiLocalize->Find( "#Spec_PlayerItem" ), 1, playerName ); } Q_snprintf( szPlayerIndex, sizeof( szPlayerIndex ), "%d", iPlayerIndex ); KeyValues *kv = new KeyValues( "UserData", "player", gr->GetPlayerName( iPlayerIndex ), "index", szPlayerIndex ); m_pPlayerList->AddItem( playerText, kv ); kv->deleteThis(); } // make sure the player combo box is up to date int playernum = GetSpectatorTarget(); const char *selectedPlayerName = gr->GetPlayerName( playernum ); for ( iPlayerIndex=0; iPlayerIndex<m_pPlayerList->GetItemCount(); ++iPlayerIndex ) { KeyValues *kv = m_pPlayerList->GetItemUserData( iPlayerIndex ); if ( kv && FStrEq( kv->GetString( "player" ), selectedPlayerName ) ) { m_pPlayerList->ActivateItemByRow( iPlayerIndex ); break; } } //============================================================================= // HPE_BEGIN: // [pfreese] make sure the view mode combo box is up to date - the spectator // mode can be changed multiple ways //============================================================================= int specmode = GetSpectatorMode(); m_pViewOptions->SetText(s_SpectatorModes[specmode]); //============================================================================= // HPE_END //============================================================================= }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CHL2WarsScoreboard::UpdatePlayerInfo() { m_iSectionId = 0; // 0'th row is a header int selectedRow = -1; // walk all the players and make sure they're in the scoreboard for ( int i = 1; i <= gpGlobals->maxClients; ++i ) { IGameResources *gr = GameResources(); if ( gr && gr->IsConnected( i ) ) { // add the player to the list KeyValues *playerData = new KeyValues("data"); GetPlayerScoreInfo( i, playerData ); UpdatePlayerAvatar( i, playerData ); const char *oldName = playerData->GetString("name",""); char newName[MAX_PLAYER_NAME_LENGTH]; UTIL_MakeSafeName( oldName, newName, MAX_PLAYER_NAME_LENGTH ); playerData->SetString("name", newName); int itemID = FindItemIDForPlayerIndex( i ); int sectionID = gr->GetTeam( i ); if ( gr->IsLocalPlayer( i ) ) { selectedRow = itemID; } if (itemID == -1) { // add a new row itemID = m_pPlayerList->AddItem( sectionID, playerData ); } else { // modify the current row m_pPlayerList->ModifyItem( itemID, sectionID, playerData ); } m_pPlayerList->SetItemFont( itemID, m_hPlayerFont ); // set the row color based on the players team int ownernumber = g_PR->GetOwnerNumber(i); try { m_pPlayerList->SetItemFgColor( itemID, boost::python::extract<Color>( SrcPySystem()->Get("_GetColorForOwnerNumber", "playermgr")(ownernumber) ) ); } catch(...) { m_pPlayerList->SetItemFgColor( itemID, gr->GetTeamColor( gr->GetTeam( i ) ) ); } playerData->deleteThis(); } else { // remove the player int itemID = FindItemIDForPlayerIndex( i ); if (itemID != -1) { m_pPlayerList->RemoveItem(itemID); } } } if ( selectedRow != -1 ) { m_pPlayerList->SetSelectedItem(selectedRow); } }