diff options
Diffstat (limited to 'src/ui_multiplayer.c')
-rw-r--r-- | src/ui_multiplayer.c | 227 |
1 files changed, 121 insertions, 106 deletions
diff --git a/src/ui_multiplayer.c b/src/ui_multiplayer.c index d902286..43434c4 100644 --- a/src/ui_multiplayer.c +++ b/src/ui_multiplayer.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -57,17 +57,18 @@ typedef struct m_joinServer_s { static m_joinServer_t m_join; -static void UpdateSelection( void ) { +static void UpdateSelection(void) +{ serverSlot_t *s = &m_join.servers[m_join.list.curvalue]; - if( s->valid ) { + if (s->valid) { m_join.info.generic.flags &= ~QMF_HIDDEN; - m_join.info.items = ( void ** )s->rules; + m_join.info.items = (void **)s->rules; m_join.info.numItems = s->numRules; - if( s->numPlayers ) { + if (s->numPlayers) { m_join.players.generic.flags &= ~QMF_HIDDEN; - m_join.players.items = ( void ** )s->players; + m_join.players.items = (void **)s->players; m_join.players.numItems = s->numPlayers; } else { m_join.players.generic.flags |= QMF_HIDDEN; @@ -85,29 +86,31 @@ static void UpdateSelection( void ) { m_join.players.items = NULL; m_join.players.numItems = 0; - if( m_join.list.numItems ) + if (m_join.list.numItems) m_join.menu.status = "Press Space to refresh; Hold ALT to refresh all"; else m_join.menu.status = "No servers found; Press Space to refresh"; } } -static void ClearSlot( serverSlot_t *slot ) { +static void ClearSlot(serverSlot_t *slot) +{ int i; - for( i = 0; i < slot->numRules; i++ ) { - Z_Free( slot->rules[i] ); + for (i = 0; i < slot->numRules; i++) { + Z_Free(slot->rules[i]); slot->rules[i] = NULL; } - for( i = 0; i < slot->numPlayers; i++ ) { - Z_Free( slot->players[i] ); + for (i = 0; i < slot->numPlayers; i++) { + Z_Free(slot->players[i]); slot->players[i] = NULL; } slot->numRules = slot->numPlayers = 0; slot->valid = qfalse; } -void UI_AddToServerList( const serverStatus_t *status ) { +void UI_AddToServerList(const serverStatus_t *status) +{ serverSlot_t *slot; int i, j, k; char *host, *map; @@ -116,25 +119,25 @@ void UI_AddToServerList( const serverStatus_t *status ) { char value[MAX_STRING_CHARS]; const playerStatus_t *player; - if( !m_join.active ) { + if (!m_join.active) { return; } // see if already added - for( i = 0, slot = m_join.servers; i < m_join.list.numItems; i++, slot++ ) { - if( !strcmp( status->address, slot->realAddress ) ) { + for (i = 0, slot = m_join.servers; i < m_join.list.numItems; i++, slot++) { + if (!strcmp(status->address, slot->realAddress)) { break; } } - if( i == m_join.list.numItems ) { + if (i == m_join.list.numItems) { // create new slot - if( m_join.list.numItems == MAX_STATUS_SERVERS ) { + if (m_join.list.numItems == MAX_STATUS_SERVERS) { return; } - strcpy( slot->realAddress, status->address ); - strcpy( slot->address, status->address ); - if( !m_join.cursorSet ) { + strcpy(slot->realAddress, status->address); + strcpy(slot->address, status->address); + if (!m_join.cursorSet) { m_join.list.curvalue = i; m_join.cursorSet = qtrue; } @@ -142,13 +145,13 @@ void UI_AddToServerList( const serverStatus_t *status ) { m_join.names[m_join.list.numItems] = NULL; } - host = Info_ValueForKey( info, "hostname" ); - if( !host[0] ) { + host = Info_ValueForKey(info, "hostname"); + if (!host[0]) { host = slot->address; } - map = Info_ValueForKey( info, "mapname" ); - if( !map[0] ) { + map = Info_ValueForKey(info, "mapname"); + if (!map[0]) { map = "???"; } /*else { Q_snprintf( value, sizeof( value ), "maps/%s.bsp", map ); @@ -158,33 +161,33 @@ void UI_AddToServerList( const serverStatus_t *status ) { } }*/ - j = atoi( Info_ValueForKey( info, "maxclients" ) ); - k = atoi( Info_ValueForKey( info, "needpass" ) ); - Q_snprintf( key, sizeof( key ), "%d/%d", - //status->numPlayers < j ? k > 0 ? S_COLOR_YELLOW : "" : S_COLOR_RED, - status->numPlayers, j ); + j = atoi(Info_ValueForKey(info, "maxclients")); + k = atoi(Info_ValueForKey(info, "needpass")); + Q_snprintf(key, sizeof(key), "%d/%d", + //status->numPlayers < j ? k > 0 ? S_COLOR_YELLOW : "" : S_COLOR_RED, + status->numPlayers, j); - if( m_join.names[i] ) { - Z_Free( m_join.names[i] ); + if (m_join.names[i]) { + Z_Free(m_join.names[i]); } - m_join.names[i] = UI_FormatColumns( 0, host, map, key, NULL ); + m_join.names[i] = UI_FormatColumns(0, host, map, key, NULL); - ClearSlot( slot ); + ClearSlot(slot); do { - Info_NextPair( &info, key, value ); - if( !key[0] ) { + Info_NextPair(&info, key, value); + if (!key[0]) { break; } slot->rules[slot->numRules++] = - UI_FormatColumns( 0, key, value, NULL ); - } while( info && slot->numRules < MAX_STATUS_RULES ); - - for( i = 0, player = status->players ; i < status->numPlayers; i++, player++ ) { - Q_snprintf( key, sizeof( key ), "%d", player->score ); - Q_snprintf( value, sizeof( value ), "%d", player->ping ); - slot->players[i] = UI_FormatColumns( 0, - key, value, player->name, NULL ); + UI_FormatColumns(0, key, value, NULL); + } while (info && slot->numRules < MAX_STATUS_RULES); + + for (i = 0, player = status->players; i < status->numPlayers; i++, player++) { + Q_snprintf(key, sizeof(key), "%d", player->score); + Q_snprintf(value, sizeof(value), "%d", player->ping); + slot->players[i] = UI_FormatColumns(0, + key, value, player->name, NULL); } slot->numPlayers = status->numPlayers; @@ -193,84 +196,87 @@ void UI_AddToServerList( const serverStatus_t *status ) { UpdateSelection(); } -static void PingSelected( void ) { +static void PingSelected(void) +{ serverSlot_t *s = &m_join.servers[m_join.list.curvalue]; - if( m_join.names[m_join.list.curvalue] ) { - Z_Free( m_join.names[m_join.list.curvalue] ); + if (m_join.names[m_join.list.curvalue]) { + Z_Free(m_join.names[m_join.list.curvalue]); } - m_join.names[m_join.list.curvalue] = UI_FormatColumns( 0, - s->address, "???", "?/?", NULL ); - - ClearSlot( s ); - + m_join.names[m_join.list.curvalue] = UI_FormatColumns(0, + s->address, "???", "?/?", NULL); + + ClearSlot(s); + UpdateSelection(); m_join.menu.status = "Pinging servers, please wait..."; SCR_UpdateScreen(); - - CL_SendStatusRequest( s->realAddress, 0 ); + + CL_SendStatusRequest(s->realAddress, 0); UpdateSelection(); } -static void AddUnlistedServers( void ) { +static void AddUnlistedServers(void) +{ serverSlot_t *slot; cvar_t *var; int i, j; - + m_join.active = qtrue; // ping broadcast - CL_SendStatusRequest( NULL, 0 ); + CL_SendStatusRequest(NULL, 0); - for( i = 0; i < MAX_STATUS_SERVERS; i++ ) { - var = Cvar_FindVar( va( "adr%i", i ) ); - if( !var ) { + for (i = 0; i < MAX_STATUS_SERVERS; i++) { + var = Cvar_FindVar(va("adr%i", i)); + if (!var) { break; } - if( !var->string[0] ) { + if (!var->string[0]) { continue; } // ignore if already listed - for( j = 0, slot = m_join.servers; j < m_join.list.numItems; j++, slot++ ) { - if( !Q_stricmp( var->string, slot->address ) ) { + for (j = 0, slot = m_join.servers; j < m_join.list.numItems; j++, slot++) { + if (!Q_stricmp(var->string, slot->address)) { break; } } - if( j != m_join.list.numItems ) { + if (j != m_join.list.numItems) { continue; } - if( m_join.list.numItems == MAX_STATUS_SERVERS ) { + if (m_join.list.numItems == MAX_STATUS_SERVERS) { break; } // save original address - Q_strlcpy( slot->address, var->string, sizeof( slot->address ) ); - Q_strlcpy( slot->realAddress, var->string, sizeof( slot->realAddress ) ); + Q_strlcpy(slot->address, var->string, sizeof(slot->address)); + Q_strlcpy(slot->realAddress, var->string, sizeof(slot->realAddress)); - m_join.names[m_join.list.numItems++] = UI_FormatColumns( 0, - slot->address, "???", "?/?", NULL ); + m_join.names[m_join.list.numItems++] = UI_FormatColumns(0, + slot->address, "???", "?/?", NULL); // ping and resolve real ip - CL_SendStatusRequest( slot->realAddress, sizeof( slot->realAddress ) ); + CL_SendStatusRequest(slot->realAddress, sizeof(slot->realAddress)); SCR_UpdateScreen(); } } -static void FreeListedServers( void ) { +static void FreeListedServers(void) +{ int i; - for( i = 0; i < m_join.list.numItems; i++ ) { - ClearSlot( &m_join.servers[i] ); + for (i = 0; i < m_join.list.numItems; i++) { + ClearSlot(&m_join.servers[i]); } - for( i = 0; i < m_join.list.numItems; i++ ) { - if( m_join.names[i] ) { - Z_Free( m_join.names[i] ); + for (i = 0; i < m_join.list.numItems; i++) { + if (m_join.names[i]) { + Z_Free(m_join.names[i]); m_join.names[i] = NULL; } } @@ -284,7 +290,8 @@ static void FreeListedServers( void ) { } -static void PingServers( void ) { +static void PingServers(void) +{ FreeListedServers(); S_StopAllSounds(); UpdateSelection(); @@ -294,23 +301,26 @@ static void PingServers( void ) { // send out info packets AddUnlistedServers(); - + UpdateSelection(); } -static menuSound_t Connect( menuCommon_t *self ) { +static menuSound_t Connect(menuCommon_t *self) +{ serverSlot_t *s = &m_join.servers[m_join.list.curvalue]; - Cbuf_AddText( &cmd_buffer, va( "connect \"%s\"\n", s->realAddress ) ); + Cbuf_AddText(&cmd_buffer, va("connect \"%s\"\n", s->realAddress)); return QMS_SILENT; } -static menuSound_t Change( menuCommon_t *self ) { +static menuSound_t Change(menuCommon_t *self) +{ UpdateSelection(); return QMS_MOVE; } -static void Size( menuFrameWork_t *self ) { +static void Size(menuFrameWork_t *self) +{ int w1 = uis.width * 0.75f; int w2 = uis.width * 0.25f; @@ -321,9 +331,9 @@ static void Size( menuFrameWork_t *self ) { m_join.list.generic.y = CHAR_HEIGHT; m_join.list.generic.height = uis.height / 2 - CHAR_HEIGHT; - m_join.list.columns[0].width = w1 - 18*CHAR_WIDTH; - m_join.list.columns[1].width = 10*CHAR_WIDTH; - m_join.list.columns[2].width = 8*CHAR_WIDTH; + m_join.list.columns[0].width = w1 - 18 * CHAR_WIDTH; + m_join.list.columns[1].width = 10 * CHAR_WIDTH; + m_join.list.columns[2].width = 8 * CHAR_WIDTH; // // server info @@ -339,23 +349,24 @@ static void Size( menuFrameWork_t *self ) { // m_join.players.generic.x = w1 + MLIST_SCROLLBAR_WIDTH; m_join.players.generic.y = CHAR_HEIGHT; - m_join.players.generic.height = uis.height - CHAR_HEIGHT*2 - 1; + m_join.players.generic.height = uis.height - CHAR_HEIGHT * 2 - 1; - m_join.players.columns[0].width = 4*CHAR_WIDTH; - m_join.players.columns[1].width = 4*CHAR_WIDTH; - m_join.players.columns[2].width = w2 - MLIST_SCROLLBAR_WIDTH - 8*CHAR_WIDTH; + m_join.players.columns[0].width = 4 * CHAR_WIDTH; + m_join.players.columns[1].width = 4 * CHAR_WIDTH; + m_join.players.columns[2].width = w2 - MLIST_SCROLLBAR_WIDTH - 8 * CHAR_WIDTH; } -static menuSound_t Keydown( menuFrameWork_t *self, int key ) { +static menuSound_t Keydown(menuFrameWork_t *self, int key) +{ serverSlot_t *s = &m_join.servers[m_join.list.curvalue]; - switch( key ) { + switch (key) { case 'r': - Cvar_Set( "rcon_address", s->realAddress ); + Cvar_Set("rcon_address", s->realAddress); return QMS_SILENT; case ' ': - if( !Key_IsDown( K_ALT ) && m_join.list.numItems ) { + if (!Key_IsDown(K_ALT) && m_join.list.numItems) { PingSelected(); } else { PingServers(); @@ -366,19 +377,23 @@ static menuSound_t Keydown( menuFrameWork_t *self, int key ) { } } -static void Pop( menuFrameWork_t *self ) { +static void Pop(menuFrameWork_t *self) +{ FreeListedServers(); } -static void Expose( menuFrameWork_t *self ) { +static void Expose(menuFrameWork_t *self) +{ PingServers(); } -static void Free( menuFrameWork_t *self ) { - memset( &m_join, 0, sizeof( m_join ) ); +static void Free(menuFrameWork_t *self) +{ + memset(&m_join, 0, sizeof(m_join)); } -void M_Menu_Servers( void ) { +void M_Menu_Servers(void) +{ m_join.menu.name = "servers"; m_join.menu.title = "Server Browser"; @@ -394,10 +409,10 @@ void M_Menu_Servers( void ) { // server list // m_join.list.generic.type = MTYPE_LIST; - m_join.list.generic.flags = QMF_LEFT_JUSTIFY|QMF_HASFOCUS; + m_join.list.generic.flags = QMF_LEFT_JUSTIFY | QMF_HASFOCUS; m_join.list.generic.activate = Connect; m_join.list.generic.change = Change; - m_join.list.items = ( void ** )m_join.names; + m_join.list.items = (void **)m_join.names; m_join.list.numcolumns = 3; m_join.list.columns[0].uiFlags = UI_LEFT; @@ -411,7 +426,7 @@ void M_Menu_Servers( void ) { // server info // m_join.info.generic.type = MTYPE_LIST; - m_join.info.generic.flags = QMF_LEFT_JUSTIFY|QMF_HIDDEN; + m_join.info.generic.flags = QMF_LEFT_JUSTIFY | QMF_HIDDEN; m_join.info.numcolumns = 2; m_join.info.columns[0].uiFlags = UI_LEFT; @@ -423,7 +438,7 @@ void M_Menu_Servers( void ) { // player list // m_join.players.generic.type = MTYPE_LIST; - m_join.players.generic.flags = QMF_LEFT_JUSTIFY|QMF_HIDDEN|QMF_DISABLED; + m_join.players.generic.flags = QMF_LEFT_JUSTIFY | QMF_HIDDEN | QMF_DISABLED; m_join.players.mlFlags = MLF_HIDE_SCROLLBAR; m_join.players.numcolumns = 3; @@ -434,10 +449,10 @@ void M_Menu_Servers( void ) { m_join.players.columns[2].uiFlags = UI_LEFT; m_join.players.columns[2].name = "Name"; - Menu_AddItem( &m_join.menu, &m_join.list ); - Menu_AddItem( &m_join.menu, &m_join.info ); - Menu_AddItem( &m_join.menu, &m_join.players ); + Menu_AddItem(&m_join.menu, &m_join.list); + Menu_AddItem(&m_join.menu, &m_join.info); + Menu_AddItem(&m_join.menu, &m_join.players); - List_Append( &ui_menus, &m_join.menu.entry ); + List_Append(&ui_menus, &m_join.menu.entry); } |