From 568949b8e5871bc283fe310249d57e8d4f806f1c Mon Sep 17 00:00:00 2001 From: yamamama Date: Fri, 5 Dec 2025 15:45:10 -0500 Subject: [PATCH] 'Join Last Server' option --- src/d_netcmd.c | 4 ++++ src/d_netcmd.h | 3 +++ src/deh_tables.c | 1 + src/m_menu.c | 21 +++++++++++++++++++++ src/m_menu.h | 1 + 5 files changed, 30 insertions(+) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index a7216fc30..b6c3a5ca5 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -400,6 +400,7 @@ consvar_t cv_joyscale[MAXSPLITSCREENPLAYERS] = { //Alam: Dummy for save #endif // SRB2kart +consvar_t cv_lastserver = CVAR_INIT ("lastserver", "", CV_SAVE, NULL, NULL); static CV_PossibleValue_t kartminimap_cons_t[] = {{0, "MIN"}, {10, "MAX"}, {0, NULL}}; consvar_t cv_kartminimap = CVAR_INIT ("kartminimap", "4", CV_SAVE, kartminimap_cons_t, NULL); consvar_t cv_kartcheck = CVAR_INIT ("kartcheck", "Yes", CV_SAVE, CV_YesNo, NULL); @@ -1352,6 +1353,9 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_resume); CV_RegisterVar(&cv_perfstats); + //Value used to store last server player has joined + CV_RegisterVar(&cv_lastserver); + CV_RegisterVar(&cv_laglesscam); // ingame object placing diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 3901b8a54..50001f1dd 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -73,6 +73,9 @@ extern consvar_t cv_spectatorreentry, cv_antigrief; extern consvar_t cv_debugtraversemax; #endif +//Save server ip +extern consvar_t cv_lastserver; + extern consvar_t cv_kartminimap; extern consvar_t cv_kartcheck; extern consvar_t cv_kartinvinsfx; diff --git a/src/deh_tables.c b/src/deh_tables.c index 74d457e9f..fca1bb646 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -764,6 +764,7 @@ struct menu_routine_s const MENU_ROUTINES[] = { { "TIMEATTACKPRESET", &MR_TimeAttackPreset }, { "REPLAYSTAFF", &MR_ReplayStaff }, { "CONNECTIP", &MR_ConnectIP }, + { "CONNECTLASTSERVER", &MR_ConnectLastServer }, { "QUITMULTIPLAYERMENU", &MR_QuitMultiPlayerMenu }, { "STARTSERVERMENU", &MR_StartServerMenu }, { "STARTSERVER", &MR_StartServer }, diff --git a/src/m_menu.c b/src/m_menu.c index 3ac367d88..9ad4edfae 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -59,6 +59,7 @@ #endif #include "d_net.h" +#include "i_net.h" #include "mserv.h" #include "m_misc.h" #include "m_anigif.h" @@ -6138,6 +6139,8 @@ INT32 MR_Connect(INT32 arg) // do not call menuexitfunc M_ClearMenus(false); + CV_Set(&cv_lastserver, I_GetNodeAddress(serverlist[arg + cv_dummyserverpage.value * M_ServersPerPage()].node)); + COM_BufAddText(va("connect node %d\n", serverlist[arg + cv_dummyserverpage.value * M_ServersPerPage()].node)); return true; } @@ -6804,6 +6807,7 @@ INT32 MR_ConnectIP(INT32 choice) M_ClearMenus(true); + CV_Set(&cv_lastserver,cv_dummyip.string); COM_BufAddText(va("connect \"%s\"\n", cv_dummyip.string)); // A little "please wait" message. @@ -6816,6 +6820,23 @@ INT32 MR_ConnectIP(INT32 choice) return true; } + +//Join Last server +INT32 MR_ConnectLastServer(INT32 choice) +{ + (void)choice; + + if (!*cv_lastserver.string) + { + M_StartMessage("You haven't previosuly joined a server.\n", NULL, MM_NOTHING); + return false; + } + + M_ClearMenus(true); + COM_BufAddText(va("connect \"%s\"\n", cv_lastserver.string)); + return true; +} + // ======================== // MULTIPLAYER PLAYER SETUP // ======================== diff --git a/src/m_menu.h b/src/m_menu.h index 5cf612164..35fe37f29 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -272,6 +272,7 @@ INT32 MR_TimeAttackPreset(INT32 arg); INT32 MR_ReplayTimeAttack(INT32 arg); INT32 MR_ReplayStaff(INT32 choice); INT32 MR_ConnectIP(INT32 choice); +INT32 MR_ConnectLastServer(INT32 choice); INT32 MR_QuitMultiPlayerMenu(INT32 choice); INT32 MR_StartServerMenu(INT32 choice); INT32 MR_StartServer(INT32 choice);