X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Futil.qc;h=ac3c798a9f3f424e8fbe338b8459fc9ada444f27;hb=c2c16160d15c51e7e355c096998a06cb6537c292;hp=601db5481499c85bc787003e774bf23036fdf217;hpb=a3cf497caaf1b3e7e07d9d1e4051bf9ae2e55eca;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 601db5481..ac3c798a9 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -6,7 +6,7 @@ #include "../menu.qh" #include #include -#include +#include #include #include @@ -17,7 +17,7 @@ float GL_CheckExtension(string ext) float GL_Have_TextureCompression() { - return (GL_CheckExtension("GL_EXT_texture_compression_s3tc") && GL_CheckExtension("GL_ARB_texture_compression")); + return GL_CheckExtension("GL_EXT_texture_compression_s3tc"); } .entity parent, firstChild, nextSibling; @@ -26,7 +26,7 @@ void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, e depthfirst(root, parent, firstChild, nextSibling, funcPre, funcPost, pass); } -.string cvarName; +.string controlledCvar; void SUB_Null_ee(entity e1, entity e2) { } @@ -53,12 +53,12 @@ void loadAllCvars(entity root) forAllDescendants(root, loadCvarsOf, SUB_Null_ee, NULL); } -.string cvarNames_Multi; +.string controlledCvars_Multi; .void(entity me) saveCvars_Multi; string getCvarsMulti(entity me) { - if (me.cvarNames_Multi) - return me.cvarNames_Multi; + if (me.controlledCvars_Multi) + return me.controlledCvars_Multi; return string_null; } void saveCvarsMulti(entity me) @@ -67,9 +67,9 @@ void saveCvarsMulti(entity me) string s, cvarname; me.saveCvars_Multi(me); - s = cvar_string(me.cvarName); + s = cvar_string(me.controlledCvar); - n = tokenize_console(me.cvarNames_Multi); + n = tokenize_console(me.controlledCvars_Multi); for(i = 0; i < n; ++i) { // cvars prefixed with ! get saved with the inverted value @@ -89,7 +89,7 @@ void saveCvarsMulti(entity me) } void makeMulti(entity e, string otherCvars) { - e.cvarNames_Multi = otherCvars; + e.controlledCvars_Multi = otherCvars; e.saveCvars_Multi = e.saveCvars; e.saveCvars = saveCvarsMulti; } @@ -127,6 +127,7 @@ void makeCallback(entity e, entity cbent, void(entity, entity) cbfunc) .bool disabled; void setDependent_Check(entity e) { + bool disabled_prev = e.disabled; float f; string s; if(e.func_setDependent) @@ -165,6 +166,8 @@ void setDependent_Check(entity e) e.disabled = (e.disabled + ((f >= e.cvar3Max_setDependent) && (f <= e.cvar3Min_setDependent)) > e.op_setDependent); } } + if (disabled_prev != e.disabled && e.loadCvars) + e.loadCvars(e); } void setDependent_Draw(entity e) { @@ -310,11 +313,6 @@ void URI_Get_Callback(float id, float status, string data) } } -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; @@ -349,6 +347,7 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) string s; string un_version = ""; + string un_tosversion = ""; string un_download = ""; string un_url = ""; string un_bannedservers = ""; @@ -369,6 +368,11 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) un_version = s; break; } + case "T": + { + un_tosversion = s; + break; + } case "C": { un_compatexpire = s; @@ -389,10 +393,11 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) APPEND_TO_STRING(un_bannedservers, " ", s); break; } - case "E": + case "H": { - if(cvar("menu_updatecheck_getpacks")) - APPEND_TO_STRING(un_emergency_pk3s, " ", s); + // Hotfix (version-specific pk3 supported in >= 0.8.6) + // replaces "E" (missing-file-specific pk3 supported in <= 0.8.5) + APPEND_TO_STRING(un_emergency_pk3s, " ", s); break; } case "P": @@ -408,25 +413,17 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) } } - if(un_version != "") + if(un_version != "" && vercmp(cvar_string("g_xonoticversion"), un_version) < 0) { - if(vercmp(cvar_string("g_xonoticversion"), un_version) < 0) - { - // update needed - _Nex_ExtResponseSystem_UpdateTo = strzone(un_version); - if(un_download) { LOG_INFOF(_("Update can be downloaded at:\n%s"), 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(); - } - } + // update needed + _Nex_ExtResponseSystem_UpdateTo = strzone(un_version); + if(un_download) { LOG_INFO(_("Update can be downloaded at:"), "\n", un_download); } + if(un_url) { _Nex_ExtResponseSystem_UpdateToURL = strzone(un_url); } + } + + if(un_tosversion != "") + { + _Nex_ExtResponseSystem_NewToS = stof(un_tosversion); } if(un_bannedservers != "") @@ -461,15 +458,8 @@ void 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); + cvar_set("cl_startcount", ftos(cvar("cl_startcount") + 1)); + uri_get("https://update.xonotic.org/checkupdate.txt", URI_GET_UPDATENOTIFICATION); } if(_Nex_ExtResponseSystem_PacksStep > 0) @@ -480,8 +470,16 @@ void updateCheck() allgood = true; for(i = 0; i+1 < n; i += 2) { - if(fexists(argv(i+1))) + if(strcmp(argv(i+1), cvar_string("g_xonoticversion"))) // these aren't the versions we're looking for continue; + string packfn = whichpack("hotfix-autoexec.cfg"); + if(packfn) // we have the cfg we're looking for in some pk3 + { + if(!strncmp(packfn, "dlcache/", 8)) // it's in dlcache + packfn = substring(packfn, 8, strlen(packfn)); // strip prefix "dlcache/" + if(strstrofs(argv(i), packfn, strlen(argv(i)) - strlen(packfn)) > 0) // last chars of url == packfn + continue; // the pk3 we're looking for already provides the cfg we're looking for + } allgood = false; if(_Nex_ExtResponseSystem_PacksStep == 1) // first run localcmd("\ncurl --pak \"", argv(i), "\"\n"); @@ -493,26 +491,21 @@ void updateCheck() if(!Menu_Active) cvar_set("_menu_initialized", "0"); // HACK: cause m_hide call on next start - localcmd("\nmenu_restart\n"); + //localcmd("\nmenu_restart\n"); // <= 0.8.5 + localcmd("\nexec hotfix-autoexec.cfg\n"); } _Nex_ExtResponseSystem_PacksStep = 0; } else _Nex_ExtResponseSystem_PacksStep = 2; } - } -bool show_propermenu = false; - float preMenuInit() { vector sz; vector boxA, boxB; - if(random() < 0.1) - show_propermenu = true; - updateCheck(); MapInfo_Cache_Create(); @@ -542,18 +535,7 @@ float preMenuInit() string campaign_name_previous; float campaign_won_previous; -#ifdef WATERMARK -string autocvar_menu_watermark = WATERMARK; -#else -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 postMenuDraw() {} void DialogOpenButton_Click_withCoords(entity button, entity tab, vector theOrigin, vector theSize); .entity winnerDialog; void preMenuDraw() @@ -568,11 +550,8 @@ void preMenuDraw() fs = ((1/draw_scale.x) * eX + (1/draw_scale.y) * eY) * 12; line = eY * fs.y; string l1, l2; - if(show_propermenu) - l1 = sprintf("Jeff pay 4 new weapons for %s", _Nex_ExtResponseSystem_UpdateTo); - else - l1 = sprintf(_("Update to %s now!"), _Nex_ExtResponseSystem_UpdateTo); - l2 = "http://www.xonotic.org/"; + l1 = sprintf(_("Update to %s now!"), _Nex_ExtResponseSystem_UpdateTo); + l2 = "https://xonotic.org"; if(_Nex_ExtResponseSystem_UpdateToURL) l2 = _Nex_ExtResponseSystem_UpdateToURL; @@ -590,6 +569,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 (!campaign_name_previous) campaign_name_previous = strzone(strcat(campaign_name, "x")); // force unequal if(campaign_name == campaign_name_previous) @@ -682,13 +662,17 @@ float updateCompression() GAMETYPE(MAPINFO_TYPE_CTF) \ GAMETYPE(MAPINFO_TYPE_CA) \ GAMETYPE(MAPINFO_TYPE_FREEZETAG) \ + GAMETYPE(MAPINFO_TYPE_MAYHEM) \ + GAMETYPE(MAPINFO_TYPE_TEAM_MAYHEM) \ GAMETYPE(MAPINFO_TYPE_KEEPAWAY) \ + GAMETYPE(MAPINFO_TYPE_TEAM_KEEPAWAY) \ GAMETYPE(MAPINFO_TYPE_KEYHUNT) \ GAMETYPE(MAPINFO_TYPE_LMS) \ GAMETYPE(MAPINFO_TYPE_DOMINATION) \ GAMETYPE(MAPINFO_TYPE_NEXBALL) \ GAMETYPE(MAPINFO_TYPE_ONSLAUGHT) \ GAMETYPE(MAPINFO_TYPE_ASSAULT) \ + GAMETYPE(MAPINFO_TYPE_SURVIVAL) \ /* GAMETYPE(MAPINFO_TYPE_DUEL) */ \ /**/ @@ -712,10 +696,11 @@ Gametype GameType_GetID(int cnt) int GameType_GetCount() { int i = 0; + int dev = cvar("developer"); #define GAMETYPE(id) ++i; GAMETYPES #undef GAMETYPE - #define GAMETYPE(it) if (cvar("developer")) ++i; + #define GAMETYPE(it) { if (dev > 0) ++i; } HIDDEN_GAMETYPES #undef GAMETYPE return i; @@ -824,6 +809,18 @@ void dialog_hudpanel_main_settings(entity me, string panelname) e.configureXonoticTextSliderValues(e); } +bool isServerSingleplayer() +{ + return (cvar_string("net_address") == "127.0.0.1" && cvar_string("net_address_ipv6") == "::1"); +} + +void makeServerSingleplayer() +{ + // it doesn't allow clients to connect from different machines + localcmd("defer 0.1 \"sv_cmd settemp net_address 127.0.0.1\"\n"); + localcmd("defer 0.1 \"sv_cmd settemp net_address_ipv6 ::1\"\n"); +} + float getFadedAlpha(float currentAlpha, float startAlpha, float targetAlpha) { if(startAlpha < targetAlpha) @@ -837,9 +834,9 @@ void CheckSendCvars(entity me, string cvarnamestring) { if(me.sendCvars) { - LOG_INFOF("Sending cvar: %s -> %s", cvarnamestring, cvar_string(cvarnamestring)); if(gamestatus & (GAME_CONNECTED | GAME_ISSERVER)) { + LOG_INFOF("Sending cvar: %s -> %s", cvarnamestring, cvar_string(cvarnamestring)); cmd(sprintf("\nsendcvar %s\n", cvarnamestring)); } }