]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/util.qc
Merge branch 'master' into Mario/weapons
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / util.qc
index 356b92d3812a4327d82608df71fd567cdff6b8e5..8b78a0f0aed2ab3f014bc833985abab610f31fb8 100644 (file)
@@ -87,7 +87,12 @@ void saveCvarsMulti(entity me)
 
        n = tokenize_console(me.cvarNames_Multi);
        for(i = 0; i < n; ++i)
-               cvar_set(argv(i), s);
+       {
+               if(substring(argv(i), 0, 1) == "!")
+                       cvar_set(substring(argv(i), 1, strlen(argv(i))), ((s == "0") ? "1" : "0"));
+               else
+                       cvar_set(argv(i), s);
+       }
 }
 void makeMulti(entity e, string otherCvars)
 {
@@ -280,10 +285,15 @@ void URI_Get_Callback(float id, float status, string data)
        }
        else
        {
-               print(sprintf("Received HTTP request data for an invalid id %d.\n", id));
+               printf("Received HTTP request data for an invalid id %d.\n", id);
        }
 }
 
+void DisableServerBackwardsCompatibility()
+{
+       cvar_set("gameversion_min", ftos(100 * floor(cvar("gameversion") / 100)));
+}
+
 void UpdateNotification_URI_Get_Callback(float id, float status, string data)
 {
        float n;
@@ -295,7 +305,7 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
        }
        if(status != 0)
        {
-               print(sprintf(_("error receiving update notification: status is %d\n"), status));
+               printf(_("error receiving update notification: status is %d\n"), status);
                return;
        }
        if(substring(data, 0, 1) == "<")
@@ -324,6 +334,7 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
        string un_emergency_pk3s = "";
        string un_promoted = "";
        string un_recommended = "";
+       string un_compatexpire = "";
        
        for(i = 0; i < n; ++i)
        {
@@ -332,12 +343,16 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
                
                switch(substring(argv(i), 0, 1))
                {
-                       #define APPEND_STRING(list,sep,add) list = ((list != "") ? strcat(list, sep, add) : add);
                        case "V":
                        {
                                un_version = s;
                                break;
                        }
+                       case "C":
+                       {
+                               un_compatexpire = s;
+                               break;
+                       }
                        case "D":
                        {
                                un_download = s;
@@ -350,23 +365,23 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
                        }
                        case "B":
                        {
-                               APPEND_STRING(un_bannedservers, " ", s)
+                               APPEND_TO_STRING(un_bannedservers, " ", s);
                                break;
                        }
                        case "E":
                        {
                                if(cvar("menu_updatecheck_getpacks"))
-                                       { APPEND_STRING(un_emergency_pk3s, " ", s) }
+                                       APPEND_TO_STRING(un_emergency_pk3s, " ", s);
                                break;
                        }
                        case "P":
                        {
-                               APPEND_STRING(un_promoted, " ", s)
+                               APPEND_TO_STRING(un_promoted, " ", s);
                                break;
                        }
                        case "R":
                        {
-                               APPEND_STRING(un_recommended, " ", s)
+                               APPEND_TO_STRING(un_recommended, " ", s);
                                break;
                        }
                }
@@ -378,14 +393,24 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
                {
                        // update needed
                        _Nex_ExtResponseSystem_UpdateTo = strzone(un_version);
-                       if(un_download) { print(sprintf(_("Update can be downloaded at:\n%s\n"), un_download)); }
+                       if(un_download) { printf(_("Update can be downloaded at:\n%s\n"), un_download); }
                        if(un_url) { _Nex_ExtResponseSystem_UpdateToURL = strzone(un_url); }
+                       DisableServerBackwardsCompatibility();
+               }
+               else if(cvar_string("g_xonoticversion") == un_version)
+               {
+                       if(un_compatexpire != "")
+                       {
+                               string curdate = strftime(FALSE, "%Y%m%d%H%M%S");
+                               if (strcmp(curdate, un_compatexpire) >= 0)
+                                       DisableServerBackwardsCompatibility();
+                       }
                }
        }
        
        if(un_emergency_pk3s != "")
        {
-               _Nex_ExtResponseSystem_Packs = strzone(argv(4));
+               _Nex_ExtResponseSystem_Packs = strzone(un_emergency_pk3s);
                _Nex_ExtResponseSystem_PacksStep = 1;
        }
 
@@ -400,7 +425,6 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
                _Nex_ExtResponseSystem_RecommendedServers = strzone(un_recommended);
                _Nex_ExtResponseSystem_RecommendedServersNeedsRefresh = 1;
        }
-
 }
 
 // END OF URI SYSTEM ////////////////////////////////////////////////////////
@@ -419,36 +443,8 @@ void updateCheck()
 
                        // for privacy, munge the start count a little
                        startcnt = floor((floor(startcnt / 10) + random()) * 10);
-                       uri = sprintf("http://www.xonotic.org/dl/checkupdate.txt?format=keys&version=%s&cnt=%d", uri_escape(cvar_string("g_xonoticversion")), startcnt);
-
-#ifdef CVAR_POPCON
-                       float cvar_handle, popcon_handle;
-                       float n, i, j;
-                       string k, s;
-                       cvar_handle = buf_create();
-                       buf_cvarlist(cvar_handle, "", "");
-                       n = buf_getsize(cvar_handle);
-                       popcon_handle = buf_create();
-                       for(i= 0, j = 0; i < n; ++i)
-                       {
-                               k = bufstr_get(cvar_handle, i);
-                               if(!(cvar_type(k) & CVAR_TYPEFLAG_SAVED))
-                                       continue;
-                               s = sprintf("%s=%d", uri_escape(k), cvar_string(k) != cvar_defstring(k));
-                               bufstr_set(popcon_handle, j, s);
-                               ++j;
-                       }
-                       buf_del(cvar_handle);
-                       uri_postbuf(
-                               uri, URI_GET_UPDATENOTIFICATION,
-                               "application/x-www-form-urlencoded",
-                               "&",
-                               popcon_handle
-                       );
-                       buf_del(popcon_handle);
-#else
+                       uri = sprintf("http://update.xonotic.org/checkupdate.txt?version=%s&cnt=%d", uri_escape(cvar_string("g_xonoticversion")), startcnt);
                        uri_get(uri, URI_GET_UPDATENOTIFICATION);
-#endif
                }
        }
 
@@ -502,7 +498,7 @@ float preMenuInit()
                boxA = '0.05 0.5 0' + 0.25 * sz_y * eY;
                boxB = '0.95 0.5 0' + 1.25 * sz_y * eY;
                draw_Fill(boxA, boxB - boxA, '1 1 1', 1);
-               
+
                boxA += sz * 0.1;
                boxB -= sz * 0.1;
                draw_Fill(boxA, boxB - boxA, '0.1 0.1 0.1', 1);
@@ -560,7 +556,7 @@ void preMenuDraw()
                draw_CenterText(mid - 1 * line, l1, fs, '1 0 0', 1, 0);
                draw_CenterText(mid - 0 * line, l2, fs, '0 0 1', 1, 0);
        }
-       if not(campaign_name_previous)
+       if (!campaign_name_previous)
                campaign_name_previous = strzone(strcat(campaign_name, "x")); // force unequal
        if(campaign_name == campaign_name_previous)
        {
@@ -648,7 +644,6 @@ float updateCompression()
 
 // note: include only those that should be in the menu!
 #define GAMETYPES \
-       GAMETYPE(MAPINFO_TYPE_ARENA) \
        GAMETYPE(MAPINFO_TYPE_ASSAULT) \
        GAMETYPE(MAPINFO_TYPE_CTF) \
        GAMETYPE(MAPINFO_TYPE_CA) \
@@ -660,22 +655,23 @@ float updateCompression()
        GAMETYPE(MAPINFO_TYPE_LMS) \
        GAMETYPE(MAPINFO_TYPE_NEXBALL) \
        GAMETYPE(MAPINFO_TYPE_ONSLAUGHT) \
-       GAMETYPE(MAPINFO_TYPE_RACE) \
+       if (cvar("developer")) GAMETYPE(MAPINFO_TYPE_RACE) \
        GAMETYPE(MAPINFO_TYPE_CTS) \
        GAMETYPE(MAPINFO_TYPE_TEAM_DEATHMATCH) \
+       //GAMETYPE(MAPINFO_TYPE_INVASION) \
        /* nothing */
 
 float GameType_GetID(float cnt)
 {
        float i;
        i = 0;
-       
-       #define GAMETYPE(id) if(i++ == cnt) return id;
+
+       #define GAMETYPE(id) { if(i++ == cnt) return id; }
        GAMETYPES
        #undef GAMETYPE
 
        unused_float = i;
-       
+
        return 0;
 }
 
@@ -683,31 +679,31 @@ float GameType_GetCount()
 {
        float i;
        i = 0;
-       
+
        #define GAMETYPE(id) ++i;
        GAMETYPES
        #undef GAMETYPE
-       
+
        return i;
 }
 
 string GameType_GetName(float cnt)
 {
        float i = GameType_GetID(cnt);
-       
+
        if(i)
                return MapInfo_Type_ToText(i);
-       
+
        return "";
 }
 
 string GameType_GetIcon(float cnt)
 {
        float i = GameType_GetID(cnt);
-       
+
        if(i)
                return strcat("gametype_", MapInfo_Type_ToString(i));
-       
+
        return "";
 }
 
@@ -715,7 +711,7 @@ string GameType_GetIcon(float cnt)
 {
        float i = GameType_GetID(cnt);
        string s = _MapInfo_GetDefaultEx(i);
-       
+
        if(i)
        {
                if(strstrofs(s, "teams", 0) >= 0)
@@ -723,7 +719,7 @@ string GameType_GetIcon(float cnt)
                else
                        return _("free for all");
        }
-       
+
        return _("tuba for all");
 }*/