diff --git a/src/client/cl_main.c b/src/client/cl_main.c index dee095080..089c16437 100644 --- a/src/client/cl_main.c +++ b/src/client/cl_main.c @@ -760,6 +760,26 @@ void CL_RequestMotd(void) NET_OutOfBandPrint(NS_CLIENT, autoupdate.motdServer, "getmotd \"%s\"", info); } +void CL_RequestMasterData(qboolean force) +{ + if (!force && autoupdate.masterDataChecked > 0 && cls.realtime - autoupdate.masterDataChecked < 300000) + { + return; + } + + //Only check when we are not running a game + if (cls.state >= CA_LOADING) + { + return; + } + + autoupdate.masterDataChecked = cls.realtime; + + // fire a message off to the motd server and check for update + CL_RequestMotd(); + CL_CheckAutoUpdate(); +} + /* ====================================================================== CONSOLE COMMANDS @@ -951,9 +971,7 @@ void CL_Connect_f(void) Cvar_Set("r_uiFullScreen", "0"); Cvar_Set("ui_connecting", "1"); - // fire a message off to the motd server and check for update - CL_RequestMotd(); - CL_CheckAutoUpdate(); + CL_RequestMasterData(qtrue); // clear any previous "server full" type messages clc.serverMessage[0] = 0; @@ -2541,6 +2559,9 @@ void CL_Frame(int msec) // resend a connection request if necessary CL_CheckForResend(); + // request motd and update data from the master server + CL_RequestMasterData(qfalse); + // decide on the serverTime to render CL_SetCGameTime(); diff --git a/src/client/cl_ui.c b/src/client/cl_ui.c index 944e286fe..7f2c06e27 100644 --- a/src/client/cl_ui.c +++ b/src/client/cl_ui.c @@ -1231,8 +1231,7 @@ intptr_t CL_UISystemCalls(intptr_t *args) CL_TranslateStringMod(VMA(1), VMA(2)); return 0; case UI_CHECKAUTOUPDATE: - CL_RequestMotd(); - CL_CheckAutoUpdate(); + CL_RequestMasterData(qfalse); return 0; case UI_GET_AUTOUPDATE: CL_GetAutoUpdate(); diff --git a/src/client/cl_update.c b/src/client/cl_update.c index b7ba0f4fa..f7df49975 100644 --- a/src/client/cl_update.c +++ b/src/client/cl_update.c @@ -63,12 +63,6 @@ void CL_CheckAutoUpdate(void) return; } - // Only check once per session - if (autoupdate.updateChecked) - { - return; - } - // Resolve update server Com_Printf("Updater: resolving %s... ", UPDATE_SERVER_NAME); @@ -434,6 +428,7 @@ void CL_UpdateVarsClean(int flags) Cvar_Set("com_updatefiles", ""); Cvar_Set("com_updatemessage", ""); Cvar_Set("com_updatefiles", ""); + autoupdate.masterDataChecked = 0; case CLEAR_FLAGS: autoupdate.updateChecked = qfalse; autoupdate.forceUpdate = qfalse; diff --git a/src/client/client.h b/src/client/client.h index 941e8ec3c..48a3e6a66 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -452,6 +452,7 @@ void CL_AddReliableCommand(const char *cmd); void CL_StartHunkUsers(void); void CL_RequestMotd(void); +void CL_RequestMasterData(qboolean force); void CL_Disconnect_f(void); void CL_GetChallengePacket(void); diff --git a/src/qcommon/qcommon.h b/src/qcommon/qcommon.h index 49915e9a0..936204fdd 100644 --- a/src/qcommon/qcommon.h +++ b/src/qcommon/qcommon.h @@ -286,6 +286,7 @@ typedef struct char motdChallenge[MAX_TOKEN_CHARS]; + int masterDataChecked; } autoupdate_t; extern autoupdate_t autoupdate;