summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroy <tom_adams@web.de>2018-11-12 21:02:38 +0100
committerGitHub <noreply@github.com>2018-11-12 21:02:38 +0100
commit8abab6853199e5fd1e2cfc56eafc99558c70a27c (patch)
tree1284b5fd26d959f9af252a0010b407ecc81e4a72
parent57d48ae7622dca32f11c8fa0b1c4cf8146de7c8d (diff)
parent952ce64c8ac293a8d29ef292979e0062b8a68817 (diff)
Merge pull request #1665 from Dune-jr/feature-uptodatefilter
Add an 'up-to-date' server browser filter, filters out previous server versions
-rw-r--r--src/engine/client/client.cpp2
-rw-r--r--src/engine/client/serverbrowser.cpp8
-rw-r--r--src/engine/client/serverbrowser.h3
-rw-r--r--src/engine/shared/config_variables.h1
-rw-r--r--src/game/client/components/menus_browser.cpp5
5 files changed, 16 insertions, 3 deletions
diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index d64c39c39..748745792 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -1713,7 +1713,7 @@ void CClient::InitInterfaces()
m_pStorage = Kernel()->RequestInterface<IStorage>();
//
- m_ServerBrowser.SetBaseInfo(&m_ContactClient, m_pGameClient->NetVersion());
+ m_ServerBrowser.SetBaseInfo(&m_ContactClient, m_pGameClient->NetVersion(), m_pGameClient->Version());
m_Friends.Init();
}
diff --git a/src/engine/client/serverbrowser.cpp b/src/engine/client/serverbrowser.cpp
index 963492676..02b0ce44d 100644
--- a/src/engine/client/serverbrowser.cpp
+++ b/src/engine/client/serverbrowser.cpp
@@ -61,10 +61,11 @@ CServerBrowser::CServerBrowser()
m_BroadcastTime = 0;
}
-void CServerBrowser::SetBaseInfo(class CNetClient *pClient, const char *pNetVersion)
+void CServerBrowser::SetBaseInfo(class CNetClient *pClient, const char *pNetVersion, const char *pGameVersion)
{
m_pNetClient = pClient;
str_copy(m_aNetVersion, pNetVersion, sizeof(m_aNetVersion));
+ str_copy(m_aGameVersion, pGameVersion, sizeof(m_aGameVersion));
m_pMasterServer = Kernel()->RequestInterface<IMasterServer>();
m_pConsole = Kernel()->RequestInterface<IConsole>();
m_pFriends = Kernel()->RequestInterface<IFriends>();
@@ -180,6 +181,10 @@ void CServerBrowser::Filter()
Filtered = 1;
else if(g_Config.m_BrFilterCompatversion && str_comp_num(m_ppServerlist[i]->m_Info.m_aVersion, m_aNetVersion, 3) != 0)
Filtered = 1;
+ else if((g_Config.m_BrFilterUptodate && str_comp_num(m_ppServerlist[i]->m_Info.m_aVersion, m_aGameVersion, 5) != 0)
+ && !(str_comp_num(m_ppServerlist[i]->m_Info.m_aVersion, m_aGameVersion, 4) == 0
+ && m_ppServerlist[i]->m_Info.m_aVersion[4] >= m_aGameVersion[4] && m_ppServerlist[i]->m_Info.m_aVersion[4] <= '9'))
+ Filtered = 1;
else if(g_Config.m_BrFilterServerAddress[0] && !str_find_nocase(m_ppServerlist[i]->m_Info.m_aAddress, g_Config.m_BrFilterServerAddress))
Filtered = 1;
else if(g_Config.m_BrFilterGametypeStrict && g_Config.m_BrFilterGametype[0] && str_comp_nocase(m_ppServerlist[i]->m_Info.m_aGameType, g_Config.m_BrFilterGametype))
@@ -271,6 +276,7 @@ int CServerBrowser::SortHash() const
i |= g_Config.m_BrFilterGametypeStrict<<13;
i |= g_Config.m_BrFilterCountry<<14;
i |= g_Config.m_BrFilterPing<<15;
+ i |= g_Config.m_BrFilterUptodate<<16;
return i;
}
diff --git a/src/engine/client/serverbrowser.h b/src/engine/client/serverbrowser.h
index a3cd197f8..b4ce4718d 100644
--- a/src/engine/client/serverbrowser.h
+++ b/src/engine/client/serverbrowser.h
@@ -58,7 +58,7 @@ public:
void Set(const NETADDR &Addr, int Type, int Token, const CServerInfo *pInfo);
void Request(const NETADDR &Addr) const;
- void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion);
+ void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion, const char *pGameVersion);
private:
CNetClient *m_pNetClient;
@@ -66,6 +66,7 @@ private:
class IConsole *m_pConsole;
class IFriends *m_pFriends;
char m_aNetVersion[128];
+ char m_aGameVersion[128];
CHeap m_ServerlistHeap;
CServerEntry **m_ppServerlist;
diff --git a/src/engine/shared/config_variables.h b/src/engine/shared/config_variables.h
index 2973e4b77..b7cee9849 100644
--- a/src/engine/shared/config_variables.h
+++ b/src/engine/shared/config_variables.h
@@ -44,6 +44,7 @@ MACRO_CONFIG_STR(BrFilterServerAddress, br_filter_serveraddress, 128, "", CFGFLA
MACRO_CONFIG_INT(BrFilterPure, br_filter_pure, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-standard servers in browser")
MACRO_CONFIG_INT(BrFilterPureMap, br_filter_pure_map, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-standard maps in browser")
MACRO_CONFIG_INT(BrFilterCompatversion, br_filter_compatversion, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-compatible servers in browser")
+MACRO_CONFIG_INT(BrFilterUptodate, br_filter_uptodate, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out servers not up-to-date (>= client version)")
MACRO_CONFIG_INT(BrSort, br_sort, 4, 0, 256, CFGFLAG_SAVE|CFGFLAG_CLIENT, "")
MACRO_CONFIG_INT(BrSortOrder, br_sort_order, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "")
diff --git a/src/game/client/components/menus_browser.cpp b/src/game/client/components/menus_browser.cpp
index 42805e0bb..a3423f848 100644
--- a/src/game/client/components/menus_browser.cpp
+++ b/src/game/client/components/menus_browser.cpp
@@ -510,6 +510,10 @@ void CMenus::RenderServerbrowserFilters(CUIRect View)
g_Config.m_BrFilterCompatversion ^= 1;
ServerFilter.HSplitTop(20.0f, &Button, &ServerFilter);
+ if (DoButton_CheckBox((char *)&g_Config.m_BrFilterUptodate, Localize("Up-to-date only"), g_Config.m_BrFilterUptodate, &Button))
+ g_Config.m_BrFilterUptodate ^= 1;
+
+ ServerFilter.HSplitTop(20.0f, &Button, &ServerFilter);
if (DoButton_CheckBox((char *)&g_Config.m_BrFilterPure, Localize("Standard gametype"), g_Config.m_BrFilterPure, &Button))
g_Config.m_BrFilterPure ^= 1;
@@ -594,6 +598,7 @@ void CMenus::RenderServerbrowserFilters(CUIRect View)
g_Config.m_BrFilterPure = 1;
g_Config.m_BrFilterPureMap = 1;
g_Config.m_BrFilterCompatversion = 1;
+ g_Config.m_BrFilterUptodate = 1;
Client()->ServerBrowserUpdate();
}
}