1 bool _Nex_ExtResponseSystem_RequestsSent;
2 bool _Nex_ExtResponseSystem_VersionHandled;
3 bool _Nex_ExtResponseSystem_BanlistHandled;
4 string _Nex_ExtResponseSystem_UpdateTo;
5 float _Nex_ExtResponseSystem_RetryTime;
6 float _Nex_ExtResponseSystem_RetryTime_LastDelay;
7 bool _Nex_ExtResponseSystem_UpdateStringSet;
8 bool _Nex_ExtResponseSystem_Initialized;
10 void() Item_Nex_ExtResponseSystem_SendQuery =
12 dprint("Sending extended response requests...\n");
13 localcmd(strcat("packet update.alientrap.org:27950 \"getExtResponse checkUpdates nexuiz ", cvar_string("g_nexuizversion"), "\"\n"));
14 localcmd(strcat("packet update.alientrap.org:27950 \"getExtResponse getBanlist nexuiz\"\n"));
15 _Nex_ExtResponseSystem_RequestsSent = TRUE;
16 _Nex_ExtResponseSystem_RetryTime_LastDelay = _Nex_ExtResponseSystem_RetryTime_LastDelay * 2 + 1;
17 _Nex_ExtResponseSystem_RetryTime = Timer_Time + _Nex_ExtResponseSystem_RetryTime_LastDelay;
20 void(float argc) Item_Nex_ExtResponseSystem_Parse =
24 dprint("Received extended response packet from ", argv(0), "\n");
25 if(!_Nex_ExtResponseSystem_RequestsSent)
27 dprint(" But I haven't sent a request yet! Ignoring.\n");
30 if(argv(1) == "noUpdateAvailable")
32 if(_Nex_ExtResponseSystem_VersionHandled)
34 dprint(" duplicated update notice, ignored\n");
37 _Nex_ExtResponseSystem_VersionHandled = TRUE;
39 else if(argv(1) == "updateAvailable")
41 if(_Nex_ExtResponseSystem_VersionHandled)
43 dprint(" duplicated update notice, ignored\n");
46 _Nex_ExtResponseSystem_VersionHandled = TRUE;
47 _Nex_ExtResponseSystem_UpdateTo = strzone(argv(2)); // note: only one packet can be handled, so this can't be a leak
48 //Nex_MessageBox("Update available!", strcat("We recommend you to download Nexuiz ", _Nex_ExtResponseSystem_UpdateTo, " from http://www.nexuiz.com/"), "Ok", "Download in background", Util_NullFunction, Util_NullFunction);
50 else if(argv(1) == "banlist")
52 if(_Nex_ExtResponseSystem_BanlistHandled)
54 dprint(" duplicated banlist notice\n");
57 _Nex_ExtResponseSystem_BanlistHandled = TRUE;
58 dprint(" BANLIST RECEIVED:");
60 if(cvar_string("net_banlist") == cvar_string("_alientrap_net_banlist"))
62 banlist = ""; // IP of www.alientrap.org
63 for(i = 0; i < argc - 2; ++i)
65 banlist = strcat(banlist, argv(i + 2), " ");
66 dprint(" ", argv(i + 2));
68 dprint(" (", ftos(i), " items)\n");
69 cvar_set("net_banlist", banlist);
70 cvar_set("_alientrap_net_banlist", banlist);
74 for(i = 0; i < argc - 2; ++i)
75 dprint(" ", argv(i + 2));
76 dprint(" (", ftos(i), " items; overridden by user setting)\n");
80 dprint(" UNKNOWN RESPONSE TYPE: ", argv(1), "\n");
83 void() Item_Nex_ExtResponseSystem_CheckForResponse =
87 while(strlen((s = getextresponse())))
90 Item_Nex_ExtResponseSystem_Parse(argc);
94 void() Item_Nex_ExtResponseSystem_Update =
96 Item_Nex_ExtResponseSystem_CheckForResponse();
98 if(!_Nex_ExtResponseSystem_VersionHandled)
99 if(Timer_Time > _Nex_ExtResponseSystem_RetryTime)
100 Item_Nex_ExtResponseSystem_SendQuery();
102 if(_Nex_ExtResponseSystem_UpdateTo)
103 if(!_Nex_ExtResponseSystem_UpdateStringSet)
109 for(count = strlen(_Nex_ExtResponseSystem_UpdateTo); count < 5; ++count)
110 filler = strcat(filler, " ");
112 String_EntitySet(self, text, strcat(filler, "Update to Nexuiz ", _Nex_ExtResponseSystem_UpdateTo, " on:"));
114 _Nex_ExtResponseSystem_UpdateStringSet = TRUE;
120 void() Item_Nex_ExtResponseSystem_Spawn =
122 if(_Nex_ExtResponseSystem_Initialized)
123 objerror("Item_Nex_ExtResponseSystem is a singleton!");
124 _Nex_ExtResponseSystem_Initialized = TRUE;
126 self._update = Item_Nex_ExtResponseSystem_Update;