From faa96f6d3a7c0e66503faf413b6df41c369d62aa Mon Sep 17 00:00:00 2001 From: Dominik Geyer Date: Sun, 5 Oct 2008 09:57:46 +0000 Subject: show if servers use non-standard tuning and let serverbrowser filter for these; ticket #393 --- src/engine/client/ec_srvbrowse.c | 5 ++++- src/engine/e_config_variables.h | 1 + src/engine/e_if_mods.h | 3 +++ src/engine/e_if_other.h | 7 +++++++ src/engine/server/es_server.c | 6 ++++-- src/game/client/components/menus_browser.cpp | 28 +++++++++++++++++++++++----- src/game/server/hooks.cpp | 10 ++++++++++ 7 files changed, 52 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/engine/client/ec_srvbrowse.c b/src/engine/client/ec_srvbrowse.c index 67c788e3..9d2ed195 100644 --- a/src/engine/client/ec_srvbrowse.c +++ b/src/engine/client/ec_srvbrowse.c @@ -162,7 +162,9 @@ static void client_serverbrowse_filter() filtered = 1; else if(config.b_filter_full && serverlist[i]->info.num_players == serverlist[i]->info.max_players) filtered = 1; - else if(config.b_filter_pw && serverlist[i]->info.flags&1) + else if(config.b_filter_pw && serverlist[i]->info.flags&SRVFLAG_PASSWORD) + filtered = 1; + else if(config.b_filter_tuned && serverlist[i]->info.flags&SRVFLAG_TUNED) filtered = 1; else if(config.b_filter_ping < serverlist[i]->info.latency) filtered = 1; @@ -222,6 +224,7 @@ static int client_serverbrowse_sorthash() i |= config.b_filter_pw<<6; i |= config.b_sort_order<<7; i |= config.b_filter_compatversion<<8; + i |= config.b_filter_tuned<<9; i |= config.b_filter_ping<<16; return i; } diff --git a/src/engine/e_config_variables.h b/src/engine/e_config_variables.h index 1eef9c4e..7eca3b04 100644 --- a/src/engine/e_config_variables.h +++ b/src/engine/e_config_variables.h @@ -19,6 +19,7 @@ MACRO_CONFIG_INT(b_filter_empty, 0, 0, 1) MACRO_CONFIG_INT(b_filter_pw, 0, 0, 1) MACRO_CONFIG_INT(b_filter_ping, 999, 0, 999) MACRO_CONFIG_STR(b_filter_gametype, 128, "") +MACRO_CONFIG_INT(b_filter_tuned, 1, 0, 1) MACRO_CONFIG_INT(b_filter_compatversion, 1, 0, 1) MACRO_CONFIG_INT(b_sort, 0, 0, 256) diff --git a/src/engine/e_if_mods.h b/src/engine/e_if_mods.h index 08d0ec37..31bf075f 100644 --- a/src/engine/e_if_mods.h +++ b/src/engine/e_if_mods.h @@ -165,4 +165,7 @@ const char *mods_version(); */ void mods_message(int msg, int client_id); + +int mods_is_tuned(); + #endif diff --git a/src/engine/e_if_other.h b/src/engine/e_if_other.h index 8fc28c54..85148d85 100644 --- a/src/engine/e_if_other.h +++ b/src/engine/e_if_other.h @@ -29,6 +29,13 @@ enum MAX_NAME_LENGTH=32 }; +enum +{ + SRVFLAG_PASSWORD = 0x1, + SRVFLAG_TUNED = 0x2, + SRVFLAG_MOD = 0x4 +}; + /* Structure: SNAP_ITEM */ diff --git a/src/engine/server/es_server.c b/src/engine/server/es_server.c index dd4fe81f..d761e81e 100644 --- a/src/engine/server/es_server.c +++ b/src/engine/server/es_server.c @@ -819,8 +819,10 @@ static void server_send_serverinfo(NETADDR *addr, int token) /* flags */ i = 0; - if(config.password[0]) - i |= 1; + if(config.password[0]) /* password set */ + i |= SRVFLAG_PASSWORD; + if (mods_is_tuned()) /* is tuned */ + i |= SRVFLAG_TUNED; str_format(buf, sizeof(buf), "%d", i); packer_add_string(&p, buf, 2); diff --git a/src/game/client/components/menus_browser.cpp b/src/game/client/components/menus_browser.cpp index 376f87bb..a4e730e6 100644 --- a/src/game/client/components/menus_browser.cpp +++ b/src/game/client/components/menus_browser.cpp @@ -46,6 +46,7 @@ void MENUS::render_serverbrowser_serverlist(RECT view) SPACER=2, COL_FLAG_LOCK=0, + COL_FLAG_TUNED, COL_FLAG_FAV, COL_NAME, COL_GAMETYPE, @@ -59,6 +60,7 @@ void MENUS::render_serverbrowser_serverlist(RECT view) static column cols[] = { {-1, -1, " ", -1, 2.0f, 0, {0}, {0}}, {COL_FLAG_LOCK, -1, " ", -1, 14.0f, 0, {0}, {0}}, + {COL_FLAG_TUNED, -1, " ", -1, 14.0f, 0, {0}, {0}}, {COL_FLAG_FAV, -1, " ", -1, 14.0f, 0, {0}, {0}}, {COL_NAME, BROWSESORT_NAME, "Name", 0, 300.0f, 0, {0}, {0}}, {COL_GAMETYPE, BROWSESORT_GAMETYPE, "Type", 1, 50.0f, 0, {0}, {0}}, @@ -221,9 +223,14 @@ void MENUS::render_serverbrowser_serverlist(RECT view) if(id == COL_FLAG_LOCK) { - if(item->flags&1) + if(item->flags & SRVFLAG_PASSWORD) ui_draw_browse_icon(SPRITE_BROWSE_LOCK, &button); - } + } + else if(id == COL_FLAG_TUNED) + { + if(item->flags & SRVFLAG_TUNED) + ui_draw_browse_icon(SPRITE_BROWSE_TUNED, &button); + } else if(id == COL_FLAG_FAV) { if(item->favorite) @@ -346,6 +353,10 @@ void MENUS::render_serverbrowser_filters(RECT view) if (ui_do_button((char *)&config.b_filter_compatversion, "Compatible Version", config.b_filter_compatversion, &button, ui_draw_checkbox, 0)) config.b_filter_compatversion ^= 1; + ui_hsplit_t(&view, 20.0f, &button, &view); + if (ui_do_button((char *)&config.b_filter_tuned, "No tuned", config.b_filter_tuned, &button, ui_draw_checkbox, 0)) + config.b_filter_tuned ^= 1; + ui_hsplit_t(&view, 20.0f, &button, &view); ui_do_label(&button, "Game types: ", 14.0f, -1); ui_vsplit_l(&button, 95.0f, 0, &button); @@ -383,8 +394,9 @@ void MENUS::render_serverbrowser_filters(RECT view) config.b_filter_ping = 999; config.b_filter_gametype[0] = 0; config.b_filter_compatversion = 1; + config.b_filter_tuned = 1; config.b_filter_string[0] = 0; - } + } } void MENUS::render_serverbrowser_serverdetail(RECT view) @@ -415,7 +427,7 @@ void MENUS::render_serverbrowser_serverdetail(RECT view) if (selected_server) { RECT row; - static const char *labels[] = { "Version:", "Game Type:", "Progression:", "Ping:" }; + static const char *labels[] = { "Version:", "Game Type:", "Tuning:", "Progression:", "Ping:" }; RECT left_column; RECT right_column; @@ -438,7 +450,7 @@ void MENUS::render_serverbrowser_serverdetail(RECT view) ui_vsplit_l(&server_details, 5.0f, 0x0, &server_details); ui_vsplit_l(&server_details, 80.0f, &left_column, &right_column); - for (int i = 0; i < 4; i++) + for (unsigned int i = 0; i < sizeof(labels) / sizeof(labels[0]); i++) { ui_hsplit_t(&left_column, 15.0f, &row, &left_column); ui_do_label(&row, labels[i], font_size, -1); @@ -452,6 +464,12 @@ void MENUS::render_serverbrowser_serverdetail(RECT view) char temp[16]; + str_format(temp, sizeof(temp), "%s", selected_server->flags & SRVFLAG_TUNED ? "non-standard" : "standard"); + + ui_hsplit_t(&right_column, 15.0f, &row, &right_column); + ui_do_label(&row, temp, font_size, -1); + + if(selected_server->progression < 0) str_format(temp, sizeof(temp), "N/A"); else diff --git a/src/game/server/hooks.cpp b/src/game/server/hooks.cpp index 8d37ed81..b3425694 100644 --- a/src/game/server/hooks.cpp +++ b/src/game/server/hooks.cpp @@ -33,6 +33,16 @@ void send_tuning_params(int cid) */ } +int mods_is_tuned() +{ + TUNING_PARAMS standard_tuning; + + if (memcmp(&standard_tuning, &tuning, sizeof(TUNING_PARAMS)) != 0) + return 1; + else + return 0; +} + // Server hooks void mods_client_direct_input(int client_id, void *input) { -- cgit 1.4.1