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 bool _Nex_ExtResponseSystem_UpdateStringSet;
7 bool _Nex_ExtResponseSystem_Initialized;
9 void() Item_Nex_ExtResponseSystem_SendQuery =
11 dprint("Sending extended response requests...\n");
12 localcmd(strcat("packet update.alientrap.org:27950 \"getExtResponse checkUpdates nexuiz ", cvar_string("g_nexuizversion"), "\"\n"));
13 localcmd(strcat("packet update.alientrap.org:27950 \"getExtResponse getBanlist nexuiz\"\n"));
14 _Nex_ExtResponseSystem_RequestsSent = TRUE;
15 _Nex_ExtResponseSystem_RetryTime = Timer_Time + 10;
18 void(float argc) Item_Nex_ExtResponseSystem_Parse =
22 dprint("Received extended response packet from ", argv(0), "\n");
23 if(!_Nex_ExtResponseSystem_RequestsSent)
25 dprint(" But I haven't sent a request yet! Ignoring.\n");
28 if(argv(1) == "noUpdateAvailable")
30 if(_Nex_ExtResponseSystem_VersionHandled)
32 dprint(" duplicated update notice, ignored\n");
35 _Nex_ExtResponseSystem_VersionHandled = TRUE;
37 else if(argv(1) == "updateAvailable")
39 if(_Nex_ExtResponseSystem_VersionHandled)
41 dprint(" duplicated update notice, ignored\n");
44 _Nex_ExtResponseSystem_VersionHandled = TRUE;
45 _Nex_ExtResponseSystem_UpdateTo = strzone(argv(2)); // note: only one packet can be handled, so this can't be a leak
46 //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);
48 else if(argv(1) == "banlist")
50 if(_Nex_ExtResponseSystem_BanlistHandled)
52 dprint(" duplicated banlist notice\n");
55 _Nex_ExtResponseSystem_BanlistHandled = TRUE;
56 dprint(" BANLIST RECEIVED:");
58 if(cvar_string("net_banlist") == cvar_string("_alientrap_net_banlist"))
60 banlist = ""; // IP of www.alientrap.org
61 for(i = 0; i < argc - 2; ++i)
63 banlist = strcat(banlist, argv(i + 2), " ");
64 dprint(" ", argv(i + 2));
66 dprint(" (", ftos(i), " items)\n");
67 cvar_set("net_banlist", banlist);
68 cvar_set("_alientrap_net_banlist", banlist);
72 for(i = 0; i < argc - 2; ++i)
73 dprint(" ", argv(i + 2));
74 dprint(" (", ftos(i), " items; overridden by user setting)\n");
78 dprint(" UNKNOWN RESPONSE TYPE: ", argv(1), "\n");
81 void() Item_Nex_ExtResponseSystem_CheckForResponse =
85 while(strlen((s = getextresponse())))
88 Item_Nex_ExtResponseSystem_Parse(argc);
92 void() Item_Nex_ExtResponseSystem_Update =
94 Item_Nex_ExtResponseSystem_CheckForResponse();
96 if(!_Nex_ExtResponseSystem_VersionHandled)
97 if(Timer_Time > _Nex_ExtResponseSystem_RetryTime)
98 Item_Nex_ExtResponseSystem_SendQuery();
100 if(_Nex_ExtResponseSystem_UpdateTo)
101 if(!_Nex_ExtResponseSystem_UpdateStringSet)
107 for(count = strlen(_Nex_ExtResponseSystem_UpdateTo); count < 5; ++count)
108 filler = strcat(filler, " ");
110 String_EntitySet(self, text, strcat(filler, "Update to Nexuiz ", _Nex_ExtResponseSystem_UpdateTo, " on:"));
112 _Nex_ExtResponseSystem_UpdateStringSet = TRUE;
118 void() Item_Nex_ExtResponseSystem_Spawn =
120 if(_Nex_ExtResponseSystem_Initialized)
121 objerror("Item_Nex_ExtResponseSystem is a singleton!");
122 _Nex_ExtResponseSystem_Initialized = TRUE;
124 self._update = Item_Nex_ExtResponseSystem_Update;