#include "../menu.qh"
#include <common/campaign_common.qh>
#include <common/constants.qh>
-#include <common/mapinfo.qh>
+#include <common/gamemodes/_mod.qh>
#include <common/util.qh>
#include <common/command/_mod.qh>
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;
depthfirst(root, parent, firstChild, nextSibling, funcPre, funcPost, pass);
}
-.string cvarName;
+.string controlledCvar;
void SUB_Null_ee(entity e1, entity e2)
{
}
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)
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
}
void makeMulti(entity e, string otherCvars)
{
- e.cvarNames_Multi = otherCvars;
+ e.controlledCvars_Multi = otherCvars;
e.saveCvars_Multi = e.saveCvars;
e.saveCvars = saveCvarsMulti;
}
.bool disabled;
void setDependent_Check(entity e)
{
+ bool disabled_prev = e.disabled;
float f;
string s;
if(e.func_setDependent)
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)
{
}
}
-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;
string s;
string un_version = "";
+ string un_tosversion = "";
string un_download = "";
string un_url = "";
string un_bannedservers = "";
un_version = s;
break;
}
+ case "T":
+ {
+ un_tosversion = s;
+ break;
+ }
case "C":
{
un_compatexpire = s;
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":
}
}
- 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 != "")
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)
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");
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();
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()
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;
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)
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) */ \
/**/
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;
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)
{
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));
}
}