From d5c186628bc188878822502782e75dd0bb231e38 Mon Sep 17 00:00:00 2001 From: patty21 Date: Wed, 3 Sep 2003 23:10:40 +0000 Subject: [PATCH] Added: Game Information in join menu includes player names. BCMS 0.3.0 Req'd --- src/gamesrv.c | 157 +++++++++++++++++++++++++++++++++++++++----------- src/gamesrv.h | 1 + 2 files changed, 125 insertions(+), 33 deletions(-) diff --git a/src/gamesrv.c b/src/gamesrv.c index 3f14df7..87fa0d8 100644 --- a/src/gamesrv.c +++ b/src/gamesrv.c @@ -104,18 +104,28 @@ gamesrv_getserver () keypressed = 1; ds = 1; } + + if (keys[SDLK_RETURN] && (!keypressed)) { if (menuselect == 0 && !gserv) { gserv = 1; if (gamesrv_startudp () == -1) return; gamesrv_browse (1); - } else done=1; - - + } + else + done = 1; keypressed = 1; } + if (keys[SDLK_F3] && (!keypressed) && gserv && menuselect > 0 && menuselect < 10) { + gamesrv_browse (0); + i = menuselect - 1; + gamesrv_playerinfo (gse); + gamesrv_browse (1); + i++; + } + if (event.type == SDL_KEYUP) keypressed = 0; else if (event.type == SDL_KEYDOWN) @@ -133,15 +143,14 @@ gamesrv_getserver () ds = 0; SDL_Flip (gfx.screen); } - s_delay (25); + s_delay (25); } if (menuselect > 0 && menuselect < 10) { i = (menuselect - 1); if (gse[i].name[0] != 0 && gse[i].host[0] != 0 && gse[i].port[0] != 0 && - (gse[i].state == GS_wait || gse[i].state == GS_running - || gse[i].state == GS_ready)) { + (gse[i].state == GS_wait || gse[i].state == GS_running || gse[i].state == GS_ready)) { /* add if we are on Linux + and Windows and ai_family == PF_INET */ #ifdef _WIN32 if (gse[i].ai_family == PF_INET) { @@ -150,17 +159,19 @@ gamesrv_getserver () } #else sprintf (bman.servername, "%s:%s", gse[i].host, gse[i].port); - d_printf("%s xxx %s xxx %s",gse[i].host,gse[i].port,bman.servername); + d_printf ("%s xxx %s xxx %s", gse[i].host, gse[i].port, bman.servername); bman.net_ai_family = gse[i].ai_family; #endif } - } else if (menuselect >= 11 && menuselect < 19) - /* User defined Servers */ - strncpy (bman.servername, bman.serverlist[menuselect - 11].name, - LEN_SERVERNAME + LEN_PORT + 2); - else if (menuselect == 20) { - /* enter address */ - menu_get_text ("Enter Address", bman.servername, LEN_SERVERNAME + LEN_PORT + 2);} + } + else if (menuselect >= 11 && menuselect < 19) + /* User defined Servers */ + strncpy (bman.servername, bman.serverlist[menuselect - 11].name, + LEN_SERVERNAME + LEN_PORT + 2); + else if (menuselect == 20) { + /* enter address */ + menu_get_text ("Enter Address", bman.servername, LEN_SERVERNAME + LEN_PORT + 2); + } if (gserv) { @@ -200,15 +211,16 @@ gamesrv_getglist () gse[i].host[0] = 0; gse[i].port[0] = 0; } - for (i = 0; i < 10; i++ ) { + for (i = 0; i < 10; i++) { menu[i].index = 0; menu[i].text[0] = 0; } sprintf (menu[0].text, "No Games found on Masterserver"); menu[0].index = 1; rebuild = 1; - if (menuselect<10) menuselect=0; - } + if (menuselect < 10) + menuselect = 0; + } else { for (pos = buf; pos != 0;) { // go throught the incoming data @@ -244,19 +256,19 @@ gamesrv_getglist () for (i = 1; (i - 1 < LEN_GAMENAME) && (pos[i] != 0) && (pos[i] != '\n'); i++) entry.name[i - 1] = pos[i]; - entry.name[i-1]=0; + entry.name[i - 1] = 0; break; case ('H'): for (i = 1; (i - 1 < LEN_SERVERNAME) && (pos[i] != 0) && (pos[i] != '\n'); i++) entry.host[i - 1] = pos[i]; - entry.host[i-1]=0; - break; + entry.host[i - 1] = 0; + break; case ('O'): for (i = 1; (i - 1 < LEN_PORT) && (pos[i] != 0) && (pos[i] != '\n'); i++) entry.port[i - 1] = pos[i]; - entry.port[i-1]=0; + entry.port[i - 1] = 0; break; } pos = strchr (pos, '\n'); @@ -273,10 +285,10 @@ gamesrv_getglist () } gse[nr] = entry; - + sprintf (txt, "%16s ", gse[nr].name); - if (gse[nr].curplayers == gse[nr].maxplayers) - sprintf (txt, "%s Full ", txt); + if (gse[nr].curplayers == gse[nr].maxplayers) + sprintf (txt, "%s Full ", txt); else if (gse[nr].state == GS_wait) sprintf (txt, "%s Wait ", txt); else if (gse[nr].state == GS_running || gse[nr].state == GS_ready) @@ -294,7 +306,7 @@ gamesrv_getglist () gse[nr].version.sub); for (y = 0; y < 255; y++) menu[nr + 1].text[y] = 0; - strncpy (menu[nr + 1].text, txt, strlen(txt)); + strncpy (menu[nr + 1].text, txt, strlen (txt)); rebuild = 1; sprintf (menu[0].text, "Games on the Masterserver"); menu[0].index = 0; @@ -306,6 +318,85 @@ gamesrv_getglist () return rebuild; } +void +gamesrv_playerinfo (struct game_entry *gse) +{ + char data[511]; + char buf[BUF_SIZE]; + struct _sockaddr addr; + char host[LEN_SERVERNAME]; + char port[LEN_PORT]; + SDL_Event event; + int i, + j,x,y, + pl,eventstate; + char *pos; + _keybinput ki; + // send request + sprintf (data, "IH%s\nO%s\n", gse->host, gse->port); + network_server_port (bman.gamemaster, host, LEN_SERVERNAME, port, LEN_PORT); + dns_filladdr (host, LEN_SERVERNAME, port, LEN_PORT, bman.net_ai_family, &addr); + udp_send (sock, data, strlen (data), &addr, bman.net_ai_family); + d_printf ("Send: %s\n", data); + + + + i = 0; + // wait 3 secs for result + while ((udp_get (sock, buf, BUF_SIZE, &addr, PF_INET) == 0) && (i++ < 300)) + s_delay (10); + if (i == 300) + return; // no result + pos = buf; + sscanf (pos, "%d", &pl); + d_printf ("Got %d Players active after %d\n", pl, i ); + if (!pl) + return; // game not found + + for (j = 0; j < pl; j++) { + pos++; + for (i = 1; (i - 1 < LEN_GAMENAME) && (pos[i] != 0) + && (pos[i] != '\n'); i++) + bman.players[j].name[i - 1] = pos[i]; + bman.players[j].name[i - 1] = 0;pos+=i-1; + d_printf ("Name: %s\n", bman.players[j].name); + } + + j=pl*font[0].size.y+font[1].size.y+50; + draw_menubox (400, j); + x = gfx.res.x / 2; + y = gfx.res.y / 2 - j / 2; + + sprintf (data, "Players in this game"); + font_setcolor (128,128,0,1); + font_draw (x - (font[1].size.x * strlen (data) / 2), y, data, 1); + font_setcolor (255,255,0,1); + font_draw (1 + x - (font[1].size.x * strlen (data) / 2),1 + y, data, 1); + y = y + 2 + (font[1].size.y << 1); + + for(i=0;i