diff options
-rw-r--r-- | src/cgame/cg_main.c | 25 | ||||
-rw-r--r-- | src/game/g_admin.c | 8 | ||||
-rw-r--r-- | src/game/g_main.c | 19 | ||||
-rw-r--r-- | src/game/g_session.c | 9 |
4 files changed, 16 insertions, 45 deletions
diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c index 3bca625d..2dd07ba2 100644 --- a/src/cgame/cg_main.c +++ b/src/cgame/cg_main.c @@ -1437,28 +1437,11 @@ static clientInfo_t * CG_InfoFromScoreIndex( int index, int team, int *scoreInde static qboolean CG_ClientIsReady( int clientNum ) { - // CS_CLIENTS_READY is a hex string, each character of which is 4 bits - // the highest bit of the first char is a toggle for client 0, the second - // highest for client 1, etc. - // there are exactly four bits of information in each character - int val; - const char *s = CG_ConfigString( CS_CLIENTS_READY ); - - // select the appropriate character without passing the end of the string - for( val = clientNum / 4; *s && val > 0; s++, val-- ); - - // convert hex -> int - if( isdigit( *s ) ) - val = *s - '0'; - else if( *s >= 'a' && *s <= 'f' ) - val = 10 + *s - 'a'; - else if( *s >= 'A' && *s <= 'F' ) - val = 10 + *s - 'A'; - else - return qfalse; + clientList_t ready; + + BG_ClientListParse( &ready, CG_ConfigString( CS_CLIENTS_READY ) ); - // select appropriate bit - return ( ( val & 1 << ( 3 - clientNum % 4 ) ) != 0 ); + return BG_ClientListTest( &ready, clientNum ); } static const char *CG_FeederItemText( float feederID, int index, int column, qhandle_t *handle ) diff --git a/src/game/g_admin.c b/src/game/g_admin.c index d067a1cf..02bb1ff2 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -1624,11 +1624,9 @@ qboolean G_admin_ban( gentity_t *ent, int skiparg ) G_SanitiseString( g_admin_namelog[ i ]->name[ j ], n2, sizeof( n2 ) ); if( strstr( n2, s2 ) ) { - if( g_admin_namelog[ i ]->slot > -1 ) - ADMBP( "^3" ); - ADMBP( va( "%-2s (*%s) %15s ^7'%s^7'\n", + ADMBP( va( "%s (*%s) %15s ^7'%s^7'\n", ( g_admin_namelog[ i ]->slot > -1 ) ? - va( "%d", g_admin_namelog[ i ]->slot ) : "-", + va( "^3%-2d", g_admin_namelog[ i ]->slot ) : "- ", g_admin_namelog[ i ]->guid + 24, g_admin_namelog[ i ]->ip, g_admin_namelog[ i ]->name[ j ] ) ); @@ -2789,7 +2787,7 @@ qboolean G_admin_namelog( gentity_t *ent, int skiparg ) printed++; ADMBP( va( "%s (*%s) %15s^7", ( g_admin_namelog[ i ]->slot > -1 ) ? - va( "^3%-2d", g_admin_namelog[ i ]->slot ) : "-", + va( "^3%-2d", g_admin_namelog[ i ]->slot ) : "- ", g_admin_namelog[ i ]->guid + 24, g_admin_namelog[ i ]->ip ) ); for( j = 0; j < MAX_ADMIN_NAMELOG_NAMES && g_admin_namelog[ i ]->name[ j ][ 0 ]; j++ ) diff --git a/src/game/g_main.c b/src/game/g_main.c index 7c851ee0..3c36382c 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -1853,9 +1853,7 @@ void CheckIntermissionExit( void ) int ready, notReady; int i; gclient_t *cl; - byte readyMasks[ ( MAX_CLIENTS + 7 ) / 8 ]; - // each byte in readyMasks will become two characters 00 - ff in the string - char readyString[ 2 * sizeof( readyMasks ) + 1 ]; + clientList_t readyMasks; //if no clients are connected, just exit if( level.numConnectedClients == 0 ) @@ -1867,7 +1865,7 @@ void CheckIntermissionExit( void ) // see which players are ready ready = 0; notReady = 0; - Com_Memset( readyMasks, 0, sizeof( readyMasks ) ); + Com_Memset( &readyMasks, 0, sizeof( readyMasks ) ); for( i = 0; i < g_maxclients.integer; i++ ) { cl = level.clients + i; @@ -1881,21 +1879,14 @@ void CheckIntermissionExit( void ) if( cl->readyToExit ) { ready++; - // the nth bit of readyMasks is for client (n - 1) - readyMasks[ i / 8 ] |= 1 << ( 7 - ( i % 8 ) ); + + BG_ClientListAdd( &readyMasks, i ); } else notReady++; } - // this is hex because we can convert bits to a hex string in pieces, - // whereas a decimal string would have to all be written at once - // (and we can't fit a number that large in an int) - for( i = 0; i < ( g_maxclients.integer + 7 ) / 8; i++ ) - Com_sprintf( &readyString[ i * 2 ], sizeof( readyString ) - i * 2, - "%2.2x", readyMasks[ i ] ); - - trap_SetConfigstring( CS_CLIENTS_READY, readyString ); + trap_SetConfigstring( CS_CLIENTS_READY, BG_ClientListString( &readyMasks ) ); // never exit in less than five seconds if( level.time < level.intermissiontime + 5000 ) diff --git a/src/game/g_session.c b/src/game/g_session.c index c5b517ab..f6b46285 100644 --- a/src/game/g_session.c +++ b/src/game/g_session.c @@ -70,21 +70,20 @@ void G_ReadSessionData( gclient_t *client ) char s[ MAX_STRING_CHARS ]; const char *var; int spectatorState; + char ignorelist[ 17 ]; var = va( "session%i", client - level.clients ); trap_Cvar_VariableStringBuffer( var, s, sizeof(s) ); - // FIXME: should be using BG_ClientListParse() for ignoreList, but - // bg_lib.c's sscanf() currently lacks %s - sscanf( s, "%i %i %i %x%x", + sscanf( s, "%i %i %i %16s", &client->sess.spectatorTime, &spectatorState, &client->sess.spectatorClient, - &client->sess.ignoreList.hi, - &client->sess.ignoreList.lo + ignorelist ); client->sess.spectatorState = (spectatorState_t)spectatorState; + BG_ClientListParse( &client->sess.ignoreList, ignorelist ); } |