/* ================= ArenaServers_UpdateMenu ================= */ static void ArenaServers_UpdateMenu( void ) { int i; int j; int count; char* buff; servernode_t* servernodeptr; table_t* tableptr; char *pingColor; if( g_arenaservers.numqueriedservers > 0 ) { // servers found if( g_arenaservers.refreshservers && ( g_arenaservers.currentping <= g_arenaservers.numqueriedservers ) ) { // show progress Com_sprintf( g_arenaservers.status.string, MAX_STATUSLENGTH, "%d of %d Arena Servers.", g_arenaservers.currentping, g_arenaservers.numqueriedservers); g_arenaservers.statusbar.string = "Press SPACE to stop"; qsort( g_arenaservers.serverlist, *g_arenaservers.numservers, sizeof( servernode_t ), ArenaServers_Compare); } else { // all servers pinged - enable controls g_arenaservers.master.generic.flags &= ~QMF_GRAYED; g_arenaservers.gametype.generic.flags &= ~QMF_GRAYED; g_arenaservers.sortkey.generic.flags &= ~QMF_GRAYED; g_arenaservers.showempty.generic.flags &= ~QMF_GRAYED; g_arenaservers.showfull.generic.flags &= ~QMF_GRAYED; g_arenaservers.list.generic.flags &= ~QMF_GRAYED; g_arenaservers.refresh.generic.flags &= ~QMF_GRAYED; g_arenaservers.go.generic.flags &= ~QMF_GRAYED; g_arenaservers.punkbuster.generic.flags &= ~QMF_GRAYED; // update status bar if( g_servertype >= UIAS_GLOBAL1 && g_servertype <= UIAS_GLOBAL5 ) { g_arenaservers.statusbar.string = quake3worldMessage; } else { g_arenaservers.statusbar.string = ""; } } } else { // no servers found if( g_arenaservers.refreshservers ) { strcpy( g_arenaservers.status.string,"Scanning For Servers." ); g_arenaservers.statusbar.string = "Press SPACE to stop"; // disable controls during refresh g_arenaservers.master.generic.flags |= QMF_GRAYED; g_arenaservers.gametype.generic.flags |= QMF_GRAYED; g_arenaservers.sortkey.generic.flags |= QMF_GRAYED; g_arenaservers.showempty.generic.flags |= QMF_GRAYED; g_arenaservers.showfull.generic.flags |= QMF_GRAYED; g_arenaservers.list.generic.flags |= QMF_GRAYED; g_arenaservers.refresh.generic.flags |= QMF_GRAYED; g_arenaservers.go.generic.flags |= QMF_GRAYED; g_arenaservers.punkbuster.generic.flags |= QMF_GRAYED; } else { if( g_arenaservers.numqueriedservers < 0 ) { strcpy(g_arenaservers.status.string,"No Response From Master Server." ); } else { strcpy(g_arenaservers.status.string,"No Servers Found." ); } // update status bar if( g_servertype >= UIAS_GLOBAL1 && g_servertype <= UIAS_GLOBAL5 ) { g_arenaservers.statusbar.string = quake3worldMessage; } else { g_arenaservers.statusbar.string = ""; } // end of refresh - set control state g_arenaservers.master.generic.flags &= ~QMF_GRAYED; g_arenaservers.gametype.generic.flags &= ~QMF_GRAYED; g_arenaservers.sortkey.generic.flags &= ~QMF_GRAYED; g_arenaservers.showempty.generic.flags &= ~QMF_GRAYED; g_arenaservers.showfull.generic.flags &= ~QMF_GRAYED; g_arenaservers.list.generic.flags |= QMF_GRAYED; g_arenaservers.refresh.generic.flags &= ~QMF_GRAYED; g_arenaservers.go.generic.flags |= QMF_GRAYED; g_arenaservers.punkbuster.generic.flags &= ~QMF_GRAYED; } // zero out list box g_arenaservers.list.numitems = 0; g_arenaservers.list.curvalue = 0; g_arenaservers.list.top = 0; // update picture ArenaServers_UpdatePicture(); return; } // build list box strings - apply culling filters servernodeptr = g_arenaservers.serverlist; count = *g_arenaservers.numservers; for( i = 0, j = 0; i < count; i++, servernodeptr++ ) { tableptr = &g_arenaservers.table[j]; tableptr->servernode = servernodeptr; buff = tableptr->buff; // can only cull valid results if( !g_emptyservers && !servernodeptr->numclients ) { continue; } if( !g_fullservers && ( servernodeptr->numclients == servernodeptr->maxclients ) ) { continue; } switch( g_gametype ) { case GAMES_ALL: break; case GAMES_FFA: if( servernodeptr->gametype != GT_FFA ) { continue; } break; case GAMES_TEAMPLAY: if( servernodeptr->gametype != GT_TEAM ) { continue; } break; case GAMES_TOURNEY: if( servernodeptr->gametype != GT_TOURNAMENT ) { continue; } break; case GAMES_CTF: if( servernodeptr->gametype != GT_CTF ) { continue; } break; } if( servernodeptr->pingtime < servernodeptr->minPing ) { pingColor = S_COLOR_BLUE; } else if( servernodeptr->maxPing && servernodeptr->pingtime > servernodeptr->maxPing ) { pingColor = S_COLOR_BLUE; } else if( servernodeptr->pingtime < 200 ) { pingColor = S_COLOR_GREEN; } else if( servernodeptr->pingtime < 400 ) { pingColor = S_COLOR_YELLOW; } else { pingColor = S_COLOR_RED; } Com_sprintf( buff, MAX_LISTBOXWIDTH, "%-20.20s %-12.12s %2d/%2d %-8.8s %4s%s%3d " S_COLOR_YELLOW "%s", servernodeptr->hostname, servernodeptr->mapname, servernodeptr->numclients, servernodeptr->maxclients, servernodeptr->gamename, netnames[servernodeptr->nettype], pingColor, servernodeptr->pingtime, servernodeptr->bPB ? "Yes" : "No" ); j++; } g_arenaservers.list.numitems = j; g_arenaservers.list.curvalue = 0; g_arenaservers.list.top = 0; // update picture ArenaServers_UpdatePicture(); }
/* ================= ArenaServers_Event ================= */ static void ArenaServers_Event( void* ptr, int event ) { int id; id = ((menucommon_s*)ptr)->id; if( event != QM_ACTIVATED && id != ID_LIST ) { return; } switch( id ) { case ID_MASTER: g_arenaservers.master.curvalue = ArenaServers_SetType(g_arenaservers.master.curvalue); cvarSystem->SetValue( "ui_browserMaster", g_arenaservers.master.curvalue); break; case ID_GAMETYPE: cvarSystem->SetValue( "ui_browserGameType", g_arenaservers.gametype.curvalue ); g_gametype = g_arenaservers.gametype.curvalue; ArenaServers_UpdateMenu(); break; case ID_SORTKEY: cvarSystem->SetValue( "ui_browserSortKey", g_arenaservers.sortkey.curvalue ); ArenaServers_Sort( g_arenaservers.sortkey.curvalue ); ArenaServers_UpdateMenu(); break; case ID_SHOW_FULL: cvarSystem->SetValue( "ui_browserShowFull", g_arenaservers.showfull.curvalue ); g_fullservers = g_arenaservers.showfull.curvalue; ArenaServers_UpdateMenu(); break; case ID_SHOW_EMPTY: cvarSystem->SetValue( "ui_browserShowEmpty", g_arenaservers.showempty.curvalue ); g_emptyservers = g_arenaservers.showempty.curvalue; ArenaServers_UpdateMenu(); break; case ID_LIST: if( event == QM_GOTFOCUS ) { ArenaServers_UpdatePicture(); } break; case ID_SCROLL_UP: ScrollList_Key( &g_arenaservers.list, K_UPARROW ); break; case ID_SCROLL_DOWN: ScrollList_Key( &g_arenaservers.list, K_DOWNARROW ); break; case ID_BACK: ArenaServers_StopRefresh(); ArenaServers_SaveChanges(); UI_PopMenu(); break; case ID_REFRESH: ArenaServers_StartRefresh(); break; case ID_SPECIFY: UI_SpecifyServerMenu(); break; case ID_CREATE: UI_StartServerMenu( true ); break; case ID_CONNECT: ArenaServers_Go(); break; case ID_REMOVE: ArenaServers_Remove(); ArenaServers_UpdateMenu(); break; case ID_PUNKBUSTER: if (g_arenaservers.punkbuster.curvalue) { UI_ConfirmMenu_Style( "Enable Punkbuster?", UI_CENTER|UI_INVERSE|UI_SMALLFONT, 0, Punkbuster_ConfirmEnable ); } else { UI_ConfirmMenu_Style( "Disable Punkbuster?", UI_CENTER|UI_INVERSE|UI_SMALLFONT, 0, Punkbuster_ConfirmDisable ); } break; } }
/* ================= ArenaServers_Event ================= */ static void ArenaServers_Event( void* ptr, int event ) { char info[MAX_STRING_CHARS]; int id; id = ((menucommon_s*)ptr)->id; if( event != QM_ACTIVATED && id != ID_LIST ) { return; } switch( id ) { case ID_MASTER: trap_Cvar_SetValue( "ui_browserMaster", g_arenaservers.master.curvalue ); ArenaServers_SetType( g_arenaservers.master.curvalue ); break; case ID_GAMETYPE: trap_Cvar_SetValue( "ui_browserGameType", g_arenaservers.gametype.curvalue ); g_gametype = g_arenaservers.gametype.curvalue; serverStatus.newDisplayList = qtrue; break; case ID_SORTKEY: trap_Cvar_SetValue( "ui_browserSortKey", g_arenaservers.sortkey.curvalue ); g_sortkey = g_arenaservers.sortkey.curvalue; serverStatus.newDisplayList = qtrue; break; case ID_SHOW_FULL: trap_Cvar_SetValue( "ui_browserShowFull", g_arenaservers.showfull.curvalue ); g_fullservers = g_arenaservers.showfull.curvalue; serverStatus.newDisplayList = qtrue; break; case ID_SHOW_EMPTY: trap_Cvar_SetValue( "ui_browserShowEmpty", g_arenaservers.showempty.curvalue ); g_emptyservers = g_arenaservers.showempty.curvalue; serverStatus.newDisplayList = qtrue; break; case ID_SHOW_AWONLY: trap_Cvar_SetValue( "ui_browserShowAwOnly", g_arenaservers.showawonly.curvalue ); // g_emptyservers = g_arenaservers.showawonly.curvalue; serverStatus.newDisplayList = qtrue; break; case ID_LIST: if( event == QM_GOTFOCUS ) { ArenaServers_UpdatePicture(); } break; case ID_SCROLL_UP: ScrollList_Key( &g_arenaservers.list, K_UPARROW ); break; case ID_SCROLL_DOWN: ScrollList_Key( &g_arenaservers.list, K_DOWNARROW ); break; case ID_BACK: ArenaServers_StopRefresh(); UI_PopMenu(); break; case ID_REFRESH: ArenaServers_StartRefresh( qtrue ); break; case ID_SPECIFY: UI_SpecifyServerMenu(); break; case ID_CONNECT: ArenaServers_Go(); break; case ID_INFO: trap_LAN_GetServerInfo(g_arenaservers.master.curvalue, serverStatus.displayServers[g_arenaservers.list.curvalue], info, MAX_STRING_CHARS); if ( serverStatus.numDisplayServers > 0 && strlen(Info_ValueForKey(info, "addr")) > 0 ) { UI_ServerInfoMenu( Info_ValueForKey(info, "addr") ); } break; case ID_FAVORITE: ArenaServers_AddRemoveFavorite(); break; } }
/* ================= ArenaServers_UpdateMenu ================= */ static void ArenaServers_UpdateMenu( qboolean full ) { static char info[MAX_STRING_CHARS]; int index; char* buff; table_t* tableptr; int ping; int clients; int maxclients; int gametype; char hostname[MAX_HOSTNAMELENGTH]; char mapname[MAX_MAPNAMELENGTH]; char *pingColor; char *gametypeColor; g_arenaservers.numqueriedservers = trap_LAN_GetServerCount(g_arenaservers.master.curvalue); if( g_arenaservers.numqueriedservers > 0 ) { // servers found if( serverStatus.refreshActive ) { // show progress Com_sprintf( g_arenaservers.status.string, MAX_STATUSLENGTH, "Found %d Servers. Refreshing... (%d)", g_arenaservers.numqueriedservers, serverStatus.numRefreshedServers); g_arenaservers.statusbar.string = "Press SPACE to stop"; // disable controls during refresh g_arenaservers.master.generic.flags |= QMF_GRAYED; g_arenaservers.gametype.generic.flags |= QMF_GRAYED; g_arenaservers.sortkey.generic.flags |= QMF_GRAYED; g_arenaservers.showempty.generic.flags |= QMF_GRAYED; g_arenaservers.showfull.generic.flags |= QMF_GRAYED; g_arenaservers.showawonly.generic.flags |= QMF_GRAYED; g_arenaservers.list.generic.flags |= QMF_GRAYED; g_arenaservers.refresh.generic.flags |= QMF_GRAYED; g_arenaservers.go.generic.flags |= QMF_GRAYED; g_arenaservers.favorite.generic.flags |= QMF_GRAYED; g_arenaservers.info.generic.flags |= QMF_GRAYED; } else { // all servers pinged - enable controls g_arenaservers.master.generic.flags &= ~QMF_GRAYED; g_arenaservers.gametype.generic.flags &= ~QMF_GRAYED; g_arenaservers.sortkey.generic.flags &= ~QMF_GRAYED; g_arenaservers.showempty.generic.flags &= ~QMF_GRAYED; g_arenaservers.showfull.generic.flags &= ~QMF_GRAYED; g_arenaservers.showawonly.generic.flags &= ~QMF_GRAYED; g_arenaservers.list.generic.flags &= ~QMF_GRAYED; g_arenaservers.refresh.generic.flags &= ~QMF_GRAYED; g_arenaservers.go.generic.flags &= ~QMF_GRAYED; g_arenaservers.favorite.generic.flags &= ~QMF_GRAYED; g_arenaservers.info.generic.flags &= ~QMF_GRAYED; // update status bar if ( ui_browserShowAwOnly.integer ) { strcpy(g_arenaservers.status.string, va("%i Servers running Afterwards with %i Players found.", serverStatus.numDisplayServers, serverStatus.numPlayersOnServers)); } else { strcpy(g_arenaservers.status.string, va("%i Servers with %i Players found.", serverStatus.numDisplayServers, serverStatus.numPlayersOnServers)); } if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) { g_arenaservers.statusbar.string = quake3worldMessage; } else { g_arenaservers.statusbar.string = ""; } if (!(g_arenaservers.grlogo.generic.flags & QMF_HIDDEN)) { g_arenaservers.statusbar.string = globalRankingsMessage; } } } else { // no servers found if( serverStatus.refreshActive ) { strcpy( g_arenaservers.status.string,"Scanning For Servers." ); g_arenaservers.statusbar.string = "Press SPACE to stop"; // disable controls during refresh g_arenaservers.master.generic.flags |= QMF_GRAYED; g_arenaservers.gametype.generic.flags |= QMF_GRAYED; g_arenaservers.sortkey.generic.flags |= QMF_GRAYED; g_arenaservers.showempty.generic.flags |= QMF_GRAYED; g_arenaservers.showfull.generic.flags |= QMF_GRAYED; g_arenaservers.showawonly.generic.flags |= QMF_GRAYED; g_arenaservers.list.generic.flags |= QMF_GRAYED; g_arenaservers.refresh.generic.flags |= QMF_GRAYED; g_arenaservers.go.generic.flags |= QMF_GRAYED; g_arenaservers.favorite.generic.flags |= QMF_GRAYED; g_arenaservers.info.generic.flags |= QMF_GRAYED; } else { if( g_arenaservers.numqueriedservers < 0 ) { strcpy(g_arenaservers.status.string,"No Response From Master Server." ); } else { if ( ui_browserShowAwOnly.integer ) strcpy(g_arenaservers.status.string,"No Servers running Afterwards found." ); else strcpy(g_arenaservers.status.string,"No Servers Found." ); } // update status bar if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) { g_arenaservers.statusbar.string = quake3worldMessage; } else { g_arenaservers.statusbar.string = ""; } // end of refresh - set control state g_arenaservers.master.generic.flags &= ~QMF_GRAYED; g_arenaservers.gametype.generic.flags &= ~QMF_GRAYED; g_arenaservers.sortkey.generic.flags &= ~QMF_GRAYED; g_arenaservers.showempty.generic.flags &= ~QMF_GRAYED; g_arenaservers.showfull.generic.flags &= ~QMF_GRAYED; g_arenaservers.showawonly.generic.flags &= ~QMF_GRAYED; g_arenaservers.list.generic.flags |= QMF_GRAYED; g_arenaservers.refresh.generic.flags &= ~QMF_GRAYED; g_arenaservers.go.generic.flags |= QMF_GRAYED; g_arenaservers.favorite.generic.flags &= ~QMF_GRAYED; g_arenaservers.info.generic.flags &= ~QMF_GRAYED; } // zero out list box g_arenaservers.list.numitems = 0; g_arenaservers.list.curvalue = 0; g_arenaservers.list.top = 0; // update picture ArenaServers_UpdatePicture(); return; } for (index = 0; (index < serverStatus.numDisplayServers && index < MAX_LISTBOXITEMS && (index < 11 || full)); index++ ) { tableptr = &g_arenaservers.table[index]; buff = tableptr->buff; trap_LAN_GetServerInfo(g_arenaservers.master.curvalue, serverStatus.displayServers[index], info, MAX_STRING_CHARS); Q_strncpyz(mapname, Info_ValueForKey(info, "mapname"), MAX_MAPNAMELENGTH ); clients = atoi(Info_ValueForKey(info, "clients")); maxclients = atoi(Info_ValueForKey(info, "sv_maxclients")); ping = atoi(Info_ValueForKey(info, "ping")); if (ping == -1) { // if we ever see a ping that is out of date, do a server refresh // UI_UpdatePendingPings(); } if( ping < 200 ) pingColor = S_COLOR_GREEN; else if( ping < 400 ) pingColor = S_COLOR_YELLOW; else pingColor = S_COLOR_RED; if (ping <= 0) { Q_strncpyz( hostname, Info_ValueForKey( info, "addr"), MAX_HOSTNAMELENGTH ); } else { if ( g_arenaservers.master.curvalue == AS_LOCAL ) { Com_sprintf( hostname, sizeof(hostname), "%s [%s]", Info_ValueForKey(info, "hostname"), netnames[atoi(Info_ValueForKey(info, "nettype"))] ); } else { Q_strncpyz( hostname, Info_ValueForKey( info, "hostname"), MAX_HOSTNAMELENGTH ); } } UI_DeleteColorCodes( hostname ); gametype = atoi(Info_ValueForKey(info, "gametype")); if ( gametype > GT_MAX_GAME_TYPE ) gametype = GT_MAX_GAME_TYPE; // CHANGE "awbeta2" back to "afterwards"!!! if ( Q_stricmp(Info_ValueForKey(info, "game"), "afterwards") == 0 ) { // afterwards game -> show color code and gametype short switch (gametype) { case 0: gametypeColor = ""; break; // orange case 1: gametypeColor = S_COLOR_RED; break; default: gametypeColor = S_COLOR_YELLOW; } } else { // not an afterwards game -> yellow and "--" for gametype gametype = GT_MAX_GAME_TYPE; gametypeColor = S_COLOR_YELLOW; } Com_sprintf( buff, MAX_LISTBOXWIDTH+8, "%s%s %-32.32s %-16.16s %2d/%2d %s%3d", gametypeColor, gamenames[gametype], hostname, mapname, clients, maxclients, pingColor, ping ); } // Com_sprintf( g_arenaservers.status.string, MAX_STATUSLENGTH, "%d of %d Arena Servers.", serverStatus.numDisplayServers, *g_arenaservers.numservers ); g_arenaservers.list.numitems = (serverStatus.numDisplayServers < MAX_LISTBOXITEMS) ? serverStatus.numDisplayServers : MAX_LISTBOXITEMS ; g_arenaservers.list.curvalue = 0; g_arenaservers.list.top = 0; // update picture ArenaServers_UpdatePicture(); }
/* ================= ArenaServers_UpdateMenu ================= */ static void ArenaServers_UpdateMenu( void ) { int i; int j; int count, bufAddr; char* buff; servernode_t* servernodeptr; table_t* tableptr; char *b, *pingColor; if( g_arenaservers.numqueriedservers > 0 ) { // servers found if( g_arenaservers.refreshservers && ( g_arenaservers.currentping <= g_arenaservers.numqueriedservers ) ) { // show progress Com_sprintf( g_arenaservers.status.string, MAX_STATUSLENGTH, "%d of %d Arena Servers.", g_arenaservers.currentping, g_arenaservers.numqueriedservers); g_arenaservers.statusbar.string = "Press SPACE to stop"; qsort( g_arenaservers.serverlist, *g_arenaservers.numservers, sizeof( servernode_t ), ArenaServers_Compare); } else { // all servers pinged - enable controls g_arenaservers.master.generic.flags &= ~QMF_GRAYED; g_arenaservers.gametype.generic.flags &= ~QMF_GRAYED; g_arenaservers.sortkey.generic.flags &= ~QMF_GRAYED; g_arenaservers.showempty.generic.flags &= ~QMF_GRAYED; g_arenaservers.onlyhumans.generic.flags &= ~QMF_GRAYED; g_arenaservers.hideprivate.generic.flags &= ~QMF_GRAYED; g_arenaservers.showfull.generic.flags &= ~QMF_GRAYED; g_arenaservers.list.generic.flags &= ~QMF_GRAYED; g_arenaservers.refresh.generic.flags &= ~QMF_GRAYED; g_arenaservers.go.generic.flags &= ~QMF_GRAYED; // update status bar if( g_servertype >= UIAS_GLOBAL1 && g_servertype <= UIAS_GLOBAL5 ) { g_arenaservers.statusbar.string = quake3worldMessage; } else { g_arenaservers.statusbar.string = ""; } } } else { // no servers found if( g_arenaservers.refreshservers ) { strcpy( g_arenaservers.status.string,"Scanning For Servers." ); g_arenaservers.statusbar.string = "Press SPACE to stop"; // disable controls during refresh g_arenaservers.master.generic.flags |= QMF_GRAYED; g_arenaservers.gametype.generic.flags |= QMF_GRAYED; g_arenaservers.sortkey.generic.flags |= QMF_GRAYED; g_arenaservers.showempty.generic.flags |= QMF_GRAYED; g_arenaservers.onlyhumans.generic.flags |= QMF_GRAYED; g_arenaservers.hideprivate.generic.flags |= QMF_GRAYED; g_arenaservers.showfull.generic.flags |= QMF_GRAYED; g_arenaservers.list.generic.flags |= QMF_GRAYED; g_arenaservers.refresh.generic.flags |= QMF_GRAYED; g_arenaservers.go.generic.flags |= QMF_GRAYED; } else { if( g_arenaservers.numqueriedservers < 0 ) { strcpy(g_arenaservers.status.string,"No Response From Master Server." ); } else { strcpy(g_arenaservers.status.string,"No Servers Found." ); } // update status bar if( g_servertype >= UIAS_GLOBAL1 && g_servertype <= UIAS_GLOBAL5 ) { g_arenaservers.statusbar.string = quake3worldMessage; } else { g_arenaservers.statusbar.string = ""; } // end of refresh - set control state g_arenaservers.master.generic.flags &= ~QMF_GRAYED; g_arenaservers.gametype.generic.flags &= ~QMF_GRAYED; g_arenaservers.sortkey.generic.flags &= ~QMF_GRAYED; g_arenaservers.showempty.generic.flags &= ~QMF_GRAYED; g_arenaservers.onlyhumans.generic.flags &= ~QMF_GRAYED; g_arenaservers.hideprivate.generic.flags &= ~QMF_GRAYED; g_arenaservers.showfull.generic.flags &= ~QMF_GRAYED; g_arenaservers.list.generic.flags |= QMF_GRAYED; g_arenaservers.refresh.generic.flags &= ~QMF_GRAYED; g_arenaservers.go.generic.flags |= QMF_GRAYED; } // zero out list box g_arenaservers.list.numitems = 0; g_arenaservers.list.curvalue = 0; g_arenaservers.list.top = 0; // update picture ArenaServers_UpdatePicture(); return; } // build list box strings - apply culling filters servernodeptr = g_arenaservers.serverlist; count = *g_arenaservers.numservers; for( i = 0, j = 0; i < count; i++, servernodeptr++ ) { tableptr = &g_arenaservers.table[j]; tableptr->servernode = servernodeptr; buff = tableptr->buff; // can only cull valid results if( !g_emptyservers && !servernodeptr->numclients ) { continue; } //If "Show only humans" and "Hide empty server" are enabled hide servers that only have bots if( !g_emptyservers && g_onlyhumans && !servernodeptr->humanclients ) { continue; } if( !g_fullservers && ( servernodeptr->numclients == servernodeptr->maxclients ) ) { continue; } switch( g_gametype ) { case GAMES_ALL: break; case GAMES_FFA: if( servernodeptr->gametype != GT_FFA ) { continue; } break; case GAMES_TEAMPLAY: if( servernodeptr->gametype != GT_TEAM ) { continue; } break; case GAMES_TOURNEY: if( servernodeptr->gametype != GT_TOURNAMENT ) { continue; } break; case GAMES_CTF: if( servernodeptr->gametype != GT_CTF ) { continue; } break; case GAMES_1FCTF: if( servernodeptr->gametype != GT_1FCTF ) { continue; } break; case GAMES_OBELISK: if( servernodeptr->gametype != GT_OBELISK ) { continue; } break; case GAMES_HARVESTER: if( servernodeptr->gametype != GT_HARVESTER ) { continue; } break; case GAMES_ELIMINATION: if( servernodeptr->gametype != GT_ELIMINATION ) { continue; } break; case GAMES_CTF_ELIMINATION: if( servernodeptr->gametype != GT_CTF_ELIMINATION ) { continue; } break; case GAMES_LMS: if( servernodeptr->gametype != GT_LMS ) { continue; } break; case GAMES_DOUBLE_D: if( servernodeptr->gametype != GT_DOUBLE_D ) { continue; } break; case GAMES_DOM: if( servernodeptr->gametype != GT_DOMINATION ) { continue; } break; } if(g_hideprivate && servernodeptr->needPass) continue; if( servernodeptr->pingtime < servernodeptr->minPing ) { pingColor = S_COLOR_BLUE; } else if( servernodeptr->maxPing && servernodeptr->pingtime > servernodeptr->maxPing ) { pingColor = S_COLOR_BLUE; } else if( servernodeptr->pingtime < 200 ) { pingColor = S_COLOR_GREEN; } else if( servernodeptr->pingtime < 400 ) { pingColor = S_COLOR_YELLOW; } else { pingColor = S_COLOR_RED; } /* Com_sprintf( buff, MAX_LISTBOXWIDTH, "%-20.20s %-12.12s %2d/%2d %-8.8s %3s %s%3d ", servernodeptr->hostname, servernodeptr->mapname, servernodeptr->numclients, servernodeptr->maxclients, servernodeptr->gamename, netnames[servernodeptr->nettype], pingColor, servernodeptr->pingtime ); //, servernodeptr->bPB ? "Yes" : "No" */ b = buff; *b++ = '^'; *b++ = '7'; bufAddr = Q_strcpyColor( servernodeptr->hostname, b, 30 ); b += bufAddr; *b++ = ' '; *b++ = '^'; *b++ = '7'; bufAddr = Q_strcpyColor( servernodeptr->mapname, b, 16 ); b += bufAddr; *b++ = ' '; if(g_onlyhumans == 0) Com_sprintf( b, 8, "%2d/%2d ", servernodeptr->numclients, servernodeptr->maxclients ); else Com_sprintf( b, 8, "%2d/%2d ", servernodeptr->humanclients, servernodeptr->maxclients ); b += 6; bufAddr = Q_strcpyColor( servernodeptr->gamename, b, 8 ); b += bufAddr; *b++ = ' '; bufAddr = Q_strcpyColor( netnames[servernodeptr->nettype], b, 3 ); b += bufAddr; *b++ = ' '; Com_sprintf( b, 12, "%s%3d ", pingColor, servernodeptr->pingtime ); j++; } g_arenaservers.list.numitems = j; g_arenaservers.list.curvalue = 0; g_arenaservers.list.top = 0; // update picture ArenaServers_UpdatePicture(); }
/* ================= ArenaServers_Event ================= */ static void ArenaServers_Event( void* ptr, int event ) { int id; id = ((menucommon_s*)ptr)->id; if( event != QM_ACTIVATED && id != ID_LIST ) { return; } switch( id ) { case ID_MASTER: g_arenaservers.master.curvalue = ArenaServers_SetType(g_arenaservers.master.curvalue); trap_Cvar_SetValue( "ui_browserMaster", g_arenaservers.master.curvalue); break; case ID_GAMETYPE: trap_Cvar_SetValue( "ui_browserGameType", g_arenaservers.gametype.curvalue ); g_gametype = g_arenaservers.gametype.curvalue; ArenaServers_UpdateMenu(); break; case ID_SORTKEY: trap_Cvar_SetValue( "ui_browserSortKey", g_arenaservers.sortkey.curvalue ); ArenaServers_Sort( g_arenaservers.sortkey.curvalue ); ArenaServers_UpdateMenu(); break; case ID_SHOW_FULL: trap_Cvar_SetValue( "ui_browserShowFull", g_arenaservers.showfull.curvalue ); g_fullservers = g_arenaservers.showfull.curvalue; ArenaServers_UpdateMenu(); break; case ID_SHOW_EMPTY: trap_Cvar_SetValue( "ui_browserShowEmpty", g_arenaservers.showempty.curvalue ); g_emptyservers = g_arenaservers.showempty.curvalue; ArenaServers_UpdateMenu(); break; case ID_ONLY_HUMANS: trap_Cvar_SetValue( "ui_browserOnlyHumans", g_arenaservers.onlyhumans.curvalue ); g_onlyhumans = g_arenaservers.onlyhumans.curvalue; ArenaServers_UpdateMenu(); break; case ID_HIDE_PRIVATE: //trap_Cvar_SetValue( "ui_browserHidePrivate", g_arenaservers.hideprivate.curvalue ); g_hideprivate = g_arenaservers.hideprivate.curvalue; ArenaServers_UpdateMenu(); break; case ID_LIST: if( event == QM_GOTFOCUS ) { ArenaServers_UpdatePicture(); } break; case ID_SCROLL_UP: ScrollList_Key( &g_arenaservers.list, K_UPARROW ); break; case ID_SCROLL_DOWN: ScrollList_Key( &g_arenaservers.list, K_DOWNARROW ); break; case ID_BACK: ArenaServers_StopRefresh(); ArenaServers_SaveChanges(); UI_PopMenu(); break; case ID_REFRESH: ArenaServers_StartRefresh(); break; case ID_SPECIFY: UI_SpecifyServerMenu(); break; case ID_CREATE: UI_StartServerMenu( qtrue ); break; case ID_CONNECT: ArenaServers_Go(); break; case ID_REMOVE: ArenaServers_Remove(); ArenaServers_UpdateMenu(); break; } }