X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Futil.qc;h=77fedc3729f2713edbddeb27f42da6b57c159d6c;hp=65a5d3e71a60fad721cddb189660e0489891c6ab;hb=70e0d865a18b0a9fee8650db3184b97fa48b06e8;hpb=b87370239d9eacc2cf1d258c5f918049262d18bc diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 65a5d3e71..3f651727c 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -31,7 +31,7 @@ string getZonedTooltipForIdentifier(string s) if(t != "") return strzone(t); } - if(prvm_language == "en" || prvm_language == "") + if(prvm_language == "en") { t = cvar_description(s); if(t != "" && t != "custom cvar") @@ -256,24 +256,31 @@ 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) { - if (id == URI_GET_DISCARD) + if(url_URI_Get_Callback(id, status, data)) { - // discard + // handled } - else if(id == URI_GET_UPDATENOTIFICATION) + else if (id == URI_GET_DISCARD) { - UpdateNotification_URI_Get_Callback(id, status, data); + // discard } - else if(id >= URI_GET_CURL && id <= URI_GET_CURL_END) + else if (id >= URI_GET_CURL && id <= URI_GET_CURL_END) { + // sv_cmd curl Curl_URI_Get_Callback(id, status, data); } + else if (id == URI_GET_UPDATENOTIFICATION) + { + UpdateNotification_URI_Get_Callback(id, status, 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)); } } @@ -306,79 +313,100 @@ 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 = ""; - if(n >= 1) + 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 "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); } } - - _Nex_ExtResponseSystem_UpdateTo = strzone(_Nex_ExtResponseSystem_UpdateTo); } -} - -// END OF URI SYSTEM //////////////////////////////////////////////////////// - -float preMenuInit() -{ - vector sz; - vector boxA, boxB; - - MapInfo_Cache_Create(); - MapInfo_Enumerate(); - if(!MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, 0, 1)) + + if(un_emergency_pk3s != "") { - draw_reset_cropped(); - - sz = eX * 0.025 + eY * 0.025 * (draw_scale_x / draw_scale_y); - draw_CenterText('0.5 0.5 0' - 1.25 * sz_y * eY, _("Autogenerating mapinfo for newly added maps..."), sz, '1 1 1', 1, 0); - - 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); - - boxB_x = boxA_x * (1 - MapInfo_progress) + boxB_x * MapInfo_progress; - draw_Fill(boxA, boxB - boxA, '0 0 1', 1); + _Nex_ExtResponseSystem_Packs = strzone(argv(4)); + _Nex_ExtResponseSystem_PacksStep = 1; + } - return FALSE; + if(un_promoted != "") + { + _Nex_ExtResponseSystem_PromotedServers = strzone(un_promoted); + _Nex_ExtResponseSystem_PromotedServersNeedsRefresh = 1; } - return TRUE; -} -string campaign_name_previous; -float campaign_won_previous; -#ifdef WATERMARK -var string autocvar_menu_watermark = WATERMARK(); -#else -var string autocvar_menu_watermark = ""; -#endif -void postMenuDraw() -{ - if(autocvar_menu_watermark != "") + if(un_recommended != "") { - 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); + _Nex_ExtResponseSystem_RecommendedServers = strzone(un_recommended); + _Nex_ExtResponseSystem_RecommendedServersNeedsRefresh = 1; } + } -void preMenuDraw() -{ - vector fs, sz, line, mid; +// END OF URI SYSTEM //////////////////////////////////////////////////////// + +void updateCheck() +{ if(cvar("menu_updatecheck")) { if(!_Nex_ExtResponseSystem_Queried) @@ -391,7 +419,7 @@ void preMenuDraw() // 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); + 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; @@ -424,6 +452,89 @@ void preMenuDraw() } } + 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)) + { + draw_reset_cropped(); + + sz = eX * 0.025 + eY * 0.025 * (draw_scale_x / draw_scale_y); + draw_CenterText('0.5 0.5 0' - 1.25 * sz_y * eY, _("Autogenerating mapinfo for newly added maps..."), sz, '1 1 1', 1, 0); + + 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); + + boxB_x = boxA_x * (1 - MapInfo_progress) + boxB_x * MapInfo_progress; + draw_Fill(boxA, boxB - boxA, '0 0 1', 1); + + return FALSE; + } + return TRUE; +} + +string campaign_name_previous; +float campaign_won_previous; +#ifdef WATERMARK +var string autocvar_menu_watermark = WATERMARK; +#else +var string autocvar_menu_watermark = ""; +#endif +void postMenuDraw() +{ + if(autocvar_menu_watermark != "") + { + 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 = '0 0 0', line, mid; + + updateCheck(); + if(_Nex_ExtResponseSystem_UpdateTo != "") { // TODO rather turn this into a dialog @@ -537,52 +648,85 @@ float updateCompression() // note: include only those that should be in the menu! #define GAMETYPES \ - GAMETYPE(MAPINFO_TYPE_ARENA, _("Arena")) \ - GAMETYPE(MAPINFO_TYPE_ASSAULT, _("Assault")) \ - GAMETYPE(MAPINFO_TYPE_CTF, _("Capture The Flag")) \ - GAMETYPE(MAPINFO_TYPE_CA, _("Clan Arena")) \ - GAMETYPE(MAPINFO_TYPE_DEATHMATCH, _("Deathmatch")) \ - GAMETYPE(MAPINFO_TYPE_DOMINATION, _("Domination")) \ - GAMETYPE(MAPINFO_TYPE_FREEZETAG, _("Freeze Tag")) \ - GAMETYPE(MAPINFO_TYPE_KEEPAWAY, _("Keepaway")) \ - GAMETYPE(MAPINFO_TYPE_KEYHUNT, _("Key Hunt")) \ - GAMETYPE(MAPINFO_TYPE_LMS, _("Last Man Standing")) \ - GAMETYPE(MAPINFO_TYPE_NEXBALL, _("Nexball")) \ - GAMETYPE(MAPINFO_TYPE_ONSLAUGHT, _("Onslaught")) \ - GAMETYPE(MAPINFO_TYPE_RACE, _("Race")) \ - GAMETYPE(MAPINFO_TYPE_CTS, _("Race CTS")) \ - GAMETYPE(MAPINFO_TYPE_RUNEMATCH, _("Runematch")) \ - GAMETYPE(MAPINFO_TYPE_TEAM_DEATHMATCH, _("Team Deathmatch")) \ + GAMETYPE(MAPINFO_TYPE_ARENA) \ + GAMETYPE(MAPINFO_TYPE_ASSAULT) \ + GAMETYPE(MAPINFO_TYPE_CTF) \ + GAMETYPE(MAPINFO_TYPE_CA) \ + GAMETYPE(MAPINFO_TYPE_DEATHMATCH) \ + GAMETYPE(MAPINFO_TYPE_DOMINATION) \ + GAMETYPE(MAPINFO_TYPE_FREEZETAG) \ + GAMETYPE(MAPINFO_TYPE_KEEPAWAY) \ + GAMETYPE(MAPINFO_TYPE_KEYHUNT) \ + GAMETYPE(MAPINFO_TYPE_LMS) \ + GAMETYPE(MAPINFO_TYPE_NEXBALL) \ + GAMETYPE(MAPINFO_TYPE_ONSLAUGHT) \ + GAMETYPE(MAPINFO_TYPE_RACE) \ + GAMETYPE(MAPINFO_TYPE_CTS) \ + GAMETYPE(MAPINFO_TYPE_TEAM_DEATHMATCH) \ /* nothing */ float GameType_GetID(float cnt) { float i; i = 0; -#define GAMETYPE(id,name) if(i++ == cnt) return id; + + #define GAMETYPE(id) if(i++ == cnt) return id; GAMETYPES -#undef GAMETYPE + #undef GAMETYPE + + unused_float = i; + return 0; } -string GameType_GetName(float cnt) -{ - float i; - i = 0; -#define GAMETYPE(id,name) if(i++ == cnt) return name; - GAMETYPES -#undef GAMETYPE - return _("@!#%'n Tuba Throwing"); -} + float GameType_GetCount() { float i; i = 0; -#define GAMETYPE(id,name) ++i; + + #define GAMETYPE(id) ++i; GAMETYPES -#undef GAMETYPE + #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 ""; +} + +/*string GameType_GetTeams(float cnt) // poor implementation, later something else could be done that's better? +{ + float i = GameType_GetID(cnt); + string s = _MapInfo_GetDefaultEx(i); + + if(i) + { + if(strstrofs(s, "teams", 0) >= 0) + return _("teamplay"); + else + return _("free for all"); + } + + return _("tuba for all"); +}*/ + void dialog_hudpanel_common_notoggle(entity me, string panelname) { float i;