]> icculus.org git repositories - divverent/nexuiz.git/blob - navnodeedit/src/client.qc
Made autoflagger ignore remote links (at the same time preserve them)
[divverent/nexuiz.git] / navnodeedit / src / client.qc
1 void(string s) SV_ParseClientCommand =\r
2 {\r
3         local float f, args;\r
4         local string c, s1;\r
5         local vector v;\r
6         local entity navcurrent, navother;\r
7 \r
8         f = -1;\r
9 \r
10         args = tokenize(s);\r
11         c = argv(0);\r
12         if (c == "say")\r
13         {\r
14                 c = argv(1);\r
15                 navcurrent = self.current_navnode;\r
16                 navother = self.other_navnode;\r
17                 if (c == "origin")\r
18                 {\r
19                         if (navcurrent)\r
20                         {\r
21                                 s1 = argv(2);\r
22                                 s1 = strcat(s1, " ");\r
23                                 s1 = strcat(s1, argv(3));\r
24                                 s1 = strcat(s1, " ");\r
25                                 s1 = strcat(s1, argv(4));\r
26                                 v = stov(s1);\r
27                                 setorigin(navcurrent, v);\r
28                         }\r
29                         else\r
30                                 sprint(self, "No selection\n");\r
31                 }\r
32                 else if (c == "resize")\r
33                 {\r
34                         if (!ResizeNavNode(navcurrent, self.axis, stof(argv(2))))\r
35                                 sprint(self, "No selection\n");\r
36                 }\r
37                 else if (c == "save")\r
38                 {\r
39                         LinkNavNodes();\r
40                         SaveNavNodes();\r
41                 }\r
42                 else if (c == "load")\r
43                         LoadNavNodes();\r
44                 else if (c == "teleport")\r
45                 {\r
46                         if (navcurrent)\r
47                         {\r
48                                 if (navcurrent.sflags & S_TELEPORT)\r
49                                         navcurrent.sflags = navcurrent.sflags - (navcurrent.sflags & S_TELEPORT);\r
50                                 else\r
51                                         navcurrent.sflags = navcurrent.sflags | S_TELEPORT;\r
52                         }\r
53                         else\r
54                                 sprint(self, "No selection\n");\r
55                 }\r
56                 else if (c == "door")\r
57                 {\r
58                         if (navcurrent)\r
59                         {\r
60                                 if (navcurrent.sflags & S_DOOR)\r
61                                         navcurrent.sflags = navcurrent.sflags - (navcurrent.sflags & S_DOOR);\r
62                                 else\r
63                                         navcurrent.sflags = navcurrent.sflags | S_DOOR;\r
64                         }\r
65                         else\r
66                                 sprint(self, "No selection\n");\r
67                 }\r
68                 else if (c == "touch")\r
69                 {\r
70                         if (navcurrent)\r
71                         {\r
72                                 if (navcurrent.sflags & S_TOUCH)\r
73                                         navcurrent.sflags = navcurrent.sflags - (navcurrent.sflags & S_TOUCH);\r
74                                 else\r
75                                         navcurrent.sflags = navcurrent.sflags | S_TOUCH;\r
76                         }\r
77                         else\r
78                                 sprint(self, "No selection\n");\r
79                 }\r
80                 else if (c == "nolink")\r
81                 {\r
82                         if (argv(2))\r
83                                 f = stof(argv(2));\r
84                         LFlagChange(navcurrent, f, LF_NOLINK);\r
85                 }\r
86                 else if (c == "nowalk")\r
87                 {\r
88                         if (argv(2))\r
89                                 f = stof(argv(2));\r
90                         LFlagChange(navcurrent, f, LF_NOWALK);\r
91                 }\r
92                 else if (c == "bad")\r
93                 {\r
94                         if (argv(2))\r
95                                 f = stof(argv(2));\r
96                         LFlagChange(navcurrent, f, LF_BAD);\r
97                 }\r
98                 else if (c == "bigdrop")\r
99                 {\r
100                         if (argv(2))\r
101                                 f = stof(argv(2));\r
102                         LFlagChange(navcurrent, f, LF_BIGDROP);\r
103                 }\r
104                 else if (c == "remote")\r
105                         RemoteLinkHandling(navcurrent, navother);\r
106                 else\r
107                         clientcommand(self, s);         \r
108         }\r
109         else\r
110                 clientcommand(self, s);\r
111 };\r
112 \r
113 void() FixFrames =\r
114 {\r
115         local entity e;\r
116 \r
117         if (self.other_navnode)\r
118                 self.other_navnode.colormod = '0 0 0';\r
119 \r
120         if (self.current_navnode)\r
121         {\r
122                 self.current_navnode.colormod = '0 0 0';\r
123                 self.current_navnode.scale = 1;\r
124                 e = self.current_navnode.plane_chain;\r
125                 if (e)\r
126                 {\r
127                         e.effects = EF_NODRAW;\r
128                         e = e.plane_next;\r
129                         while (e != self.current_navnode.plane_chain)\r
130                         {\r
131                                 e.effects = EF_NODRAW;\r
132                                 e = e.plane_next;\r
133                         }\r
134                 }\r
135                 if (self.current_navnode.link0)\r
136                 {\r
137                         self.current_navnode.link0.effects = 0;\r
138                         self.current_navnode.link0.frame = 20;\r
139                         if (self.current_navnode.link1)\r
140                         {\r
141                                 self.current_navnode.link1.effects = 0;\r
142                                 self.current_navnode.link1.frame = 20;\r
143                                 if (self.current_navnode.link2)\r
144                                 {\r
145                                         self.current_navnode.link2.effects = 0;\r
146                                         self.current_navnode.link2.frame = 20;\r
147                                         if (self.current_navnode.link3)\r
148                                         {\r
149                                                 self.current_navnode.link3.effects = 0;\r
150                                                 self.current_navnode.link3.frame = 20;\r
151                                                 if (self.current_navnode.link4)\r
152                                                 {\r
153                                                         self.current_navnode.link4.effects = 0;\r
154                                                         self.current_navnode.link4.frame = 20;\r
155                                                         if (self.current_navnode.link5)\r
156                                                         {\r
157                                                                 self.current_navnode.link5.effects = 0;\r
158                                                                 self.current_navnode.link5.frame = 20;\r
159                                                                 if (self.current_navnode.link6)\r
160                                                                 {\r
161                                                                         self.current_navnode.link6.effects = 0;\r
162                                                                         self.current_navnode.link6.frame = 20;\r
163                                                                         if (self.current_navnode.link7)\r
164                                                                         {\r
165                                                                                 self.current_navnode.link7.effects = 0;\r
166                                                                                 self.current_navnode.link7.frame = 20;\r
167                                                                                 if (self.current_navnode.link8)\r
168                                                                                 {\r
169                                                                                         self.current_navnode.link8.effects = 0;\r
170                                                                                         self.current_navnode.link8.frame = 20;\r
171                                                                                         if (self.current_navnode.link9)\r
172                                                                                         {\r
173                                                                                                 self.current_navnode.link9.effects = 0;\r
174                                                                                                 self.current_navnode.link9.frame = 20;\r
175                                                                                                 if (self.current_navnode.link10)\r
176                                                                                                 {\r
177                                                                                                         self.current_navnode.link10.effects = 0;\r
178                                                                                                         self.current_navnode.link10.frame = 20;\r
179                                                                                                         if (self.current_navnode.link11)\r
180                                                                                                         {\r
181                                                                                                                 self.current_navnode.link11.effects = 0;\r
182                                                                                                                 self.current_navnode.link11.frame = 20;\r
183                                                                                                                 if (self.current_navnode.link12)\r
184                                                                                                                 {\r
185                                                                                                                         self.current_navnode.link12.effects = 0;\r
186                                                                                                                         self.current_navnode.link12.frame = 20;\r
187                                                                                                                         if (self.current_navnode.link13)\r
188                                                                                                                         {\r
189                                                                                                                                 self.current_navnode.link13.effects = 0;\r
190                                                                                                                                 self.current_navnode.link13.frame = 20;\r
191                                                                                                                                 if (self.current_navnode.link14)\r
192                                                                                                                                 {\r
193                                                                                                                                         self.current_navnode.link14.effects = 0;\r
194                                                                                                                                         self.current_navnode.link14.frame = 20;\r
195                                                                                                                                         if (self.current_navnode.link15)\r
196                                                                                                                                         {\r
197                                                                                                                                                 self.current_navnode.link15.effects = 0;\r
198                                                                                                                                                 self.current_navnode.link15.frame = 20;\r
199                                                                                                                                                 if (self.current_navnode.link16)\r
200                                                                                                                                                 {\r
201                                                                                                                                                         self.current_navnode.link16.effects = 0;\r
202                                                                                                                                                         self.current_navnode.link16.frame = 20;\r
203                                                                                                                                                         if (self.current_navnode.link17)\r
204                                                                                                                                                         {\r
205                                                                                                                                                                 self.current_navnode.link17.effects = 0;\r
206                                                                                                                                                                 self.current_navnode.link17.frame = 20;\r
207                                                                                                                                                                 if (self.current_navnode.link18)\r
208                                                                                                                                                                 {\r
209                                                                                                                                                                         self.current_navnode.link18.effects = 0;\r
210                                                                                                                                                                         self.current_navnode.link18.frame = 20;\r
211                                                                                                                                                                         if (self.current_navnode.link19)\r
212                                                                                                                                                                         {\r
213                                                                                                                                                                                 self.current_navnode.link19.effects = 0;\r
214                                                                                                                                                                                 self.current_navnode.link19.frame = 20;\r
215                                                                                                                                                                         }\r
216                                                                                                                                                                 }\r
217                                                                                                                                                         }\r
218                                                                                                                                                 }\r
219                                                                                                                                         }\r
220                                                                                                                                 }\r
221                                                                                                                         }\r
222                                                                                                                 }\r
223                                                                                                         }\r
224                                                                                                 }\r
225                                                                                         }\r
226                                                                                 }\r
227                                                                         }\r
228                                                                 }\r
229                                                         }\r
230                                                 }\r
231                                         }\r
232                                 }\r
233                         }\r
234                 }\r
235         }\r
236 };\r
237 \r
238 void() SwitchNavNode =\r
239 {\r
240         FixFrames();\r
241         self.current_navnode = FindCurrentNavNode(self.current_navnode, self.origin, self.selmode);\r
242         if (!self.current_navnode)\r
243                 self.current_navnode = FindCurrentNavNode(world, self.origin, self.selmode);\r
244 };\r
245 \r
246 void(float match) SwitchAxis =\r
247 {\r
248         if (match == -1)\r
249         {\r
250                 self.axis = self.axis + 1;\r
251                 if (self.axis > 2)\r
252                         self.axis = 0;\r
253         }\r
254         else if (match == 0)\r
255                 self.axis = 0;\r
256         else if (match == 1)\r
257                 self.axis = 1;\r
258         else if (match == 2)\r
259                 self.axis = 2;\r
260 };\r
261 \r
262 void(float i) ImpulseCommands =\r
263 {\r
264         local float f;\r
265         local vector v;\r
266         local entity e;\r
267 \r
268         if (self.confirm && i >= 1 && i <= 9)\r
269         {\r
270                 Select(i);\r
271                 return;\r
272         }\r
273         else if (i == 101)\r
274         {\r
275                 if (self.button3 & !self.button4)\r
276                 {\r
277                         if (self.axis == 0)\r
278                                 f = self.current_navnode.origin_x + self.current_navnode.maxs_x;\r
279                         else if (self.axis == 1)\r
280                                 f = self.current_navnode.origin_y + self.current_navnode.maxs_y;\r
281                         else if (self.axis == 2)\r
282                                 f = self.current_navnode.origin_z + self.current_navnode.maxs_z;\r
283                         f = f + self.gridsize;\r
284                         ResizeNavNode(self.current_navnode, self.axis, f);\r
285                 }\r
286                 else if (self.button4 & !self.button3)\r
287                 {\r
288                         if (self.current_clippoint)\r
289                         {\r
290                                 e = self.current_clippoint;\r
291                                 v = self.current_clippoint.origin;\r
292                         }\r
293                         else\r
294                         {\r
295                                 e = self.current_navnode;\r
296                                 v = self.current_navnode.origin;\r
297                         }\r
298                         if (self.axis == 0)\r
299                                 v_x = v_x + self.gridsize;\r
300                         else if (self.axis == 1)\r
301                                 v_y = v_y + self.gridsize;\r
302                         else if (self.axis == 2)\r
303                                 v_z = v_z + self.gridsize;\r
304                         MoveNavNode(e, v);\r
305                 }\r
306                 else if (self.button3 & self.button4)\r
307                 {\r
308                         if (self.current_clippoint)\r
309                         {\r
310                                 if (self.current_clippoint == self.clippoint1)\r
311                                 {\r
312                                         if (self.clippoint2)\r
313                                                 self.current_clippoint = self.clippoint2;\r
314                                         else\r
315                                                 self.current_clippoint = self.clippoint1;\r
316                                 }\r
317                                 else if (self.current_clippoint == self.clippoint2)\r
318                                 {\r
319                                         if (self.clippoint3)\r
320                                                 self.current_clippoint = self.clippoint3;\r
321                                         else\r
322                                                 self.current_clippoint = self.clippoint1;\r
323                                 }\r
324                                 else if (self.current_clippoint == self.clippoint3)\r
325                                         self.current_clippoint = self.clippoint1;\r
326                         }\r
327                         else\r
328                                 self.current_plane = self.current_plane.plane_next;\r
329                 }\r
330                 else\r
331                         self.gridsize = self.gridsize * 2;\r
332         }\r
333         else if (i == 102)\r
334         {\r
335                 if (self.button3 & !self.button4)\r
336                 {\r
337                         if (self.axis == 0)\r
338                                 f = self.current_navnode.origin_x + self.current_navnode.maxs_x;\r
339                         else if (self.axis == 1)\r
340                                 f = self.current_navnode.origin_y + self.current_navnode.maxs_y;\r
341                         else if (self.axis == 2)\r
342                                 f = self.current_navnode.origin_z + self.current_navnode.maxs_z;\r
343                         f = f - self.gridsize;\r
344                         ResizeNavNode(self.current_navnode, self.axis, f);\r
345                 }\r
346                 else if (self.button4 & !self.button3)\r
347                 {\r
348                         if (self.current_clippoint)\r
349                         {\r
350                                 e = self.current_clippoint;\r
351                                 v = self.current_clippoint.origin;\r
352                         }\r
353                         else\r
354                         {\r
355                                 e = self.current_navnode;\r
356                                 v = self.current_navnode.origin;\r
357                         }\r
358                         if (self.axis == 0)\r
359                                 v_x = v_x - self.gridsize;\r
360                         else if (self.axis == 1)\r
361                                 v_y = v_y - self.gridsize;\r
362                         else if (self.axis == 2)\r
363                                 v_z = v_z - self.gridsize;\r
364                         MoveNavNode(e, v);\r
365                 }\r
366                 else if (self.button3 & self.button4)\r
367                 {\r
368                         if (self.current_clippoint)\r
369                         {\r
370                                 if (self.current_clippoint == self.clippoint1)\r
371                                 {\r
372                                         if (self.clippoint3)\r
373                                                 self.current_clippoint = self.clippoint3;\r
374                                         else if (self.clippoint2)\r
375                                                 self.current_clippoint = self.clippoint2;\r
376                                         else\r
377                                                 self.current_clippoint = self.clippoint1;\r
378                                 }\r
379                                 else if (self.current_clippoint == self.clippoint2)\r
380                                         self.current_clippoint = self.clippoint1;\r
381                                 else if (self.current_clippoint == self.clippoint3)\r
382                                         self.current_clippoint = self.clippoint2;\r
383                         }\r
384                         else\r
385                                 self.current_plane = self.current_plane.plane_prev;\r
386                 }\r
387                 else\r
388                 {\r
389                         self.gridsize = self.gridsize * 0.5;\r
390                         if (self.gridsize < 1)\r
391                                 self.gridsize = 1;\r
392                 }\r
393         }\r
394         else if (i == 110)      // Spawns new navnode\r
395         {\r
396                 if (!self.lockselection)\r
397                 {\r
398                         v = SnapToGrid(self.origin);\r
399                         e = SpawnNavNode(v, '-32 -32 -32', '32 32 32');\r
400                         LinkNavNodes();\r
401                         if (e)\r
402                         {\r
403                                 FixFrames();\r
404                                 self.current_navnode = e;\r
405                                 self.other_navnode = e;\r
406                                 self.lockselection = TRUE;\r
407                                 self.confirm = 0;\r
408                         }\r
409                 }\r
410         }\r
411         else if (i == 111)      // Deletes current navnode (FIXME: better solution? most think remote functions checking for variables in cases such as this is ugly)\r
412         {\r
413                 if (self.current_navnode)\r
414                 {\r
415                         self.confirm = C_DELETE_NAVNODE;\r
416                         self.lockselection = TRUE;\r
417                 }\r
418         }\r
419         else if (i == 112)      // Deletes current plane (FIXME: better solution? most think remote functions checking for variables in cases such as this is ugly)\r
420         {\r
421                 if (self.current_plane)\r
422                 {\r
423                         self.confirm = C_DELETE_PLANE;\r
424                         self.lockselection = TRUE;\r
425                 }\r
426         }\r
427         else if (i == 113)      // Runs autoflagger (FIXME: better solution? most think remote functions checking for variables in cases such as this is ugly)\r
428                 self.confirm = C_AUTOFLAGGER;\r
429         else if (i == 120)      // Switches navnode in case of overlap\r
430         {\r
431                 if (!self.lockselection)\r
432                 if (self.selmode == M_OVERLAP)\r
433                         SwitchNavNode();\r
434         }\r
435         else if (i == 121)      // Switches selection mode\r
436         {\r
437                 if (self.selmode == M_OVERLAP)\r
438                         self.selmode = M_CLOSEST;\r
439                 else if (self.selmode == M_CLOSEST)\r
440                         self.selmode = M_OVERLAP;\r
441         }\r
442         else if (i == 122)      // Cycles through axis\r
443                 SwitchAxis(-1);\r
444         else if (i == 123)      // Switches to X axis\r
445                 SwitchAxis(0);\r
446         else if (i == 124)      // Switches to Y axis\r
447                 SwitchAxis(1);\r
448         else if (i == 125)      // Switches to Z axis\r
449                 SwitchAxis(2);\r
450 };\r
451 \r
452 void() ClientKill = {};\r
453 \r
454 void() ClientConnect =\r
455 {\r
456         bprint (self.netname);\r
457         bprint (" has connected\n");\r
458 };\r
459 \r
460 void() ClientDisconnect =\r
461 {\r
462         bprint (self.netname);\r
463         bprint (" has disconnected\n");\r
464 };\r
465 \r
466 float BT_LIGHTNING = 0;\r
467 float BT_BEAM = 1;\r
468 \r
469 void(float beamtype, vector bmins, vector bmaxs) BeamBox =\r
470 {\r
471         local vector v1, v2;\r
472 \r
473         v1 = bmaxs;\r
474         v2 = bmaxs;\r
475         v2_x = bmins_x;\r
476         if (beamtype == BT_LIGHTNING)\r
477                 te_lightning1(world, v1, v2);\r
478         else\r
479                 te_beam(world, v1, v2);\r
480         v1 = bmaxs;\r
481         v2 = bmaxs;\r
482         v2_y = bmins_y;\r
483         if (beamtype == BT_LIGHTNING)\r
484                 te_lightning1(world, v1, v2);\r
485         else\r
486                 te_beam(world, v1, v2);\r
487         v1 = bmaxs;\r
488         v2 = bmaxs;\r
489         v2_z = bmins_z;\r
490         if (beamtype == BT_LIGHTNING)\r
491                 te_lightning1(world, v1, v2);\r
492         else\r
493                 te_beam(world, v1, v2);\r
494         v1 = bmins;\r
495         v2 = bmins;\r
496         v2_x = bmaxs_x;\r
497         if (beamtype == BT_LIGHTNING)\r
498                 te_lightning1(world, v1, v2);\r
499         else\r
500                 te_beam(world, v1, v2);\r
501         v1 = bmins;\r
502         v2 = bmins;\r
503         v2_y = bmaxs_y;\r
504         if (beamtype == BT_LIGHTNING)\r
505                 te_lightning1(world, v1, v2);\r
506         else\r
507                 te_beam(world, v1, v2);\r
508         v1 = bmins;\r
509         v2 = bmins;\r
510         v2_z = bmaxs_z;\r
511         if (beamtype == BT_LIGHTNING)\r
512                 te_lightning1(world, v1, v2);\r
513         else\r
514                 te_beam(world, v1, v2);\r
515         v1 = bmins;\r
516         v1_z = bmaxs_z;\r
517         v2 = bmins;\r
518         v2_x = bmaxs_x;\r
519         v2_z = bmaxs_z;\r
520         if (beamtype == BT_LIGHTNING)\r
521                 te_lightning1(world, v1, v2);\r
522         else\r
523                 te_beam(world, v1, v2);\r
524         v1 = bmins;\r
525         v1_z = bmaxs_z;\r
526         v2 = bmins;\r
527         v2_y = bmaxs_y;\r
528         v2_z = bmaxs_z;\r
529         if (beamtype == BT_LIGHTNING)\r
530                 te_lightning1(world, v1, v2);\r
531         else\r
532                 te_beam(world, v1, v2);\r
533         v1 = bmaxs;\r
534         v1_z = bmins_z;\r
535         v2 = bmaxs;\r
536         v2_x = bmins_x;\r
537         v2_z = bmins_z;\r
538         if (beamtype == BT_LIGHTNING)\r
539                 te_lightning1(world, v1, v2);\r
540         else\r
541                 te_beam(world, v1, v2);\r
542         v1 = bmaxs;\r
543         v1_z = bmins_z;\r
544         v2 = bmaxs;\r
545         v2_y = bmins_y;\r
546         v2_z = bmins_z;\r
547         if (beamtype == BT_LIGHTNING)\r
548                 te_lightning1(world, v1, v2);\r
549         else\r
550                 te_beam(world, v1, v2);\r
551         v1 = bmins;\r
552         v1_x = bmaxs_x;\r
553         v2 = bmaxs;\r
554         v2_y = bmins_y;\r
555         if (beamtype == BT_LIGHTNING)\r
556                 te_lightning1(world, v1, v2);\r
557         else\r
558                 te_beam(world, v1, v2);\r
559         v1 = bmins;\r
560         v1_y = bmaxs_y;\r
561         v2 = bmaxs;\r
562         v2_x = bmins_x;\r
563         if (beamtype == BT_LIGHTNING)\r
564                 te_lightning1(world, v1, v2);\r
565         else\r
566                 te_beam(world, v1, v2);\r
567 };\r
568 \r
569 void() PlayerPreThink =\r
570 {\r
571         local float f;\r
572         local vector v, edge1, edge2, org, tvec, intonav; // FIXME\r
573         local entity e, navcurrent, navother, delplane;\r
574 \r
575         if (self.selmode == M_OVERLAP)\r
576         {\r
577                 if (self.current_navnode)\r
578                 if (!self.lockselection)\r
579                 if (!boxesoverlap(self.origin, self.origin, self.current_navnode.origin + self.current_navnode.mins, self.current_navnode.origin + self.current_navnode.maxs))\r
580                 {\r
581                         FixFrames();\r
582                         self.other_navnode = world;\r
583                         self.current_navnode = world;\r
584                 }\r
585         }\r
586         else if (self.selmode == M_CLOSEST)\r
587         {\r
588                 if (self.current_navnode)\r
589                 if (!self.lockselection)\r
590                 {\r
591                         e = FindCurrentNavNode(world, self.origin, self.selmode);\r
592                         if (e != self.current_navnode)\r
593                         {\r
594                                 FixFrames();\r
595                                 self.other_navnode = world;\r
596                                 self.current_navnode = world;\r
597                         }\r
598                 }\r
599         }\r
600 \r
601         if (self.current_navnode)\r
602                 navcurrent = self.current_navnode;\r
603         else\r
604         {\r
605                 self.current_plane = world;\r
606                 navcurrent = self.current_navnode = FindCurrentNavNode(world, self.origin, self.selmode);\r
607         }\r
608 \r
609         navother = FindCurrentNavNode(world, self.origin, self.selmode);\r
610         if (self.other_navnode)\r
611         if (navother != self.other_navnode)\r
612         {\r
613                 if (self.other_navnode != self.current_navnode)\r
614                         self.other_navnode.colormod = '0 0 0';\r
615         }\r
616         self.other_navnode = navother;\r
617 \r
618         if (self.button0)\r
619         {\r
620                 if (!(self.buttonflag & B_FLAG0))\r
621                 {\r
622                         if (!self.button2)\r
623                         {\r
624                                 if (self.button3 & !self.button4)\r
625                                 {\r
626                                         makevectors(self.v_angle);\r
627                                         traceline(self.origin, self.origin + v_forward*8192, TRUE, world);\r
628                                         v = SnapToGrid(trace_endpos);\r
629                                         if (self.axis == 0)\r
630                                                 ResizeNavNode(navcurrent, self.axis, v_x);\r
631                                         else if (self.axis == 1)\r
632                                                 ResizeNavNode(navcurrent, self.axis, v_y);\r
633                                         else if (self.axis == 2)\r
634                                                 ResizeNavNode(navcurrent, self.axis, v_z);\r
635                                 }\r
636                                 else if (self.button4 & !self.button3)\r
637                                 {\r
638                                         makevectors(self.v_angle);\r
639                                         traceline(self.origin, self.origin + v_forward*8192, TRUE, world);\r
640                                         if (self.current_clippoint)\r
641                                                 e = self.current_clippoint;\r
642                                         else\r
643                                                 e = navcurrent;\r
644                                         v = SnapToGrid(trace_endpos);\r
645                                         MoveNavNode(e, v);\r
646                                 }\r
647                                 else if (self.button3 & self.button4)\r
648                                 {\r
649                                         if (self.clippoint3)\r
650                                         {\r
651                                                 edge1=self.clippoint1.origin-self.clippoint2.origin;\r
652                                                 edge2=self.clippoint3.origin-self.clippoint2.origin;\r
653                                                 v_x=edge1_y*edge2_z-edge1_z*edge2_y;\r
654                                                 v_y=edge1_z*edge2_x-edge1_x*edge2_z;\r
655                                                 v_z=edge1_x*edge2_y-edge1_y*edge2_x;\r
656                                                 v = normalize(v);\r
657                                                 org = (((self.clippoint1.origin + self.clippoint2.origin)*0.5) + self.clippoint3.origin)*0.5;\r
658                                                 RemoveClippoints();\r
659                                         }\r
660                                         else\r
661                                         {\r
662                                                 makevectors(self.v_angle);\r
663                                                 traceline(self.origin, self.origin + v_forward*8192, TRUE, world);\r
664                                                 v = trace_plane_normal;\r
665                                                 org = trace_endpos;\r
666                                         }\r
667                                         f = rint(v * (navcurrent.origin - org));\r
668                                         delplane = world;\r
669                                         e = navcurrent.plane_chain;\r
670                                         if (e)\r
671                                         {\r
672                                                 if (e.mangle == v*-1)\r
673                                                 if (e.delay == f)\r
674                                                         delplane = e;\r
675                                                 e = e.plane_next;\r
676                                                 while (e != navcurrent.plane_chain)\r
677                                                 {\r
678                                                         if (e.mangle == v*-1)\r
679                                                         if (e.delay == f)\r
680                                                                 delplane = e;\r
681                                                         e = e.plane_next;\r
682                                                 }\r
683                                         }\r
684                                         if (delplane)\r
685                                         {\r
686                                                 RemovePlane(navcurrent, delplane);\r
687                                                 self.current_plane = world;\r
688                                         }\r
689                                         else\r
690                                                 AddPlane(navcurrent, v, f);\r
691                                 }\r
692                                 else\r
693                                 {\r
694                                         makevectors (self.v_angle);\r
695                                         v = v_forward*-1;\r
696                                         traceline(self.origin, self.origin + v_forward*8192, TRUE, self);\r
697                                         f = pointcontents(trace_endpos);\r
698                                         if (f != CONTENT_SOLID || f != CONTENT_SKY)\r
699                                                 setorigin(self, trace_endpos + v*8);\r
700                                 }\r
701                         }\r
702                 }\r
703                 self.buttonflag = self.buttonflag | B_FLAG0;\r
704         }\r
705         else\r
706                 self.buttonflag = self.buttonflag - (self.buttonflag & B_FLAG0);\r
707 \r
708         if (self.button2)\r
709         {\r
710                 if (!(self.buttonflag & B_FLAG2))\r
711                 {\r
712                         if (!self.button0)\r
713                         {\r
714                                 if (self.button3 & !self.button4)\r
715                                 {\r
716                                         v = SnapToGrid(self.origin);\r
717                                         ResizeNavNode(navcurrent, 0, v_x);\r
718                                         ResizeNavNode(navcurrent, 1, v_y);\r
719                                         ResizeNavNode(navcurrent, 2, v_z);\r
720                                 }\r
721                                 else if (self.button4 & !self.button3)\r
722                                 {\r
723                                         if (self.current_clippoint)\r
724                                                 e = self.current_clippoint;\r
725                                         else\r
726                                                 e = navcurrent;\r
727                                         v = SnapToGrid(self.origin);\r
728                                         MoveNavNode(e, v);\r
729                                 }\r
730                                 else if (self.button3 & self.button4)\r
731                                 {\r
732                                         if (navcurrent)\r
733                                         if (self.lockselection)\r
734                                         {\r
735                                                 v = SnapToGrid(self.origin);\r
736                                                 SpawnClipPoint(v);\r
737                                         }\r
738                                 }\r
739                                 else if (!self.confirm)\r
740                                 {\r
741                                         if (self.lockselection)\r
742                                         {\r
743                                                 RemoveClippoints();\r
744                                                 self.lockselection = FALSE;\r
745                                         }\r
746                                         else\r
747                                                 self.lockselection = TRUE;\r
748                                 }\r
749                         }\r
750                 }\r
751                 self.buttonflag = self.buttonflag | B_FLAG2;\r
752         }\r
753         else\r
754                 self.buttonflag = self.buttonflag - (self.buttonflag & B_FLAG2);\r
755 \r
756         if (time >= self.ltntime + 0.15)\r
757         {\r
758                 self.ltntime = time;\r
759                 if (navcurrent)\r
760                 {\r
761                         navcurrent.scale = 0.2;\r
762                         if (!self.current_plane)\r
763                                 self.current_plane = navcurrent.plane_chain;\r
764                         if (self.lockselection)\r
765                         {\r
766                                 if (self.clippoint1)\r
767                                 {\r
768                                         if (!self.current_clippoint)\r
769                                                 self.current_clippoint = self.clippoint1;\r
770                                         if (self.current_clippoint == self.clippoint1)\r
771                                         {\r
772                                                 self.clippoint1.colormod = '1 0 0';\r
773                                                 if (self.clippoint2)\r
774                                                 {\r
775                                                         self.clippoint2.colormod = '0 0 0';\r
776                                                         if (self.clippoint3)\r
777                                                                 self.clippoint3.colormod = '0 0 0';\r
778                                                 }\r
779                                         }\r
780                                         else if (self.current_clippoint == self.clippoint2)\r
781                                         {\r
782                                                 self.clippoint2.colormod = '1 0 0';\r
783                                                 if (self.clippoint1)\r
784                                                 {\r
785                                                         self.clippoint1.colormod = '0 0 0';\r
786                                                         if (self.clippoint3)\r
787                                                                 self.clippoint3.colormod = '0 0 0';\r
788                                                 }\r
789                                         }\r
790                                         else if (self.current_clippoint == self.clippoint3)\r
791                                         {\r
792                                                 self.clippoint3.colormod = '1 0 0';\r
793                                                 if (self.clippoint1)\r
794                                                 {\r
795                                                         self.clippoint1.colormod = '0 0 0';\r
796                                                         if (self.clippoint2)\r
797                                                                 self.clippoint2.colormod = '0 0 0';\r
798                                                 }\r
799                                         }\r
800                                 }\r
801                                 navcurrent.colormod = '0.25 0.25 1';\r
802                                 BeamBox(BT_LIGHTNING, navcurrent.origin + navcurrent.mins, navcurrent.origin + navcurrent.maxs);\r
803                                 e = navcurrent.plane_chain;\r
804                                 if (e)\r
805                                 {\r
806                                         if (self.current_plane == e)\r
807                                                 e.skin = 3;\r
808                                         else\r
809                                                 e.skin = 1;\r
810                                         e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;\r
811                                         e = e.plane_next;\r
812                                         while (e != navcurrent.plane_chain)\r
813                                         {\r
814                                                 if (self.current_plane == e)\r
815                                                         e.skin = 3;\r
816                                                 else\r
817                                                         e.skin = 1;\r
818                                                 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;\r
819                                                 e = e.plane_next;\r
820                                         }\r
821                                 }\r
822                                 if (navother != navcurrent)\r
823                                 {\r
824                                         navother.colormod = '1 0 0';\r
825                                         BeamBox(BT_BEAM, navother.origin + navother.mins, navother.origin + navother.maxs);\r
826                                 }\r
827                         }\r
828                         else\r
829                         {\r
830                                 navcurrent.colormod = '1 0 0';\r
831                                 BeamBox(BT_BEAM, navcurrent.origin + navcurrent.mins, navcurrent.origin + navcurrent.maxs);\r
832                                 e = navcurrent.plane_chain;\r
833                                 if (e)\r
834                                 {\r
835                                         if (self.current_plane == e)\r
836                                                 e.skin = 2;\r
837                                         else\r
838                                                 e.skin = 0;\r
839                                         e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;\r
840                                         e = e.plane_next;\r
841                                         while (e != navcurrent.plane_chain)\r
842                                         {\r
843                                                 if (self.current_plane == e)\r
844                                                         e.skin = 2;\r
845                                                 else\r
846                                                         e.skin = 0;\r
847                                                 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;\r
848                                                 e = e.plane_next;\r
849                                         }\r
850                                 }\r
851                         }\r
852                         e = navcurrent.plane_chain;\r
853                         if (e)\r
854                         {\r
855                                 if (e.mangle_x < 0)\r
856                                         tvec_x = self.origin_x + self.mins_x;\r
857                                 else\r
858                                         tvec_x = self.origin_x + self.maxs_x;\r
859                                 if (e.mangle_y < 0)\r
860                                         tvec_y = self.origin_y + self.mins_y;\r
861                                 else\r
862                                         tvec_y = self.origin_y + self.maxs_y;\r
863                                 if (e.mangle_z < 0)\r
864                                         tvec_z = self.origin_z + self.mins_z;\r
865                                 else\r
866                                         tvec_z = self.origin_z + self.maxs_z;\r
867                                 f = (tvec * e.mangle) - ((navcurrent.origin + (e.delay * e.mangle)) * e.mangle);\r
868                                 if (f > 0)\r
869                                         intonav = intonav + e.mangle*-1;\r
870                                 e = e.plane_next;\r
871                                 while (e != navcurrent.plane_chain)\r
872                                 {\r
873                                         if (e.mangle_x < 0)\r
874                                                 tvec_x = self.origin_x + self.mins_x;\r
875                                         else\r
876                                                 tvec_x = self.origin_x + self.maxs_x;\r
877                                         if (e.mangle_y < 0)\r
878                                                 tvec_y = self.origin_y + self.mins_y;\r
879                                         else\r
880                                                 tvec_y = self.origin_y + self.maxs_y;\r
881                                         if (e.mangle_z < 0)\r
882                                                 tvec_z = self.origin_z + self.mins_z;\r
883                                         else\r
884                                                 tvec_z = self.origin_z + self.maxs_z;\r
885                                         f = (tvec * e.mangle) - ((navcurrent.origin + (e.delay * e.mangle)) * e.mangle);\r
886                                         if (f > 0)\r
887                                                 intonav = intonav + e.mangle*-1;\r
888                                         e = e.plane_next;\r
889                                 }\r
890                         }\r
891                         intonav = normalize(intonav);\r
892                         // te_lightning1(self, self.origin, self.origin + intonav*200);\r
893                         if (navcurrent.link0)\r
894                         {\r
895                                 navcurrent.link0.effects = EF_NODEPTHTEST;\r
896                                 navcurrent.link0.frame = 0;\r
897                                 if (navcurrent.lflags0 & LF_REMOTE)\r
898                                         navcurrent.link0.frame = navcurrent.link0.frame + 21;\r
899                                 if (navcurrent.link1)\r
900                                 {\r
901                                         navcurrent.link1.effects = EF_NODEPTHTEST;\r
902                                         navcurrent.link1.frame = 1;\r
903                                         if (navcurrent.lflags1 & LF_REMOTE)\r
904                                                 navcurrent.link1.frame = navcurrent.link1.frame + 21;\r
905                                         if (navcurrent.link2)\r
906                                         {\r
907                                                 navcurrent.link2.effects = EF_NODEPTHTEST;\r
908                                                 navcurrent.link2.frame = 2;\r
909                                                 if (navcurrent.lflags2 & LF_REMOTE)\r
910                                                         navcurrent.link2.frame = navcurrent.link2.frame + 21;\r
911                                                 if (navcurrent.link3)\r
912                                                 {\r
913                                                         navcurrent.link3.effects = EF_NODEPTHTEST;\r
914                                                         navcurrent.link3.frame = 3;\r
915                                                         if (navcurrent.lflags3 & LF_REMOTE)\r
916                                                                 navcurrent.link3.frame = navcurrent.link3.frame + 21;\r
917                                                         if (navcurrent.link4)\r
918                                                         {\r
919                                                                 navcurrent.link4.effects = EF_NODEPTHTEST;\r
920                                                                 navcurrent.link4.frame = 4;\r
921                                                                 if (navcurrent.lflags4 & LF_REMOTE)\r
922                                                                         navcurrent.link4.frame = navcurrent.link4.frame + 21;\r
923                                                                 if (navcurrent.link5)\r
924                                                                 {\r
925                                                                         navcurrent.link5.effects = EF_NODEPTHTEST;\r
926                                                                         navcurrent.link5.frame = 5;\r
927                                                                         if (navcurrent.lflags5 & LF_REMOTE)\r
928                                                                                 navcurrent.link5.frame = navcurrent.link5.frame + 21;\r
929                                                                         if (navcurrent.link6)\r
930                                                                         {\r
931                                                                                 navcurrent.link6.effects = EF_NODEPTHTEST;\r
932                                                                                 navcurrent.link6.frame = 6;\r
933                                                                                 if (navcurrent.lflags6 & LF_REMOTE)\r
934                                                                                         navcurrent.link6.frame = navcurrent.link6.frame + 21;\r
935                                                                                 if (navcurrent.link7)\r
936                                                                                 {\r
937                                                                                         navcurrent.link7.effects = EF_NODEPTHTEST;\r
938                                                                                         navcurrent.link7.frame = 7;\r
939                                                                                         if (navcurrent.lflags7 & LF_REMOTE)\r
940                                                                                                 navcurrent.link7.frame = navcurrent.link7.frame + 21;\r
941                                                                                         if (navcurrent.link8)\r
942                                                                                         {\r
943                                                                                                 navcurrent.link8.effects = EF_NODEPTHTEST;\r
944                                                                                                 navcurrent.link8.frame = 8;\r
945                                                                                                 if (navcurrent.lflags8 & LF_REMOTE)\r
946                                                                                                         navcurrent.link8.frame = navcurrent.link8.frame + 21;\r
947                                                                                                 if (navcurrent.link9)\r
948                                                                                                 {\r
949                                                                                                         navcurrent.link9.effects = EF_NODEPTHTEST;\r
950                                                                                                         navcurrent.link9.frame = 9;\r
951                                                                                                         if (navcurrent.lflags9 & LF_REMOTE)\r
952                                                                                                                 navcurrent.link9.frame = navcurrent.link9.frame + 21;\r
953                                                                                                         if (navcurrent.link10)\r
954                                                                                                         {\r
955                                                                                                                 navcurrent.link10.effects = EF_NODEPTHTEST;\r
956                                                                                                                 navcurrent.link10.frame = 10;\r
957                                                                                                                 if (navcurrent.lflags10 & LF_REMOTE)\r
958                                                                                                                         navcurrent.link10.frame = navcurrent.link10.frame + 21;\r
959                                                                                                                 if (navcurrent.link11)\r
960                                                                                                                 {\r
961                                                                                                                         navcurrent.link11.effects = EF_NODEPTHTEST;\r
962                                                                                                                         navcurrent.link11.frame = 11;\r
963                                                                                                                         if (navcurrent.lflags11 & LF_REMOTE)\r
964                                                                                                                                 navcurrent.link11.frame = navcurrent.link11.frame + 21;\r
965                                                                                                                         if (navcurrent.link12)\r
966                                                                                                                         {\r
967                                                                                                                                 navcurrent.link12.effects = EF_NODEPTHTEST;\r
968                                                                                                                                 navcurrent.link12.frame = 12;\r
969                                                                                                                                 if (navcurrent.lflags12 & LF_REMOTE)\r
970                                                                                                                                         navcurrent.link12.frame = navcurrent.link12.frame + 21;\r
971                                                                                                                                 if (navcurrent.link13)\r
972                                                                                                                                 {\r
973                                                                                                                                         navcurrent.link13.effects = EF_NODEPTHTEST;\r
974                                                                                                                                         navcurrent.link13.frame = 13;\r
975                                                                                                                                         if (navcurrent.lflags13 & LF_REMOTE)\r
976                                                                                                                                                 navcurrent.link13.frame = navcurrent.link13.frame + 21;\r
977                                                                                                                                         if (navcurrent.link14)\r
978                                                                                                                                         {\r
979                                                                                                                                                 navcurrent.link14.effects = EF_NODEPTHTEST;\r
980                                                                                                                                                 navcurrent.link14.frame = 14;\r
981                                                                                                                                                 if (navcurrent.lflags14 & LF_REMOTE)\r
982                                                                                                                                                         navcurrent.link14.frame = navcurrent.link14.frame + 21;\r
983                                                                                                                                                 if (navcurrent.link15)\r
984                                                                                                                                                 {\r
985                                                                                                                                                         navcurrent.link15.effects = EF_NODEPTHTEST;\r
986                                                                                                                                                         navcurrent.link15.frame = 15;\r
987                                                                                                                                                         if (navcurrent.lflags15 & LF_REMOTE)\r
988                                                                                                                                                                 navcurrent.link15.frame = navcurrent.link15.frame + 21;\r
989                                                                                                                                                         if (navcurrent.link16)\r
990                                                                                                                                                         {\r
991                                                                                                                                                                 navcurrent.link16.effects = EF_NODEPTHTEST;\r
992                                                                                                                                                                 navcurrent.link16.frame = 16;\r
993                                                                                                                                                                 if (navcurrent.lflags16 & LF_REMOTE)\r
994                                                                                                                                                                         navcurrent.link16.frame = navcurrent.link16.frame + 21;\r
995                                                                                                                                                                 if (navcurrent.link17)\r
996                                                                                                                                                                 {\r
997                                                                                                                                                                         navcurrent.link17.effects = EF_NODEPTHTEST;\r
998                                                                                                                                                                         navcurrent.link17.frame = 17;\r
999                                                                                                                                                                         if (navcurrent.lflags17 & LF_REMOTE)\r
1000                                                                                                                                                                                 navcurrent.link17.frame = navcurrent.link17.frame + 21;\r
1001                                                                                                                                                                         if (navcurrent.link18)\r
1002                                                                                                                                                                         {\r
1003                                                                                                                                                                                 navcurrent.link18.effects = EF_NODEPTHTEST;\r
1004                                                                                                                                                                                 navcurrent.link18.frame = 18;\r
1005                                                                                                                                                                                 if (navcurrent.lflags18 & LF_REMOTE)\r
1006                                                                                                                                                                                         navcurrent.link18.frame = navcurrent.link18.frame + 21;\r
1007                                                                                                                                                                                 if (navcurrent.link19)\r
1008                                                                                                                                                                                 {\r
1009                                                                                                                                                                                         navcurrent.link19.effects = EF_NODEPTHTEST;\r
1010                                                                                                                                                                                         navcurrent.link19.frame = 19;\r
1011                                                                                                                                                                                         if (navcurrent.lflags19 & LF_REMOTE)\r
1012                                                                                                                                                                                                 navcurrent.link19.frame = navcurrent.link19.frame + 21;\r
1013                                                                                                                                                                                 }\r
1014                                                                                                                                                                         }\r
1015                                                                                                                                                                 }\r
1016                                                                                                                                                         }\r
1017                                                                                                                                                 }\r
1018                                                                                                                                         }\r
1019                                                                                                                                 }\r
1020                                                                                                                         }\r
1021                                                                                                                 }\r
1022                                                                                                         }\r
1023                                                                                                 }\r
1024                                                                                         }\r
1025                                                                                 }\r
1026                                                                         }\r
1027                                                                 }\r
1028                                                         }\r
1029                                                 }\r
1030                                         }\r
1031                                 }\r
1032                         }\r
1033                 }\r
1034         }       \r
1035 };\r
1036 \r
1037 void() PlayerPostThink =\r
1038 {\r
1039         MainMenu();\r
1040 \r
1041         if (self.impulse)\r
1042                 ImpulseCommands(self.impulse);\r
1043         self.impulse = 0;\r
1044 };\r
1045 \r
1046 void() NavOrgThink =\r
1047 {\r
1048         self.nextthink = time + 0.1;\r
1049 \r
1050         setorigin(self, self.owner.current_navnode.origin);\r
1051 };\r
1052 \r
1053 void() PutClientInServer =\r
1054 {\r
1055         local entity spawn_spot;\r
1056 \r
1057         spawn_spot = find (world, classname, "info_player_start");\r
1058         if (!spawn_spot)\r
1059                 spawn_spot = find (world, classname, "info_player_deathmatch");\r
1060 \r
1061         self.classname = "player";\r
1062         self.health = 100;\r
1063         self.solid = SOLID_SLIDEBOX;\r
1064         self.movetype = MOVETYPE_FLY;\r
1065         self.flags = FL_CLIENT;\r
1066         self.nextthink = time;\r
1067         self.think = SUB_Null;\r
1068 \r
1069         setorigin(self, spawn_spot.origin);\r
1070         self.angles = spawn_spot.angles;\r
1071         self.fixangle = TRUE;\r
1072 \r
1073         // setmodel (self, "progs/bbox.mdl");\r
1074         setmodel (self, "progs/null.spr");\r
1075         // setsize (self, '-16 -16 -28', '16 16 28');\r
1076         setsize (self, '0 0 0', '0 0 0');\r
1077         self.gridsize = 8;\r
1078 \r
1079         self.navorg1 = spawn();\r
1080         setmodel(self.navorg1, "progs/org.mdl");\r
1081         setsize(self.navorg1, '0 0 0', '0 0 0');\r
1082         self.navorg1.effects = EF_FULLBRIGHT;\r
1083         self.navorg1.owner = self;\r
1084         self.navorg1.think = NavOrgThink;\r
1085         self.navorg1.nextthink = time;\r
1086         self.navorg2 = spawn();\r
1087         setmodel(self.navorg2, "progs/org2.mdl");\r
1088         setsize(self.navorg2, '0 0 0', '0 0 0');\r
1089         self.navorg2.effects = EF_ADDITIVE | EF_FULLBRIGHT;\r
1090         self.navorg2.owner = self;\r
1091         self.navorg2.think = NavOrgThink;\r
1092         self.navorg2.nextthink = time;\r
1093 };\r
1094 \r
1095 void() SV_PlayerPhysics =\r
1096 {\r
1097         local   vector  wishvel, wishdir;\r
1098         local   float   wishspeed, f;\r
1099 \r
1100         if (self.movetype == MOVETYPE_NONE)\r
1101                 return;\r
1102 \r
1103         if (self.punchangle != '0 0 0')\r
1104                 self.punchangle = self.punchangle * (1 - frametime * 3);\r
1105 \r
1106         if (self.punchvector != '0 0 0')\r
1107                 self.punchvector = self.punchvector * (1 - frametime * 3);\r
1108 \r
1109         if (vlen(self.movement))\r
1110         {\r
1111                 makevectors(self.v_angle);\r
1112                 wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z;\r
1113                 wishdir = normalize(wishvel);\r
1114                 wishspeed = vlen(wishvel);\r
1115                 if (wishspeed > sv_maxspeed)\r
1116                         wishspeed = sv_maxspeed;\r
1117                 f = wishspeed - (self.velocity * wishdir);\r
1118                 if (f > 0)\r
1119                         self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed);\r
1120         }\r
1121         else\r
1122                 self.velocity = '0 0 0';\r
1123 };