]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/serverlist.qc
Merge branch 'terencehill/menu_saveCvarsMulti_fix' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / serverlist.qc
index 8aa5c105e895d097c955f787bb844b0349460848..a06349cec04fe5574bbe7bb47f27e5e975249310 100644 (file)
@@ -173,9 +173,7 @@ void RegisterSLCategories()
        #define SLIST_CATEGORY(name,enoverride,dioverride,str) \
                SET_FIELD_COUNT(name, CATEGORY_FIRST, category_ent_count) \
                CHECK_MAX_COUNT(name, MAX_CATEGORIES, category_ent_count, "SLIST_CATEGORY") \
-               cat = spawn(); \
-               categories[name - 1] = cat; \
-               cat.classname = "slist_category"; \
+               cat = categories[name - 1] = new(slist_category); \
                cat.cat_name = strzone(#name); \
                cat.cat_enoverride_string = strzone(SLIST_CATEGORY_AUTOCVAR(name)); \
                cat.cat_dioverride_string = strzone(dioverride); \
@@ -231,7 +229,7 @@ entity RetrieveCategoryEnt(int catnum)
        else
        {
                error(sprintf("RetrieveCategoryEnt(%d): Improper category number!\n", catnum));
-               return world;
+               return NULL;
        }
 }
 
@@ -433,11 +431,17 @@ void XonoticServerList_toggleFavorite(entity me, string srv)
 
 void ServerList_Update_favoriteButton(entity btn, entity me)
 {
-       me.favoriteButton.setText(me.favoriteButton,
-               (IsFavorite(me.ipAddressBox.text) ?
-                       _("Remove") : _("Favorite")
-               )
-       );
+       entity e = me.favoriteButton;
+       if(IsFavorite(me.ipAddressBox.text))
+       {
+               e.setText(e, _("Remove"));
+               clearTooltip(e);
+       }
+       else
+       {
+               e.setText(e, _("Favorite"));
+               setZonedTooltip(e, _("Bookmark the currently highlighted server so that it's faster to find in the future"), string_null);
+       }
 }
 
 entity makeXonoticServerList()
@@ -988,7 +992,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;
 
@@ -1059,7 +1063,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")
@@ -1070,24 +1077,26 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is
 
 #ifdef COMPAT_NO_MOD_IS_XONOTIC
        if(modname == "")
-               modname = "Xonotic";
+               modname = "xonotic";
 #endif
 
+       modname = strtolower(modname);
+
        /*
        SLIST_FIELD_MOD = gethostcacheindexforkey("mod");
        s = gethostcachestring(SLIST_FIELD_MOD, i);
        if(s != "data")
-               if(modname == "Xonotic")
+               if(modname == "xonotic")
                        modname = s;
        */
 
        // list the mods here on which the pure server check actually works
-       if(modname != "Xonotic")
-       if(modname != "InstaGib" || modname != "MinstaGib")
-       if(modname != "CTS")
-       if(modname != "NIX")
-       if(modname != "NewToys")
-               pure = false;
+       if(modname != "xonotic")
+       if(modname != "instagib" || modname != "minstagib")
+       if(modname != "cts")
+       if(modname != "nix")
+       if(modname != "newtoys")
+               pure_available = false;
 
        if(gethostcachenumber(SLIST_FIELD_FREESLOTS, i) <= 0)
                theAlpha = SKINALPHA_SERVERLIST_FULL;
@@ -1195,9 +1204,11 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is
        iconPos.x += iconSize.x;
 
        // Mod
-       if(modname == "Xonotic")
+       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
@@ -1206,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;