X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Futil.qc;h=e994491121a8ae1bf012f6981d7c8fdbc1a7a465;hb=71fc0f0f03ecea79e11a71e3f8b51b77598a019e;hp=ec76d389e6cd8d9206162aa7645dc8527a8ab3b8;hpb=e424ba544c41fc40b241b17bd7c1d9c2fc930705;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index ec76d389e..63eb27abf 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -1,11 +1,12 @@ #include "util.qh" +#include "dialog.qh" #include "../item.qh" #include "../menu.qh" #include #include -#include +#include #include #include @@ -16,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; @@ -25,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) { } @@ -52,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) @@ -66,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 @@ -88,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; } @@ -126,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) @@ -164,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) { @@ -266,8 +270,7 @@ void setZonedTooltip(entity e, string theTooltip, string theCvar) theTooltip = string_null; } - if(e.tooltip) - strunzone(e.tooltip); + strfree(e.tooltip); e.tooltip = (theTooltip != "") ? strzone(theTooltip) : string_null; } @@ -306,7 +309,7 @@ void URI_Get_Callback(float id, float status, string data) } else { - LOG_INFOF("Received HTTP request data for an invalid id %d.\n", id); + LOG_INFOF("Received HTTP request data for an invalid id %d.", id); } } @@ -349,6 +352,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 +373,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; @@ -414,7 +423,7 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) { // update needed _Nex_ExtResponseSystem_UpdateTo = strzone(un_version); - if(un_download) { LOG_INFOF(_("Update can be downloaded at:\n%s\n"), un_download); } + if(un_download) { LOG_INFO(_("Update can be downloaded at:"), "\n", un_download); } if(un_url) { _Nex_ExtResponseSystem_UpdateToURL = strzone(un_url); } DisableServerBackwardsCompatibility(); } @@ -429,6 +438,11 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) } } + if(un_tosversion != "") + { + _Nex_ExtResponseSystem_NewToS = stof(un_tosversion); + } + if(un_bannedservers != "") { _Nex_ExtResponseSystem_BannedServers = strzone(un_bannedservers); @@ -458,21 +472,18 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) void updateCheck() { - if(cvar("menu_updatecheck")) + if(!_Nex_ExtResponseSystem_Queried) { - if(!_Nex_ExtResponseSystem_Queried) - { - _Nex_ExtResponseSystem_Queried = 1; - float startcnt; - string uri; + _Nex_ExtResponseSystem_Queried = 1; + float startcnt; + string uri; - cvar_set("cl_startcount", ftos(startcnt = cvar("cl_startcount") + 1)); + 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); - } + // 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) @@ -506,11 +517,16 @@ void updateCheck() } +bool show_propermenu = false; + float preMenuInit() { vector sz; vector boxA, boxB; + if(random() < 0.1) + show_propermenu = true; + updateCheck(); MapInfo_Cache_Create(); @@ -540,18 +556,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() @@ -560,13 +565,16 @@ void preMenuDraw() updateCheck(); - if(_Nex_ExtResponseSystem_UpdateTo != "") + if(_Nex_ExtResponseSystem_UpdateTo != "" && !(gamestatus & (GAME_CONNECTED | GAME_ISSERVER))) { // TODO rather turn this into a dialog fs = ((1/draw_scale.x) * eX + (1/draw_scale.y) * eY) * 12; line = eY * fs.y; string l1, l2; - l1 = sprintf(_("Update to %s now!"), _Nex_ExtResponseSystem_UpdateTo); + 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/"; if(_Nex_ExtResponseSystem_UpdateToURL) l2 = _Nex_ExtResponseSystem_UpdateToURL; @@ -585,6 +593,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) @@ -603,8 +612,7 @@ void preMenuDraw() } else { - strunzone(campaign_name_previous); - campaign_name_previous = strzone(campaign_name); + strcpy(campaign_name_previous, campaign_name); campaign_won_previous = cvar(strcat("g_campaign", campaign_name, "_won")); } } @@ -651,7 +659,7 @@ float updateCompression() cvar_set("gl_texturecompression", "1"); cvar_set("r_texture_dds_load", "1"); if(!can_dds) - LOG_INFO(_("^1ERROR: Texture compression is required but not supported.\n^1Expect visual problems.\n")); + LOG_INFO(_("^1ERROR: Texture compression is required but not supported.\n^1Expect visual problems.")); return 0; } else @@ -685,16 +693,22 @@ float updateCompression() GAMETYPE(MAPINFO_TYPE_NEXBALL) \ GAMETYPE(MAPINFO_TYPE_ONSLAUGHT) \ GAMETYPE(MAPINFO_TYPE_ASSAULT) \ - if (cvar("developer")) GAMETYPE(MAPINFO_TYPE_RACE) \ - if (cvar("developer")) GAMETYPE(MAPINFO_TYPE_CTS) \ + /* GAMETYPE(MAPINFO_TYPE_DUEL) */ \ /* GAMETYPE(MAPINFO_TYPE_INVASION) */ \ /**/ +// hidden gametypes come last so indexing always works correctly +#define HIDDEN_GAMETYPES \ + GAMETYPE(MAPINFO_TYPE_RACE) \ + GAMETYPE(MAPINFO_TYPE_CTS) \ + /**/ + Gametype GameType_GetID(int cnt) { int i = 0; #define GAMETYPE(it) { if (i++ == cnt) return it; } GAMETYPES + HIDDEN_GAMETYPES #undef GAMETYPE return NULL; } @@ -702,9 +716,23 @@ 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 (dev > 0) ++i; } + HIDDEN_GAMETYPES + #undef GAMETYPE + return i; +} + +int GameType_GetTotalCount() +{ + int i = 0; + #define GAMETYPE(id) ++i; + GAMETYPES + HIDDEN_GAMETYPES + #undef GAMETYPE return i; } @@ -723,6 +751,7 @@ string GameType_GetIcon(int cnt) .void(entity) TR; .void(entity, float, float, entity) TD; .void(entity, float) TDempty; +.void(entity, float, float) gotoRC; entity makeXonoticTextLabel(float theAlign, string theText); entity makeXonoticTextSlider(string); .void(entity, string, string) addValue; @@ -732,12 +761,21 @@ entity makeXonoticCheckBoxString(string, string, string, string); entity makeXonoticCheckBox(float, string, string); .bool sendCvars; -void dialog_hudpanel_common_notoggle(entity me, string panelname) +void dialog_hudpanel_main_checkbox(entity me, string panelname) { - float i; entity e; me.TR(me); + me.TDempty(me, 1.5); + me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, strzone(strcat("hud_panel_", panelname)), _("Enable"))); +} + +void dialog_hudpanel_main_settings(entity me, string panelname) +{ + float i; + entity e; + + me.gotoRC(me, me.currentRow + 1.5, 0); me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Background:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); e.addValue(e, _("Default"), ""); @@ -791,6 +829,18 @@ void dialog_hudpanel_common_notoggle(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) @@ -804,9 +854,9 @@ void CheckSendCvars(entity me, string cvarnamestring) { if(me.sendCvars) { - LOG_INFOF("Sending cvar: %s -> %s\n", 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)); } }