//----------------------------------------------------------------------------- // Purpose: Recalculate the internal scoreboard data //----------------------------------------------------------------------------- void ScorePanel::Update() { // Set the title if (gViewPort->m_szServerName) { char sz[MAX_SERVERNAME_LENGTH + 16]; sprintf(sz, " SCORES: %s", gViewPort->m_szServerName ); m_pTitleLabel->setText(sz); } _tablePanel->m_iRows = 0; gViewPort->GetAllPlayersInfo(); // Clear out sorts for (int i = 0; i < MAX_PLAYERS; i++) { _tablePanel->m_iSortedRows[i] = 0; _tablePanel->m_iIsATeam[i] = TEAM_NO; _tablePanel->m_bHasBeenSorted[i] = false; } // If it's not teamplay, sort all the players. Otherwise, sort the teams. if ( !gHUD.m_Teamplay ) SortPlayers( 0, NULL ); else SortTeams(); }
void CFolderJoin::UpdateGetAllData(HSURFACE hDestSurf) { // Update the ping stuff... SortPlayers(); HSTRING hStr = g_pLTClient->FormatString(IDS_STATUS_GETEXTRA, m_nNumServers, m_nNumServersListed); SetDummyStatusState(hStr, 1000); g_pLTClient->FreeString(hStr); }
//----------------------------------------------------------------------------- // Purpose: Recalculate the internal scoreboard data //----------------------------------------------------------------------------- void ScorePanel::Update() { // Set the title if (gViewPort->m_szServerName) { char sz[MAX_SERVERNAME_LENGTH + 16]; sprintf(sz, "%s", gViewPort->m_szServerName ); m_TitleLabel.setText(sz); } m_iRows = 0; gViewPort->GetAllPlayersInfo(); //Hide or show the QUEUE and WINS labels. if ( g_iArenaMode == TRUE ) { m_HeaderLabels[2].setVisible ( true ); m_HeaderLabels[3].setVisible ( true ); } else { m_HeaderLabels[2].setVisible ( false ); m_HeaderLabels[3].setVisible ( false ); } // Clear out sorts for (int i = 0; i < NUM_ROWS; i++) { m_iSortedRows[i] = 0; m_iIsATeam[i] = TEAM_NO; } for (int i = 0; i < MAX_PLAYERS; i++) { m_bHasBeenSorted[i] = false; } SortTeams(); // If it's not teamplay, sort all the players. Otherwise, sort the teams. // if ( !gHUD.m_Teamplay ) SortPlayers( 0, NULL ); // else // set scrollbar range m_PlayerList.SetScrollRange(m_iRows); FillGrid(); }
void ScorePanel::SortActivePlayers(char* inTeam, bool inSortByEntityIndex) { for(int i = 1; i <= m_iNumTeams; i++) { if(!strcmp(g_TeamInfo[i].name, inTeam)) { int best_team = i; // Put this team in the sorted list m_iSortedRows[ m_iRows ] = best_team; m_iIsATeam[ m_iRows ] = TEAM_YES; g_TeamInfo[best_team].already_drawn = TRUE; // set the already_drawn to be TRUE, so this team won't get sorted again m_iRows++; // Now sort all the players on this team SortPlayers(0, g_TeamInfo[best_team].name, inSortByEntityIndex); } } }
//----------------------------------------------------------------------------- // Purpose: Recalculate the internal scoreboard data //----------------------------------------------------------------------------- void ScorePanel::Update() { // Set the title if (gViewPort->m_szServerName) { char sz[MAX_SERVERNAME_LENGTH + 16]; sprintf(sz, "%s", gViewPort->m_szServerName ); m_TitleLabel.setText(sz); } m_iRows = 0; gViewPort->GetAllPlayersInfo(); // Clear out sorts // modified by jason for (int i = 0; i < MAX_PLAYERS; i++) { m_iSortedRows[i] = 0; m_iIsATeam[i] = TEAM_NO; m_bHasBeenSorted[i] = false; } // If it's not teamplay, sort all the players. Otherwise, sort the teams. if ( !gHUD.m_Teamplay ) SortPlayers( 0, NULL ); else SortTeams(); // set scrollbar range m_PlayerList.SetScrollRange(m_iRows); FillGrid(); if ( gViewPort->m_pSpectatorPanel->m_menuVisible ) { m_pCloseButton->setVisible ( true ); } else { m_pCloseButton->setVisible ( false ); } }
//----------------------------------------------------------------------------- // Purpose: Sort all the teams //----------------------------------------------------------------------------- void ScorePanel::SortTeams() { // clear out team scores for ( int i = 1; i <= m_iNumTeams; i++ ) { if ( !g_TeamInfo[i].scores_overriden ) g_TeamInfo[i].frags = g_TeamInfo[i].deaths = 0; g_TeamInfo[i].ping = g_TeamInfo[i].packetloss = 0; } // recalc the team scores, then draw them for ( i = 1; i < MAX_PLAYERS; i++ ) { if ( g_PlayerInfoList[i].name == NULL ) continue; // empty player slot, skip if ( g_PlayerExtraInfo[i].teamname[0] == 0 ) continue; // skip over players who are not in a team // find what team this player is in for ( int j = 1; j <= m_iNumTeams; j++ ) { if ( !stricmp( g_PlayerExtraInfo[i].teamname, g_TeamInfo[j].name ) ) break; } if ( j > m_iNumTeams ) // player is not in a team, skip to the next guy continue; if ( !g_TeamInfo[j].scores_overriden ) { g_TeamInfo[j].frags += g_PlayerExtraInfo[i].frags; g_TeamInfo[j].deaths += g_PlayerExtraInfo[i].deaths; } g_TeamInfo[j].ping += g_PlayerInfoList[i].ping; g_TeamInfo[j].packetloss += g_PlayerInfoList[i].packetloss; if ( g_PlayerInfoList[i].thisplayer ) g_TeamInfo[j].ownteam = TRUE; else g_TeamInfo[j].ownteam = FALSE; // Set the team's number (used for team colors) g_TeamInfo[j].teamnumber = g_PlayerExtraInfo[i].teamnumber; } // find team ping/packetloss averages for ( i = 1; i <= m_iNumTeams; i++ ) { g_TeamInfo[i].already_drawn = FALSE; if ( g_TeamInfo[i].players > 0 ) { g_TeamInfo[i].ping /= g_TeamInfo[i].players; // use the average ping of all the players in the team as the teams ping g_TeamInfo[i].packetloss /= g_TeamInfo[i].players; // use the average ping of all the players in the team as the teams ping } } // Draw the teams while ( 1 ) { int highest_frags = -99999; int lowest_deaths = 99999; int best_team = 0; for ( i = 1; i <= m_iNumTeams; i++ ) { if ( g_TeamInfo[i].players < 1 ) continue; if ( !g_TeamInfo[i].already_drawn && g_TeamInfo[i].frags >= highest_frags ) { if ( g_TeamInfo[i].frags > highest_frags || g_TeamInfo[i].deaths < lowest_deaths ) { best_team = i; lowest_deaths = g_TeamInfo[i].deaths; highest_frags = g_TeamInfo[i].frags; } } } // draw the best team on the scoreboard if ( !best_team ) break; // Put this team in the sorted list _tablePanel->m_iSortedRows[ _tablePanel->m_iRows ] = best_team; _tablePanel->m_iIsATeam[ _tablePanel->m_iRows ] = TEAM_YES; g_TeamInfo[best_team].already_drawn = TRUE; // set the already_drawn to be TRUE, so this team won't get sorted again _tablePanel->m_iRows++; // Now sort all the players on this team SortPlayers( 0, g_TeamInfo[best_team].name ); } // Now add all the spectators SortPlayers( TEAM_SPECTATORS, NULL ); // Now add all the players who aren't in a team yet SortPlayers( TEAM_UNASSIGNED, NULL ); }
uint32 CFolderJoin::OnCommand(uint32 dwCommand, uint32 dwParam1, uint32 dwParam2) { switch(dwCommand) { case CMD_SELECT_SERVER: { int nIndex = m_pServerList->GetSelectedItem(); void* pGame = LTNULL; if (nIndex != CListCtrl::kNoSelection) { pGame = (void*)m_pServerList->GetControl(nIndex)->GetParam1(); } if (pGame != GetCurGameServerHandle()) { SetCurGameServerHandle(pGame); SetState(FSS_GETALLDATA); } UpdatePlayers(TRUE); } break; case CMD_REFRESH_SERVERS: { SetState(FSS_GETSERVICES); break; } case CMD_REPING_SERVERS: { //SetState(FSS_GETPINGS); break; } case CMD_VERSION_FILTER: { m_nVersionFilter = !m_nVersionFilter; m_pVersionFilter->UpdateData(LTFALSE); ForceNextUpdate(); } break; case CMD_GAME_FILTER: { m_nGameFilter++; if (m_nGameFilter > NGT_FILTER_LAST) m_nGameFilter = 0; m_pGameFilter->UpdateData(LTFALSE); ForceNextUpdate(); } break; case CMD_POP_FILTER: { m_nPopFilter++; if (m_nPopFilter > POP_FILTER_LAST) m_nPopFilter = 0; m_pPopFilter->UpdateData(LTFALSE); ForceNextUpdate(); } break; case CMD_SORT_SERV_NAME: { SetServerSort(FSS_SORT_NAME); SortServers(); } break; case CMD_SORT_SERV_PLAYERS: { SetServerSort(FSS_SORT_PLAYERS); SortServers(); } break; case CMD_SORT_SERV_PING: { SetServerSort(FSS_SORT_PING); SortServers(); } break; case CMD_SORT_SERV_GAME: { SetServerSort(FSS_SORT_GAME); SortServers(); } break; case CMD_SORT_SERV_MAP: { SetServerSort(FSS_SORT_MAP); SortServers(); } break; case CMD_SORT_PLYR_NAME: { SetPlayerSort(FSS_SORT_NAME); SortPlayers(); } break; case CMD_SORT_PLYR_SCORE: { SetPlayerSort(FSS_SORT_FRAGS); SortPlayers(); } break; case CMD_SORT_PLYR_PING: { SetPlayerSort(FSS_SORT_PING); SortPlayers(); } break; case CMD_EDIT_PASS: { SetCapture(LTNULL); m_pPassEdit->UpdateData(); RemoveFixedControl(m_pPassEdit); RemoveFixedControl(m_pPassLabel); RemoveFixedControl(m_pPassBack); m_bAskingForPassword = LTFALSE; ForceMouseUpdate(); JoinCurGame(LTTRUE); } break; case CMD_JOIN: { CGameSpyServer* pGame = GetGameSpyClientMgr()->GetServerFromHandle(m_pCurServerHandle); if (g_pGameClientShell->IsInWorld() && pGame) { if (IsCurrentGame(pGame)) { HLOCALOBJ hPlayerObj = g_pLTClient->GetClientObject(); if (g_pGameClientShell->IsInWorld() && hPlayerObj) { g_pInterfaceMgr->ChangeState(GS_PLAYING); } } else { HSTRING hString = g_pLTClient->FormatString(IDS_ENDCURRENTGAME); g_pInterfaceMgr->ShowMessageBox(hString,LTMB_YESNO,JoinCallBack,this); g_pLTClient->FreeString(hString); } } else { JoinCurGame(); } } break; default: return CBaseFolder::OnCommand(dwCommand,dwParam1,dwParam2); } return 1; };