X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Futil.qc;h=28987529a639edd2a5743311229c3e081446bdc2;hb=fec2951146f0bfbeda2dccfaee92b0960d9d515d;hp=580f22a93c7c7e5caab333763150067fa5a0173f;hpb=dcb550aae29e82402bf8e5c9ffe71fa7774aed35;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 580f22a93..28987529a 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -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))), ftos(!stof(s))); + else + cvar_set(argv(i), s); + } } void makeMulti(entity e, string otherCvars) { @@ -256,6 +261,8 @@ void setDependentWeird(entity e, float(entity) func) float _Nex_ExtResponseSystem_Queried; string _Nex_ExtResponseSystem_UpdateTo; string _Nex_ExtResponseSystem_UpdateToURL; +string _Nex_ExtResponseSystem_Packs; +float _Nex_ExtResponseSystem_PacksStep; void URI_Get_Callback(float id, float status, string data) { @@ -278,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)); + 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; @@ -311,41 +323,170 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) n = 0; else n = tokenizebyseparator(data, "\n"); + + float i; + string s; - if(n >= 1) + 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 = ""; + + for(i = 0; i < n; ++i) { - _Nex_ExtResponseSystem_UpdateTo = argv(0); - - if(vercmp(cvar_string("g_xonoticversion"), _Nex_ExtResponseSystem_UpdateTo) >= 0) + s = substring(argv(i), 2, -1); + if(s == "") { continue; } // ignore empty lines + + switch(substring(argv(i), 0, 1)) { - _Nex_ExtResponseSystem_UpdateTo = ""; // no update needed + #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; + } } - else + } + + if(un_version != "") + { + if(vercmp(cvar_string("g_xonoticversion"), un_version) < 0) { // 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)); + _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(); } - - _Nex_ExtResponseSystem_UpdateTo = strzone(_Nex_ExtResponseSystem_UpdateTo); - - if(n >= 4) + else if(cvar_string("g_xonoticversion") == un_version) { - _Nex_ExtResponseSystem_BannedServers = strzone(argv(3)); - _Nex_ExtResponseSystem_BannedServersNeedsRefresh = 1; + 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(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 //////////////////////////////////////////////////////// +void updateCheck() +{ + if(cvar("menu_updatecheck")) + { + if(!_Nex_ExtResponseSystem_Queried) + { + _Nex_ExtResponseSystem_Queried = 1; + float startcnt; + string uri; + + cvar_set("cl_startcount", ftos(startcnt = cvar("cl_startcount") + 1)); + + // for privacy, munge the start count a little + startcnt = floor((floor(startcnt / 10) + random()) * 10); + 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); + } + } + + if(_Nex_ExtResponseSystem_PacksStep > 0) + { + float n, i; + float allgood; + n = tokenize_console(_Nex_ExtResponseSystem_Packs); + allgood = TRUE; + for(i = 0; i+1 < n; i += 2) + { + if(fexists(argv(i+1))) + continue; + allgood = FALSE; + if(_Nex_ExtResponseSystem_PacksStep == 1) // first run + localcmd("\ncurl --pak \"", argv(i), "\"\n"); + } + if(allgood) + { + if(_Nex_ExtResponseSystem_PacksStep == 2) + { + if(!Menu_Active) + cvar_set("_menu_initialized", "0"); + // HACK: cause m_hide call on next start + localcmd("\nmenu_restart\n"); + } + _Nex_ExtResponseSystem_PacksStep = 0; + } + else + _Nex_ExtResponseSystem_PacksStep = 2; + } + +} + float preMenuInit() { vector sz; vector boxA, boxB; + updateCheck(); + MapInfo_Cache_Create(); MapInfo_Enumerate(); if(!MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, 0, 1)) @@ -358,7 +499,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); @@ -374,7 +515,7 @@ float preMenuInit() string campaign_name_previous; float campaign_won_previous; #ifdef WATERMARK -var string autocvar_menu_watermark = WATERMARK(); +var string autocvar_menu_watermark = WATERMARK; #else var string autocvar_menu_watermark = ""; #endif @@ -382,58 +523,14 @@ void postMenuDraw() { if(autocvar_menu_watermark != "") { - vector fs = '48 48 0'; draw_CenterText('0.5 0.1 0', sprintf(_("^1%s TEST BUILD"), autocvar_menu_watermark), globalToBoxSize('32 32 0', draw_scale), '1 1 1', 0.05, 1); } } void preMenuDraw() { - vector fs, sz, line, mid; + vector fs, sz = '0 0 0', line, mid; - if(cvar("menu_updatecheck")) - { - if(!_Nex_ExtResponseSystem_Queried) - { - _Nex_ExtResponseSystem_Queried = 1; - float startcnt; - string uri; - - cvar_set("cl_startcount", ftos(startcnt = cvar("cl_startcount") + 1)); - - // 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_get(uri, URI_GET_UPDATENOTIFICATION); -#endif - } - } + updateCheck(); if(_Nex_ExtResponseSystem_UpdateTo != "") { @@ -460,7 +557,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) { @@ -548,7 +645,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) \ @@ -562,7 +658,6 @@ float updateCompression() GAMETYPE(MAPINFO_TYPE_ONSLAUGHT) \ GAMETYPE(MAPINFO_TYPE_RACE) \ GAMETYPE(MAPINFO_TYPE_CTS) \ - GAMETYPE(MAPINFO_TYPE_RUNEMATCH) \ GAMETYPE(MAPINFO_TYPE_TEAM_DEATHMATCH) \ /* nothing */ @@ -570,11 +665,13 @@ float GameType_GetID(float cnt) { float i; i = 0; - + #define GAMETYPE(id) if(i++ == cnt) return id; GAMETYPES #undef GAMETYPE - + + unused_float = i; + return 0; } @@ -582,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 ""; } @@ -614,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) @@ -622,7 +719,7 @@ string GameType_GetIcon(float cnt) else return _("free for all"); } - + return _("tuba for all"); }*/