#include "cg_local.h"#include "../ui/ui_shared.h"#include "../game/bg_saga.h"Go to the source code of this file.
Defines | |
| #define | SCOREBOARD_X (0) |
| #define | SB_HEADER 86 |
| #define | SB_TOP (SB_HEADER+32) |
| #define | SB_STATUSBAR 420 |
| #define | SB_NORMAL_HEIGHT 25 |
| #define | SB_INTER_HEIGHT 15 |
| #define | SB_MAXCLIENTS_NORMAL ((SB_STATUSBAR - SB_TOP) / SB_NORMAL_HEIGHT) |
| #define | SB_MAXCLIENTS_INTER ((SB_STATUSBAR - SB_TOP) / SB_INTER_HEIGHT - 1) |
| #define | SB_LEFT_BOTICON_X (SCOREBOARD_X+0) |
| #define | SB_LEFT_HEAD_X (SCOREBOARD_X+32) |
| #define | SB_RIGHT_BOTICON_X (SCOREBOARD_X+64) |
| #define | SB_RIGHT_HEAD_X (SCOREBOARD_X+96) |
| #define | SB_BOTICON_X (SCOREBOARD_X+32) |
| #define | SB_HEAD_X (SCOREBOARD_X+64) |
| #define | SB_SCORELINE_X 100 |
| #define | SB_SCORELINE_WIDTH (640 - SB_SCORELINE_X * 2) |
| #define | SB_RATING_WIDTH 0 |
| #define | SB_NAME_X (SB_SCORELINE_X) |
| #define | SB_SCORE_X (SB_SCORELINE_X + .55 * SB_SCORELINE_WIDTH) |
| #define | SB_PING_X (SB_SCORELINE_X + .70 * SB_SCORELINE_WIDTH) |
| #define | SB_TIME_X (SB_SCORELINE_X + .85 * SB_SCORELINE_WIDTH) |
Functions | |
| int | CG_GetClassCount (team_t team, int siegeClass) |
| int | CG_GetTeamNonScoreCount (team_t team) |
| int | CG_GetTeamCount (team_t team, int maxClients) |
| qboolean | CG_DrawOldScoreboard (void) |
Variables | |
| int | cg_siegeWinTeam = 0 |
|
|
Definition at line 31 of file cg_scoreboard.c. |
|
|
Definition at line 32 of file cg_scoreboard.c. |
|
|
Definition at line 10 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 17 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 26 of file cg_scoreboard.c. |
|
|
Definition at line 27 of file cg_scoreboard.c. |
|
|
Definition at line 20 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 19 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 38 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 16 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 40 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 37 of file cg_scoreboard.c. |
|
|
Definition at line 28 of file cg_scoreboard.c. |
|
|
Definition at line 29 of file cg_scoreboard.c. |
|
|
Definition at line 39 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 35 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 34 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 14 of file cg_scoreboard.c. |
|
|
Definition at line 41 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 11 of file cg_scoreboard.c. Referenced by CG_DrawOldScoreboard(). |
|
|
Definition at line 8 of file cg_scoreboard.c. |
|
|
Definition at line 345 of file cg_scoreboard.c. References BIGCHAR_HEIGHT, BIGCHAR_WIDTH, cg, CG_DrawPic(), CG_DrawStrlen(), CG_DrawTeamBackground(), CG_FadeColor(), CG_GetStringEdString(), CG_GetTeamCount(), CG_LoadDeferredPlayers(), cg_paused, CG_PlaceString(), cg_siegeWinTeam, CG_Text_Paint(), CG_Text_Width(), cgs, score_t::client, cgs_t::clientinfo, playerState_s::clientNum, colorTable, colorWhite, CT_WHITE, cg_t::deferredPlayerLoading, cgs_t::duelist1, cgs_t::duelist2, cgs_t::duelist3, cgs_t::duelWinner, FADE_TIME, FONT_MEDIUM, cgs_t::gametype, GT_DUEL, GT_POWERDUEL, GT_SIEGE, GT_TEAM, vmCvar_t::integer, ITEM_TEXTSTYLE_OUTLINED, cg_t::killerName, cg_t::numScores, PERS_RANK, PERS_SCORE, PERS_TEAM, playerState_s::persistant, PM_DEAD, PM_INTERMISSION, playerState_s::pm_type, cg_t::predictedPlayerState, snapshot_t::ps, qboolean, qfalse, qtrue, SB_HEADER, SB_INTER_HEIGHT, SB_MAXCLIENTS_INTER, SB_MAXCLIENTS_NORMAL, SB_NAME_X, SB_NORMAL_HEIGHT, SB_PING_X, SB_SCORE_X, SB_SCORELINE_WIDTH, SB_SCORELINE_X, SB_TIME_X, SB_TOP, cg_t::scoreFadeTime, cg_t::scores, SCREEN_WIDTH, cg_t::showScores, cg_t::snap, TEAM_BLUE, TEAM_FREE, TEAM_RED, TEAM_SPECTATOR, cg_t::teamScores, trap_R_RegisterShaderNoMip(), trap_SP_GetStringTextString(), UI_CENTER, UI_DrawProportionalString(), UI_DROPSHADOW, va(), and cg_t::warmup.
00345 {
00346 int x, y, w, i, n1, n2;
00347 float fade;
00348 float *fadeColor;
00349 char *s;
00350 int maxClients;
00351 int lineHeight;
00352 int topBorderSize, bottomBorderSize;
00353
00354 // don't draw amuthing if the menu or console is up
00355 if ( cg_paused.integer ) {
00356 cg.deferredPlayerLoading = 0;
00357 return qfalse;
00358 }
00359
00360 // don't draw scoreboard during death while warmup up
00361 if ( cg.warmup && !cg.showScores ) {
00362 return qfalse;
00363 }
00364
00365 if ( cg.showScores || cg.predictedPlayerState.pm_type == PM_DEAD ||
00366 cg.predictedPlayerState.pm_type == PM_INTERMISSION ) {
00367 fade = 1.0;
00368 fadeColor = colorWhite;
00369 } else {
00370 fadeColor = CG_FadeColor( cg.scoreFadeTime, FADE_TIME );
00371
00372 if ( !fadeColor ) {
00373 // next time scoreboard comes up, don't print killer
00374 cg.deferredPlayerLoading = 0;
00375 cg.killerName[0] = 0;
00376 return qfalse;
00377 }
00378 fade = *fadeColor;
00379 }
00380
00381 // fragged by ... line
00382 // or if in intermission and duel, prints the winner of the duel round
00383 if ((cgs.gametype == GT_DUEL || cgs.gametype == GT_POWERDUEL) && cgs.duelWinner != -1 &&
00384 cg.predictedPlayerState.pm_type == PM_INTERMISSION)
00385 {
00386 s = va("%s^7 %s", cgs.clientinfo[cgs.duelWinner].name, CG_GetStringEdString("MP_INGAME", "DUEL_WINS") );
00387 /*w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH;
00388 x = ( SCREEN_WIDTH - w ) / 2;
00389 y = 40;
00390 CG_DrawBigString( x, y, s, fade );
00391 */
00392 x = ( SCREEN_WIDTH ) / 2;
00393 y = 40;
00394 CG_Text_Paint ( x - CG_Text_Width ( s, 1.0f, FONT_MEDIUM ) / 2, y, 1.0f, colorWhite, s, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00395 }
00396 else if ((cgs.gametype == GT_DUEL || cgs.gametype == GT_POWERDUEL) && cgs.duelist1 != -1 && cgs.duelist2 != -1 &&
00397 cg.predictedPlayerState.pm_type == PM_INTERMISSION)
00398 {
00399 if (cgs.gametype == GT_POWERDUEL && cgs.duelist3 != -1)
00400 {
00401 s = va("%s^7 %s %s^7 %s %s", cgs.clientinfo[cgs.duelist1].name, CG_GetStringEdString("MP_INGAME", "SPECHUD_VERSUS"), cgs.clientinfo[cgs.duelist2].name, CG_GetStringEdString("MP_INGAME", "AND"), cgs.clientinfo[cgs.duelist3].name );
00402 }
00403 else
00404 {
00405 s = va("%s^7 %s %s", cgs.clientinfo[cgs.duelist1].name, CG_GetStringEdString("MP_INGAME", "SPECHUD_VERSUS"), cgs.clientinfo[cgs.duelist2].name );
00406 }
00407 /*w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH;
00408 x = ( SCREEN_WIDTH - w ) / 2;
00409 y = 40;
00410 CG_DrawBigString( x, y, s, fade );
00411 */
00412 x = ( SCREEN_WIDTH ) / 2;
00413 y = 40;
00414 CG_Text_Paint ( x - CG_Text_Width ( s, 1.0f, FONT_MEDIUM ) / 2, y, 1.0f, colorWhite, s, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00415 }
00416 else if ( cg.killerName[0] ) {
00417 s = va("%s %s", CG_GetStringEdString("MP_INGAME", "KILLEDBY"), cg.killerName );
00418 /*w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH;
00419 x = ( SCREEN_WIDTH - w ) / 2;
00420 y = 40;
00421 CG_DrawBigString( x, y, s, fade );
00422 */
00423 x = ( SCREEN_WIDTH ) / 2;
00424 y = 40;
00425 CG_Text_Paint ( x - CG_Text_Width ( s, 1.0f, FONT_MEDIUM ) / 2, y, 1.0f, colorWhite, s, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00426 }
00427
00428 // current rank
00429 if (cgs.gametype == GT_POWERDUEL)
00430 { //do nothing?
00431 }
00432 else if ( cgs.gametype < GT_TEAM) {
00433 if (cg.snap->ps.persistant[PERS_TEAM] != TEAM_SPECTATOR )
00434 {
00435 char sPlace[256];
00436 char sOf[256];
00437 char sWith[256];
00438
00439 trap_SP_GetStringTextString("MP_INGAME_PLACE", sPlace, sizeof(sPlace));
00440 trap_SP_GetStringTextString("MP_INGAME_OF", sOf, sizeof(sOf));
00441 trap_SP_GetStringTextString("MP_INGAME_WITH", sWith, sizeof(sWith));
00442
00443 s = va("%s %s (%s %i) %s %i",
00444 CG_PlaceString( cg.snap->ps.persistant[PERS_RANK] + 1 ),
00445 sPlace,
00446 sOf,
00447 cg.numScores,
00448 sWith,
00449 cg.snap->ps.persistant[PERS_SCORE] );
00450 w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH;
00451 x = ( SCREEN_WIDTH ) / 2;
00452 y = 60;
00453 //CG_DrawBigString( x, y, s, fade );
00454 UI_DrawProportionalString(x, y, s, UI_CENTER|UI_DROPSHADOW, colorTable[CT_WHITE]);
00455 }
00456 }
00457 else if (cgs.gametype != GT_SIEGE)
00458 {
00459 if ( cg.teamScores[0] == cg.teamScores[1] ) {
00460 s = va("%s %i", CG_GetStringEdString("MP_INGAME", "TIEDAT"), cg.teamScores[0] );
00461 } else if ( cg.teamScores[0] >= cg.teamScores[1] ) {
00462 s = va("%s, %i / %i", CG_GetStringEdString("MP_INGAME", "RED_LEADS"), cg.teamScores[0], cg.teamScores[1] );
00463 } else {
00464 s = va("%s, %i / %i", CG_GetStringEdString("MP_INGAME", "BLUE_LEADS"), cg.teamScores[1], cg.teamScores[0] );
00465 }
00466
00467 x = ( SCREEN_WIDTH ) / 2;
00468 y = 60;
00469
00470 CG_Text_Paint ( x - CG_Text_Width ( s, 1.0f, FONT_MEDIUM ) / 2, y, 1.0f, colorWhite, s, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00471 }
00472 else if (cgs.gametype == GT_SIEGE && (cg_siegeWinTeam == 1 || cg_siegeWinTeam == 2))
00473 {
00474 if (cg_siegeWinTeam == 1)
00475 {
00476 s = va("%s", CG_GetStringEdString("MP_INGAME", "SIEGETEAM1WIN") );
00477 }
00478 else
00479 {
00480 s = va("%s", CG_GetStringEdString("MP_INGAME", "SIEGETEAM2WIN") );
00481 }
00482
00483 x = ( SCREEN_WIDTH ) / 2;
00484 y = 60;
00485
00486 CG_Text_Paint ( x - CG_Text_Width ( s, 1.0f, FONT_MEDIUM ) / 2, y, 1.0f, colorWhite, s, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00487 }
00488
00489 // scoreboard
00490 y = SB_HEADER;
00491
00492 CG_DrawPic ( SB_SCORELINE_X - 40, y - 5, SB_SCORELINE_WIDTH + 80, 40, trap_R_RegisterShaderNoMip ( "gfx/menus/menu_buttonback.tga" ) );
00493
00494 CG_Text_Paint ( SB_NAME_X, y, 1.0f, colorWhite, CG_GetStringEdString("MP_INGAME", "NAME"),0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00495 if (cgs.gametype == GT_DUEL || cgs.gametype == GT_POWERDUEL)
00496 {
00497 char sWL[100];
00498 trap_SP_GetStringTextString("MP_INGAME_W_L", sWL, sizeof(sWL));
00499
00500 CG_Text_Paint ( SB_SCORE_X, y, 1.0f, colorWhite, sWL, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00501 }
00502 else
00503 {
00504 CG_Text_Paint ( SB_SCORE_X, y, 1.0f, colorWhite, CG_GetStringEdString("MP_INGAME", "SCORE"), 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00505 }
00506 CG_Text_Paint ( SB_PING_X, y, 1.0f, colorWhite, CG_GetStringEdString("MP_INGAME", "PING"), 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00507 CG_Text_Paint ( SB_TIME_X, y, 1.0f, colorWhite, CG_GetStringEdString("MP_INGAME", "TIME"), 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
00508
00509 y = SB_TOP;
00510
00511 // If there are more than SB_MAXCLIENTS_NORMAL, use the interleaved scores
00512 if ( cg.numScores > SB_MAXCLIENTS_NORMAL ) {
00513 maxClients = SB_MAXCLIENTS_INTER;
00514 lineHeight = SB_INTER_HEIGHT;
00515 topBorderSize = 8;
00516 bottomBorderSize = 16;
00517 } else {
00518 maxClients = SB_MAXCLIENTS_NORMAL;
00519 lineHeight = SB_NORMAL_HEIGHT;
00520 topBorderSize = 8;
00521 bottomBorderSize = 8;
00522 }
00523
00524 localClient = qfalse;
00525
00526
00527 //I guess this should end up being able to display 19 clients at once.
00528 //In a team game, if there are 9 or more clients on the team not in the lead,
00529 //we only want to show 10 of the clients on the team in the lead, so that we
00530 //have room to display the clients in the lead on the losing team.
00531
00532 //I guess this can be accomplished simply by printing the first teams score with a maxClients
00533 //value passed in related to how many players are on both teams.
00534 if ( cgs.gametype >= GT_TEAM ) {
00535 //
00536 // teamplay scoreboard
00537 //
00538 y += lineHeight/2;
00539
00540 if ( cg.teamScores[0] >= cg.teamScores[1] ) {
00541 int team1MaxCl = CG_GetTeamCount(TEAM_RED, maxClients);
00542 int team2MaxCl = CG_GetTeamCount(TEAM_BLUE, maxClients);
00543
00544 if (team1MaxCl > 10 && (team1MaxCl+team2MaxCl) > maxClients)
00545 {
00546 team1MaxCl -= team2MaxCl;
00547 //subtract as many as you have to down to 10, once we get there
00548 //we just set it to 10
00549
00550 if (team1MaxCl < 10)
00551 {
00552 team1MaxCl = 10;
00553 }
00554 }
00555
00556 team2MaxCl = (maxClients-team1MaxCl); //team2 can display however many is left over after team1's display
00557
00558 n1 = CG_TeamScoreboard( y, TEAM_RED, fade, team1MaxCl, lineHeight, qtrue );
00559 CG_DrawTeamBackground( SB_SCORELINE_X - 5, y - topBorderSize, 640 - SB_SCORELINE_X * 2 + 10, n1 * lineHeight + bottomBorderSize, 0.33f, TEAM_RED );
00560 CG_TeamScoreboard( y, TEAM_RED, fade, team1MaxCl, lineHeight, qfalse );
00561 y += (n1 * lineHeight) + BIGCHAR_HEIGHT;
00562
00563 //maxClients -= n1;
00564
00565 n2 = CG_TeamScoreboard( y, TEAM_BLUE, fade, team2MaxCl, lineHeight, qtrue );
00566 CG_DrawTeamBackground( SB_SCORELINE_X - 5, y - topBorderSize, 640 - SB_SCORELINE_X * 2 + 10, n2 * lineHeight + bottomBorderSize, 0.33f, TEAM_BLUE );
00567 CG_TeamScoreboard( y, TEAM_BLUE, fade, team2MaxCl, lineHeight, qfalse );
00568 y += (n2 * lineHeight) + BIGCHAR_HEIGHT;
00569
00570 //maxClients -= n2;
00571
00572 maxClients -= (team1MaxCl+team2MaxCl);
00573 } else {
00574 int team1MaxCl = CG_GetTeamCount(TEAM_BLUE, maxClients);
00575 int team2MaxCl = CG_GetTeamCount(TEAM_RED, maxClients);
00576
00577 if (team1MaxCl > 10 && (team1MaxCl+team2MaxCl) > maxClients)
00578 {
00579 team1MaxCl -= team2MaxCl;
00580 //subtract as many as you have to down to 10, once we get there
00581 //we just set it to 10
00582
00583 if (team1MaxCl < 10)
00584 {
00585 team1MaxCl = 10;
00586 }
00587 }
00588
00589 team2MaxCl = (maxClients-team1MaxCl); //team2 can display however many is left over after team1's display
00590
00591 n1 = CG_TeamScoreboard( y, TEAM_BLUE, fade, team1MaxCl, lineHeight, qtrue );
00592 CG_DrawTeamBackground( SB_SCORELINE_X - 5, y - topBorderSize, 640 - SB_SCORELINE_X * 2 + 10, n1 * lineHeight + bottomBorderSize, 0.33f, TEAM_BLUE );
00593 CG_TeamScoreboard( y, TEAM_BLUE, fade, team1MaxCl, lineHeight, qfalse );
00594 y += (n1 * lineHeight) + BIGCHAR_HEIGHT;
00595
00596 //maxClients -= n1;
00597
00598 n2 = CG_TeamScoreboard( y, TEAM_RED, fade, team2MaxCl, lineHeight, qtrue );
00599 CG_DrawTeamBackground( SB_SCORELINE_X - 5, y - topBorderSize, 640 - SB_SCORELINE_X * 2 + 10, n2 * lineHeight + bottomBorderSize, 0.33f, TEAM_RED );
00600 CG_TeamScoreboard( y, TEAM_RED, fade, team2MaxCl, lineHeight, qfalse );
00601 y += (n2 * lineHeight) + BIGCHAR_HEIGHT;
00602
00603 //maxClients -= n2;
00604
00605 maxClients -= (team1MaxCl+team2MaxCl);
00606 }
00607 n1 = CG_TeamScoreboard( y, TEAM_SPECTATOR, fade, maxClients, lineHeight, qfalse );
00608 y += (n1 * lineHeight) + BIGCHAR_HEIGHT;
00609
00610 } else {
00611 //
00612 // free for all scoreboard
00613 //
00614 n1 = CG_TeamScoreboard( y, TEAM_FREE, fade, maxClients, lineHeight, qfalse );
00615 y += (n1 * lineHeight) + BIGCHAR_HEIGHT;
00616 n2 = CG_TeamScoreboard( y, TEAM_SPECTATOR, fade, maxClients - n1, lineHeight, qfalse );
00617 y += (n2 * lineHeight) + BIGCHAR_HEIGHT;
00618 }
00619
00620 if (!localClient) {
00621 // draw local client at the bottom
00622 for ( i = 0 ; i < cg.numScores ; i++ ) {
00623 if ( cg.scores[i].client == cg.snap->ps.clientNum ) {
00624 CG_DrawClientScore( y, &cg.scores[i], fadeColor, fade, lineHeight == SB_NORMAL_HEIGHT );
00625 break;
00626 }
00627 }
00628 }
00629
00630 // load any models that have been deferred
00631 if ( ++cg.deferredPlayerLoading > 10 ) {
00632 CG_LoadDeferredPlayers();
00633 }
00634
00635 return qtrue;
00636 }
|
|
||||||||||||
|
Definition at line 263 of file cg_scoreboard.c. References bgSiegeClasses, cgs, siegeClass_t::classShader, cgs_t::clientinfo, clientInfo_t::infoValid, cgs_t::maxclients, clientInfo_t::siegeIndex, clientInfo_t::team, and team_t. Referenced by CG_SiegeCountCvars().
00264 {
00265 int i = 0;
00266 int count = 0;
00267 clientInfo_t *ci;
00268 siegeClass_t *scl;
00269
00270 for ( i = 0 ; i < cgs.maxclients ; i++ )
00271 {
00272 ci = &cgs.clientinfo[ i ];
00273
00274 if ((!ci->infoValid) || ( team != ci->team ))
00275 {
00276 continue;
00277 }
00278
00279 scl = &bgSiegeClasses[ci->siegeIndex];
00280
00281 // Correct class?
00282 if ( siegeClass != scl->classShader )
00283 {
00284 continue;
00285 }
00286
00287 count++;
00288 }
00289
00290 return count;
00291
00292 }
|
|
||||||||||||
|
Definition at line 314 of file cg_scoreboard.c. References cg, cgs, score_t::client, cgs_t::clientinfo, cg_t::numScores, cg_t::scores, clientInfo_t::team, and team_t. Referenced by CG_DrawOldScoreboard().
00315 {
00316 int i = 0;
00317 int count = 0;
00318 clientInfo_t *ci;
00319 score_t *score;
00320
00321 for ( i = 0 ; i < cg.numScores && count < maxClients ; i++ )
00322 {
00323 score = &cg.scores[i];
00324 ci = &cgs.clientinfo[ score->client ];
00325
00326 if ( team != ci->team )
00327 {
00328 continue;
00329 }
00330
00331 count++;
00332 }
00333
00334 return count;
00335
00336 }
|
|
|
Definition at line 294 of file cg_scoreboard.c. References cgs, cgs_t::clientinfo, clientInfo_t::infoValid, cgs_t::maxclients, clientInfo_t::siegeDesiredTeam, clientInfo_t::team, and team_t. Referenced by CG_SiegeCountCvars().
00295 {
00296 int i = 0,count=0;
00297 clientInfo_t *ci;
00298
00299 for ( i = 0 ; i < cgs.maxclients ; i++ )
00300 {
00301 ci = &cgs.clientinfo[ i ];
00302
00303 if ( (!ci->infoValid) || (team != ci->team && team != ci->siegeDesiredTeam) )
00304 {
00305 continue;
00306 }
00307
00308 count++;
00309 }
00310
00311 return count;
00312 }
|
|
|
Definition at line 344 of file cg_scoreboard.c. |