From caa7860f1ec9adffccedbec1510535d8b5737028 Mon Sep 17 00:00:00 2001
From: "M. Kristall" <mkpdev@gmail.com>
Date: Sat, 3 Oct 2009 12:43:00 +0000
Subject: * Fix a new formatting issue from revision 1189 * Use client list
 functions for ready code

---
 src/cgame/cg_main.c  | 25 ++++---------------------
 src/game/g_admin.c   |  8 +++-----
 src/game/g_main.c    | 19 +++++--------------
 src/game/g_session.c |  9 ++++-----
 4 files changed, 16 insertions(+), 45 deletions(-)

(limited to 'src')

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 );
 }
 
 
-- 
cgit