From 89c7d6476d77fab66ed4bcc89faf3208811900bc Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 23 Oct 2015 16:05:39 +0200 Subject: [PATCH] Make the pure-server logic more readable (should not be a behavior change). --- .../dialog_multiplayer_join_serverinfo.qc | 13 +++++++---- qcsrc/menu/xonotic/serverlist.qc | 22 +++++++++++++------ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc b/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc index 62b85269d..8638ab14b 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc +++ b/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc @@ -50,7 +50,8 @@ void Join_Click(entity btn, entity me); #ifdef IMPLEMENTATION void XonoticServerInfoDialog_loadServerInfo(entity me, float i) { - float m, pure, freeslots, j, numh, maxp, numb, sflags; + bool pure_available; + float m, pure_violations, freeslots, j, numh, maxp, numb, sflags; string s, typestr, versionstr, k, v, modname; // ==================================== @@ -121,7 +122,8 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) me.currentServerCName = strzone(gethostcachestring(SLIST_FIELD_CNAME, i)); me.cnameLabel.setText(me.cnameLabel, me.currentServerCName); - pure = -1; + pure_available = false; + pure_violations = -1; typestr = _("N/A"); versionstr = _("N/A"); @@ -142,7 +144,10 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) k = substring(argv(j), 0, 1); v = substring(argv(j), 1, -1); if(k == "P") - pure = stof(v); + { + pure_available = true; + pure_violations = stof(v); + } else if(k == "S") freeslots = stof(v); else if(k == "F") @@ -194,7 +199,7 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) me.currentServerVersion = strzone(versionstr); me.versionLabel.setText(me.versionLabel, me.currentServerVersion); - me.currentServerPure = ((pure < 0) ? _("N/A") : (pure == 0) ? _("Official") : sprintf(_("%d modified"), pure)); + me.currentServerPure = ((!pure_available) ? _("N/A") : (pure_violations == 0) ? _("Official") : sprintf(_("%d modified"), pure_violations)); me.currentServerPure = strzone(me.currentServerPure); me.pureLabel.setText(me.pureLabel, me.currentServerPure); diff --git a/qcsrc/menu/xonotic/serverlist.qc b/qcsrc/menu/xonotic/serverlist.qc index e2c647209..c6ee15a6b 100644 --- a/qcsrc/menu/xonotic/serverlist.qc +++ b/qcsrc/menu/xonotic/serverlist.qc @@ -994,7 +994,7 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is bool isv4, isv6; vector theColor; float theAlpha; - bool pure = false; + bool pure = false, pure_available = false; int freeslots = -1, sflags = -1, j, m; string s, typestr, versionstr, k, v, modname; @@ -1065,7 +1065,10 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is k = substring(argv(j), 0, 1); v = substring(argv(j), 1, -1); if(k == "P") - pure = stob(v); + { + pure = (stof(v) == 0); + pure_available = true; + } else if(k == "S") freeslots = stof(v); else if(k == "F") @@ -1093,7 +1096,7 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is if(modname != "CTS") if(modname != "NIX") if(modname != "NewToys") - pure = false; + pure_available = false; if(gethostcachenumber(SLIST_FIELD_FREESLOTS, i) <= 0) theAlpha = SKINALPHA_SERVERLIST_FULL; @@ -1203,7 +1206,9 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is // Mod if(modname == "Xonotic") { - if(pure == 0) + // Here, pure_available should always be set. If not, consider + // it an impurity. + if(pure_available && pure) draw_Picture(iconPos, "icon_pure1", iconSize, '1 1 1', 1); } else @@ -1212,10 +1217,13 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is if(draw_PictureSize(icon) == '0 0 0') icon = "icon_mod_"; - if(pure == 0) - draw_Picture(iconPos, icon, iconSize, '1 1 1', 1); - else + // In mods, pure_available not being present indicates + // non-support of the feature. Just show the mod icon as is + // then. + if(pure_available && !pure) draw_Picture(iconPos, icon, iconSize, '1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE); + else + draw_Picture(iconPos, icon, iconSize, '1 1 1', 1); } iconPos.x += iconSize.x; -- 2.39.2