aboutsummaryrefslogtreecommitdiffstats
path: root/code/q3_ui
diff options
context:
space:
mode:
authorthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-04-11 18:39:03 +0000
committerthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-04-11 18:39:03 +0000
commita957b652bae5d1a5320eb01c349437bc7197b91a (patch)
treee0a83c4a59321c9fe728cde2e0572fc8b496e143 /code/q3_ui
parent23d2a365bdf5b9e2fdf88809db685512e5fddf7c (diff)
downloadioquake3-aero-a957b652bae5d1a5320eb01c349437bc7197b91a.tar.gz
ioquake3-aero-a957b652bae5d1a5320eb01c349437bc7197b91a.zip
- Revamp in-game server browser: you can now scan for games on multiple master servers, while retaining compatibility with old QVMs.
- Make Master server reporting/server queries ipv6 capable. git-svn-id: svn://svn.icculus.org/quake3/trunk@1311 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/q3_ui')
-rw-r--r--code/q3_ui/ui_servers2.c104
1 files changed, 52 insertions, 52 deletions
diff --git a/code/q3_ui/ui_servers2.c b/code/q3_ui/ui_servers2.c
index fa679f6..6c7cf16 100644
--- a/code/q3_ui/ui_servers2.c
+++ b/code/q3_ui/ui_servers2.c
@@ -80,10 +80,13 @@ MULTIPLAYER MENU (SERVER BROWSER)
#define GR_LOGO 30
#define GR_LETTERS 31
-#define AS_LOCAL 0
-#define AS_MPLAYER 1
-#define AS_GLOBAL 2
-#define AS_FAVORITES 3
+#define UIAS_LOCAL 0
+#define UIAS_GLOBAL1 1
+#define UIAS_GLOBAL2 2
+#define UIAS_GLOBAL3 3
+#define UIAS_GLOBAL4 4
+#define UIAS_GLOBAL5 5
+#define UIAS_FAVORITES 6
#define SORT_HOST 0
#define SORT_MAP 1
@@ -99,7 +102,11 @@ MULTIPLAYER MENU (SERVER BROWSER)
static const char *master_items[] = {
"Local",
- "Internet",
+ "Internet1",
+ "Internet2",
+ "Internet3",
+ "Internet4",
+ "Internet5",
"Favorites",
NULL
};
@@ -241,8 +248,6 @@ static servernode_t g_localserverlist[MAX_LOCALSERVERS];
static int g_numlocalservers;
static servernode_t g_favoriteserverlist[MAX_FAVORITESERVERS];
static int g_numfavoriteservers;
-static servernode_t g_mplayerserverlist[MAX_GLOBALSERVERS];
-static int g_nummplayerservers;
static int g_servertype;
static int g_gametype;
static int g_sortkey;
@@ -403,7 +408,7 @@ static void ArenaServers_UpdateMenu( void ) {
g_arenaservers.punkbuster.generic.flags &= ~QMF_GRAYED;
// update status bar
- if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) {
+ if( g_servertype >= UIAS_GLOBAL1 && g_servertype <= UIAS_GLOBAL5 ) {
g_arenaservers.statusbar.string = quake3worldMessage;
}
else {
@@ -438,7 +443,7 @@ static void ArenaServers_UpdateMenu( void ) {
}
// update status bar
- if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) {
+ if( g_servertype >= UIAS_GLOBAL1 && g_servertype <= UIAS_GLOBAL5 ) {
g_arenaservers.statusbar.string = quake3worldMessage;
}
else {
@@ -618,7 +623,7 @@ static void ArenaServers_Insert( char* adrstr, char* info, int pingtime )
int i;
- if ((pingtime >= ArenaServers_MaxPing()) && (g_servertype != AS_FAVORITES))
+ if ((pingtime >= ArenaServers_MaxPing()) && (g_servertype != UIAS_FAVORITES))
{
// slow global or local servers do not get entered
return;
@@ -809,7 +814,7 @@ static void ArenaServers_StopRefresh( void )
g_arenaservers.refreshservers = qfalse;
- if (g_servertype == AS_FAVORITES)
+ if (g_servertype == UIAS_FAVORITES)
{
// nonresponsive favorites must be shown
ArenaServers_InsertFavorites();
@@ -845,8 +850,8 @@ static void ArenaServers_DoRefresh( void )
if (uis.realtime < g_arenaservers.refreshtime)
{
- if (g_servertype != AS_FAVORITES) {
- if (g_servertype == AS_LOCAL) {
+ if (g_servertype != UIAS_FAVORITES) {
+ if (g_servertype == UIAS_LOCAL) {
if (!trap_LAN_GetServerCount(g_servertype)) {
return;
}
@@ -920,7 +925,7 @@ static void ArenaServers_DoRefresh( void )
// get results of servers query
// counts can increase as servers respond
- if (g_servertype == AS_FAVORITES) {
+ if (g_servertype == UIAS_FAVORITES) {
g_arenaservers.numqueriedservers = g_arenaservers.numfavoriteaddresses;
} else {
g_arenaservers.numqueriedservers = trap_LAN_GetServerCount(g_servertype);
@@ -950,7 +955,7 @@ static void ArenaServers_DoRefresh( void )
// get an address to ping
- if (g_servertype == AS_FAVORITES) {
+ if (g_servertype == UIAS_FAVORITES) {
strcpy( adrstr, g_arenaservers.favoriteaddresses[g_arenaservers.currentping] );
} else {
trap_LAN_GetServerAddressString(g_servertype, g_arenaservers.currentping, adrstr, MAX_ADDRESSLENGTH );
@@ -1007,19 +1012,12 @@ static void ArenaServers_StartRefresh( void )
// place menu in zeroed state
ArenaServers_UpdateMenu();
- if( g_servertype == AS_LOCAL ) {
+ if( g_servertype == UIAS_LOCAL ) {
trap_Cmd_ExecuteText( EXEC_APPEND, "localservers\n" );
return;
}
- if( g_servertype == AS_GLOBAL || g_servertype == AS_MPLAYER ) {
- if( g_servertype == AS_GLOBAL ) {
- i = 0;
- }
- else {
- i = 1;
- }
-
+ if( g_servertype >= UIAS_GLOBAL1 && g_servertype <= UIAS_GLOBAL5 ) {
switch( g_arenaservers.gametype.curvalue ) {
default:
case GAMES_ALL:
@@ -1055,10 +1053,10 @@ static void ArenaServers_StartRefresh( void )
protocol[0] = '\0';
trap_Cvar_VariableStringBuffer( "debug_protocol", protocol, sizeof(protocol) );
if (strlen(protocol)) {
- trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d %s%s\n", i, protocol, myargs ));
+ trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d %s%s\n", g_servertype - 1, protocol, myargs ));
}
else {
- trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d %d%s\n", i, (int)trap_Cvar_VariableValue( "protocol" ), myargs ) );
+ trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d %d%s\n", g_servertype - 1, (int)trap_Cvar_VariableValue( "protocol" ), myargs ) );
}
}
}
@@ -1101,43 +1099,52 @@ void ArenaServers_Sort( int type ) {
ArenaServers_SetType
=================
*/
-void ArenaServers_SetType( int type )
+int ArenaServers_SetType( int type )
{
- if (g_servertype == type)
- return;
+ if(type >= UIAS_GLOBAL1 && type <= UIAS_GLOBAL5)
+ {
+ char masterstr[2], cvarname[sizeof("sv_master1")];
+
+ while(type <= UIAS_GLOBAL5)
+ {
+ Com_sprintf(cvarname, sizeof(cvarname), "sv_master%d", type);
+ trap_Cvar_VariableStringBuffer(cvarname, masterstr, sizeof(masterstr));
+ if(*masterstr)
+ break;
+
+ type++;
+ }
+ }
g_servertype = type;
switch( type ) {
default:
- case AS_LOCAL:
+ case UIAS_LOCAL:
g_arenaservers.remove.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
g_arenaservers.serverlist = g_localserverlist;
g_arenaservers.numservers = &g_numlocalservers;
g_arenaservers.maxservers = MAX_LOCALSERVERS;
break;
- case AS_GLOBAL:
+ case UIAS_GLOBAL1:
+ case UIAS_GLOBAL2:
+ case UIAS_GLOBAL3:
+ case UIAS_GLOBAL4:
+ case UIAS_GLOBAL5:
g_arenaservers.remove.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
g_arenaservers.serverlist = g_globalserverlist;
g_arenaservers.numservers = &g_numglobalservers;
g_arenaservers.maxservers = MAX_GLOBALSERVERS;
break;
- case AS_FAVORITES:
+ case UIAS_FAVORITES:
g_arenaservers.remove.generic.flags &= ~(QMF_INACTIVE|QMF_HIDDEN);
g_arenaservers.serverlist = g_favoriteserverlist;
g_arenaservers.numservers = &g_numfavoriteservers;
g_arenaservers.maxservers = MAX_FAVORITESERVERS;
break;
- case AS_MPLAYER:
- g_arenaservers.remove.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
- g_arenaservers.serverlist = g_mplayerserverlist;
- g_arenaservers.numservers = &g_nummplayerservers;
- g_arenaservers.maxservers = MAX_GLOBALSERVERS;
- break;
-
}
if( !*g_arenaservers.numservers ) {
@@ -1150,6 +1157,8 @@ void ArenaServers_SetType( int type )
ArenaServers_UpdateMenu();
}
strcpy(g_arenaservers.status.string,"hit refresh to update");
+
+ return type;
}
/*
@@ -1181,7 +1190,6 @@ ArenaServers_Event
*/
static void ArenaServers_Event( void* ptr, int event ) {
int id;
- int value;
id = ((menucommon_s*)ptr)->id;
@@ -1191,13 +1199,8 @@ static void ArenaServers_Event( void* ptr, int event ) {
switch( id ) {
case ID_MASTER:
- value = g_arenaservers.master.curvalue;
- if (value >= 1)
- {
- value++;
- }
- trap_Cvar_SetValue( "ui_browserMaster", value );
- ArenaServers_SetType( value );
+ g_arenaservers.master.curvalue = ArenaServers_SetType(g_arenaservers.master.curvalue);
+ trap_Cvar_SetValue( "ui_browserMaster", g_arenaservers.master.curvalue);
break;
case ID_GAMETYPE:
@@ -1304,7 +1307,7 @@ static sfxHandle_t ArenaServers_MenuKey( int key ) {
return menu_move_sound;
}
- if( ( key == K_DEL || key == K_KP_DEL ) && ( g_servertype == AS_FAVORITES ) &&
+ if( ( key == K_DEL || key == K_KP_DEL ) && ( g_servertype == UIAS_FAVORITES ) &&
( Menu_ItemAtCursor( &g_arenaservers.menu) == &g_arenaservers.list ) ) {
ArenaServers_Remove();
ArenaServers_UpdateMenu();
@@ -1328,7 +1331,6 @@ ArenaServers_MenuInit
*/
static void ArenaServers_MenuInit( void ) {
int i;
- int type;
int y;
int value;
static char statusbuffer[MAX_STATUSLENGTH];
@@ -1600,9 +1602,7 @@ static void ArenaServers_MenuInit( void ) {
g_arenaservers.punkbuster.curvalue = Com_Clamp( 0, 1, trap_Cvar_VariableValue( "cl_punkbuster" ) );
// force to initial state and refresh
- type = g_servertype;
- g_servertype = -1;
- ArenaServers_SetType( type );
+ g_arenaservers.master.curvalue = g_servertype = ArenaServers_SetType(g_servertype);
trap_Cvar_Register(NULL, "debug_protocol", "", 0 );
}