]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Make the pure-server logic more readable (should not be a behavior change).
authorRudolf Polzer <divVerent@xonotic.org>
Fri, 23 Oct 2015 14:05:39 +0000 (16:05 +0200)
committerRudolf Polzer <divVerent@xonotic.org>
Fri, 23 Oct 2015 14:05:39 +0000 (16:05 +0200)
qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc
qcsrc/menu/xonotic/serverlist.qc

index 62b85269d48fe14ae7df8778dfb8567b61329ea9..8638ab14b7aacd642b5b914643c47f4ad354dc79 100644 (file)
@@ -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);
 
index e2c6472092fe53d19068e426b1adbcff9a0f279a..c6ee15a6b3ace79108014ad267170da13b47faf9 100644 (file)
@@ -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;