X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Futil.qc;h=dd022eb6996059f6a29ddf612b6bc915a816abc0;hp=b4ca21385d3d744652d9e68ce7acec9a5e22be17;hb=56e378ae75002cadb9e8908a6562817b682220d4;hpb=f5689f55e2665c871cfabcee9f8534c482e2b79b diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index b4ca21385d..dd022eb699 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -280,10 +280,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)); + print(sprintf("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; @@ -313,41 +318,109 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) n = 0; else n = tokenizebyseparator(data, "\n"); + + float i; + string s; + + string un_version = ""; + string un_download = ""; + string un_url = ""; + string un_bannedservers = ""; + string un_emergency_pk3s = ""; + string un_promoted = ""; + string un_recommended = ""; + string un_compatexpire = ""; - if(n >= 1) + for(i = 0; i < n; ++i) { - _Nex_ExtResponseSystem_UpdateTo = argv(0); - - if(vercmp(cvar_string("g_xonoticversion"), _Nex_ExtResponseSystem_UpdateTo) >= 0) - { - _Nex_ExtResponseSystem_UpdateTo = ""; // no update needed - } - else + s = substring(argv(i), 2, -1); + if(s == "") { continue; } // ignore empty lines + + switch(substring(argv(i), 0, 1)) { - // update needed - if(n >= 2) - print(sprintf(_("Update can be downloaded at:\n%s\n"), argv(1))); - if(n >= 3) - _Nex_ExtResponseSystem_UpdateToURL = strzone(argv(2)); + #define APPEND_TO_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; + break; + } + case "U": + { + un_url = s; + break; + } + case "B": + { + APPEND_TO_STRING(un_bannedservers, " ", s); + break; + } + case "E": + { + if(cvar("menu_updatecheck_getpacks")) + APPEND_TO_STRING(un_emergency_pk3s, " ", s); + break; + } + case "P": + { + APPEND_TO_STRING(un_promoted, " ", s); + break; + } + case "R": + { + APPEND_TO_STRING(un_recommended, " ", s); + break; + } } + } - _Nex_ExtResponseSystem_UpdateTo = strzone(_Nex_ExtResponseSystem_UpdateTo); - - if(n >= 4) + if(un_version != "") + { + if(vercmp(cvar_string("g_xonoticversion"), un_version) < 0) { - _Nex_ExtResponseSystem_BannedServers = strzone(argv(3)); - _Nex_ExtResponseSystem_BannedServersNeedsRefresh = 1; + // 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_url) { _Nex_ExtResponseSystem_UpdateToURL = strzone(un_url); } + DisableServerBackwardsCompatibility(); } - - if(n >= 5) + else if(cvar_string("g_xonoticversion") == un_version) { - if(cvar("menu_updatecheck_getpacks")) + if(un_compatexpire != "") { - _Nex_ExtResponseSystem_Packs = strzone(argv(4)); - _Nex_ExtResponseSystem_PacksStep = 1; + 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(un_emergency_pk3s); + _Nex_ExtResponseSystem_PacksStep = 1; + } + + if(un_promoted != "") + { + _Nex_ExtResponseSystem_PromotedServers = strzone(un_promoted); + _Nex_ExtResponseSystem_PromotedServersNeedsRefresh = 1; + } + + if(un_recommended != "") + { + _Nex_ExtResponseSystem_RecommendedServers = strzone(un_recommended); + _Nex_ExtResponseSystem_RecommendedServersNeedsRefresh = 1; + } } // END OF URI SYSTEM //////////////////////////////////////////////////////// @@ -366,36 +439,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?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 } }