}
}
+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;
else
n = tokenizebyseparator(data, "\n");
- if(n >= 1)
+ 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 = "";
+ 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
- }
- else
- {
- // 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));
+ #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;
+ }
}
+ }
- _Nex_ExtResponseSystem_UpdateTo = strzone(_Nex_ExtResponseSystem_UpdateTo);
-
- if(n >= 4)
+ if(un_version != "")
+ {
+ if(vercmp(cvar_string("g_xonoticversion"), un_version) < 0)
{
- _Nex_ExtResponseSystem_BannedServers = strzone(argv(3));
- _Nex_ExtResponseSystem_BannedServersNeedsRefresh = 1;
+ // update needed
+ _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();
}
-
- if(n >= 5)
+ else if(cvar_string("g_xonoticversion") == un_version)
{
- if(cvar("menu_updatecheck_getpacks"))
+ if(un_compatexpire != "")
{
- _Nex_ExtResponseSystem_Packs = strzone(argv(4));
- _Nex_ExtResponseSystem_PacksStep = 1;
+ 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 ////////////////////////////////////////////////////////
// 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 = sprintf("http://update.xonotic.org/checkupdate.txt?version=%s&cnt=%d", uri_escape(cvar_string("g_xonoticversion")), startcnt);
uri_get(uri, URI_GET_UPDATENOTIFICATION);
-#endif
}
}