]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/menu/custom/extresponse.qc
fix bug where you could shoot through someone if you were too close
[divverent/nexuiz.git] / data / qcsrc / menu / custom / extresponse.qc
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;
9
10 void() Item_Nex_ExtResponseSystem_SendQuery =
11 {
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;
18 }
19
20 void(float argc) Item_Nex_ExtResponseSystem_Parse =
21 {
22         float i;
23         string banlist;
24         dprint("Received extended response packet from ", argv(0), "\n");
25         if(!_Nex_ExtResponseSystem_RequestsSent)
26         {
27                 dprint("  But I haven't sent a request yet! Ignoring.\n");
28                 return;
29         }
30         if(argv(1) == "noUpdateAvailable")
31         {
32                 if(_Nex_ExtResponseSystem_VersionHandled)
33                 {
34                         dprint("  duplicated update notice, ignored\n");
35                         return;
36                 }
37                 _Nex_ExtResponseSystem_VersionHandled = TRUE;
38         }
39         else if(argv(1) == "updateAvailable")
40         {
41                 if(_Nex_ExtResponseSystem_VersionHandled)
42                 {
43                         dprint("  duplicated update notice, ignored\n");
44                         return;
45                 }
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);
49         }
50         else if(argv(1) == "banlist")
51         {
52                 if(_Nex_ExtResponseSystem_BanlistHandled)
53                 {
54                         dprint("  duplicated banlist notice\n");
55                         return;
56                 }
57                 _Nex_ExtResponseSystem_BanlistHandled = TRUE;
58                 dprint("  BANLIST RECEIVED:");
59
60                 if(cvar_string("net_banlist") == cvar_string("_alientrap_net_banlist"))
61                 {
62                         banlist = ""; // IP of www.alientrap.org
63                         for(i = 0; i < argc - 2; ++i)
64                         {
65                                 banlist = strcat(banlist, argv(i + 2), " ");
66                                 dprint(" ", argv(i + 2));
67                         }
68                         dprint(" (", ftos(i), " items)\n");
69                         cvar_set("net_banlist", banlist);
70                         cvar_set("_alientrap_net_banlist", banlist);
71                 }
72                 else
73                 {
74                         for(i = 0; i < argc - 2; ++i)
75                                 dprint(" ", argv(i + 2));
76                         dprint(" (", ftos(i), " items; overridden by user setting)\n");
77                 }
78         }
79         else
80                 dprint("  UNKNOWN RESPONSE TYPE: ", argv(1), "\n");
81 }
82
83 void() Item_Nex_ExtResponseSystem_CheckForResponse =
84 {
85         local string s;
86         local float argc;
87         while(strlen((s = getextresponse())))
88         {
89                 argc = tokenize(s);
90                 Item_Nex_ExtResponseSystem_Parse(argc);
91         }
92 }
93
94 void() Item_Nex_ExtResponseSystem_Update =
95 {
96         Item_Nex_ExtResponseSystem_CheckForResponse();
97
98         if(!_Nex_ExtResponseSystem_VersionHandled)
99                 if(Timer_Time > _Nex_ExtResponseSystem_RetryTime)
100                         Item_Nex_ExtResponseSystem_SendQuery();
101
102         if(_Nex_ExtResponseSystem_UpdateTo)
103                 if(!_Nex_ExtResponseSystem_UpdateStringSet)
104                 {
105                         local string filler;
106                         local float count;
107
108                         filler = "";
109                         for(count = strlen(_Nex_ExtResponseSystem_UpdateTo); count < 5; ++count)
110                                 filler = strcat(filler, " ");
111
112                         String_EntitySet(self, text, strcat(filler, "Update to Nexuiz ", _Nex_ExtResponseSystem_UpdateTo, " on:"));
113                         self.size = '0 0 0';
114                         _Nex_ExtResponseSystem_UpdateStringSet = TRUE;
115                 }
116
117         Item_Label_Update();
118 }
119
120 void() Item_Nex_ExtResponseSystem_Spawn =
121 {
122         if(_Nex_ExtResponseSystem_Initialized)
123                 objerror("Item_Nex_ExtResponseSystem is a singleton!");
124         _Nex_ExtResponseSystem_Initialized = TRUE;
125         Item_Label_Spawn();
126         self._update = Item_Nex_ExtResponseSystem_Update;
127 }