1 void(string s) SV_ParseClientCommand =
\r
6 local entity navcurrent, navother;
\r
15 navcurrent = self.current_navnode;
\r
16 navother = self.other_navnode;
\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
27 setorigin(navcurrent, v);
\r
30 sprint(self, "No selection\n");
\r
32 else if (c == "resize")
\r
34 if (!ResizeNavNode(navcurrent, self.axis, stof(argv(2))))
\r
35 sprint(self, "No selection\n");
\r
37 else if (c == "save")
\r
42 else if (c == "load")
\r
44 else if (c == "teleport")
\r
48 if (navcurrent.sflags & S_TELEPORT)
\r
49 navcurrent.sflags = navcurrent.sflags - (navcurrent.sflags & S_TELEPORT);
\r
51 navcurrent.sflags = navcurrent.sflags | S_TELEPORT;
\r
54 sprint(self, "No selection\n");
\r
56 else if (c == "door")
\r
60 if (navcurrent.sflags & S_DOOR)
\r
61 navcurrent.sflags = navcurrent.sflags - (navcurrent.sflags & S_DOOR);
\r
63 navcurrent.sflags = navcurrent.sflags | S_DOOR;
\r
66 sprint(self, "No selection\n");
\r
68 else if (c == "touch")
\r
72 if (navcurrent.sflags & S_TOUCH)
\r
73 navcurrent.sflags = navcurrent.sflags - (navcurrent.sflags & S_TOUCH);
\r
75 navcurrent.sflags = navcurrent.sflags | S_TOUCH;
\r
78 sprint(self, "No selection\n");
\r
80 else if (c == "nolink")
\r
84 LFlagChange(navcurrent, f, LF_NOLINK);
\r
86 else if (c == "nowalk")
\r
90 LFlagChange(navcurrent, f, LF_NOWALK);
\r
92 else if (c == "bad")
\r
96 LFlagChange(navcurrent, f, LF_BAD);
\r
98 else if (c == "bigdrop")
\r
102 LFlagChange(navcurrent, f, LF_BIGDROP);
\r
104 else if (c == "remote")
\r
105 RemoteLinkHandling(navcurrent, navother);
\r
107 clientcommand(self, s);
\r
110 clientcommand(self, s);
\r
117 if (self.other_navnode)
\r
118 self.other_navnode.colormod = '0 0 0';
\r
120 if (self.current_navnode)
\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
127 e.effects = EF_NODRAW;
\r
129 while (e != self.current_navnode.plane_chain)
\r
131 e.effects = EF_NODRAW;
\r
135 if (self.current_navnode.link0)
\r
137 self.current_navnode.link0.effects = 0;
\r
138 self.current_navnode.link0.frame = 20;
\r
139 if (self.current_navnode.link1)
\r
141 self.current_navnode.link1.effects = 0;
\r
142 self.current_navnode.link1.frame = 20;
\r
143 if (self.current_navnode.link2)
\r
145 self.current_navnode.link2.effects = 0;
\r
146 self.current_navnode.link2.frame = 20;
\r
147 if (self.current_navnode.link3)
\r
149 self.current_navnode.link3.effects = 0;
\r
150 self.current_navnode.link3.frame = 20;
\r
151 if (self.current_navnode.link4)
\r
153 self.current_navnode.link4.effects = 0;
\r
154 self.current_navnode.link4.frame = 20;
\r
155 if (self.current_navnode.link5)
\r
157 self.current_navnode.link5.effects = 0;
\r
158 self.current_navnode.link5.frame = 20;
\r
159 if (self.current_navnode.link6)
\r
161 self.current_navnode.link6.effects = 0;
\r
162 self.current_navnode.link6.frame = 20;
\r
163 if (self.current_navnode.link7)
\r
165 self.current_navnode.link7.effects = 0;
\r
166 self.current_navnode.link7.frame = 20;
\r
167 if (self.current_navnode.link8)
\r
169 self.current_navnode.link8.effects = 0;
\r
170 self.current_navnode.link8.frame = 20;
\r
171 if (self.current_navnode.link9)
\r
173 self.current_navnode.link9.effects = 0;
\r
174 self.current_navnode.link9.frame = 20;
\r
175 if (self.current_navnode.link10)
\r
177 self.current_navnode.link10.effects = 0;
\r
178 self.current_navnode.link10.frame = 20;
\r
179 if (self.current_navnode.link11)
\r
181 self.current_navnode.link11.effects = 0;
\r
182 self.current_navnode.link11.frame = 20;
\r
183 if (self.current_navnode.link12)
\r
185 self.current_navnode.link12.effects = 0;
\r
186 self.current_navnode.link12.frame = 20;
\r
187 if (self.current_navnode.link13)
\r
189 self.current_navnode.link13.effects = 0;
\r
190 self.current_navnode.link13.frame = 20;
\r
191 if (self.current_navnode.link14)
\r
193 self.current_navnode.link14.effects = 0;
\r
194 self.current_navnode.link14.frame = 20;
\r
195 if (self.current_navnode.link15)
\r
197 self.current_navnode.link15.effects = 0;
\r
198 self.current_navnode.link15.frame = 20;
\r
199 if (self.current_navnode.link16)
\r
201 self.current_navnode.link16.effects = 0;
\r
202 self.current_navnode.link16.frame = 20;
\r
203 if (self.current_navnode.link17)
\r
205 self.current_navnode.link17.effects = 0;
\r
206 self.current_navnode.link17.frame = 20;
\r
207 if (self.current_navnode.link18)
\r
209 self.current_navnode.link18.effects = 0;
\r
210 self.current_navnode.link18.frame = 20;
\r
211 if (self.current_navnode.link19)
\r
213 self.current_navnode.link19.effects = 0;
\r
214 self.current_navnode.link19.frame = 20;
\r
238 void() SwitchNavNode =
\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
246 void(float match) SwitchAxis =
\r
250 self.axis = self.axis + 1;
\r
254 else if (match == 0)
\r
256 else if (match == 1)
\r
258 else if (match == 2)
\r
262 void(float i) ImpulseCommands =
\r
268 if (self.confirm && i >= 1 && i <= 9)
\r
275 if (self.button3 & !self.button4)
\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
286 else if (self.button4 & !self.button3)
\r
288 if (self.current_clippoint)
\r
290 e = self.current_clippoint;
\r
291 v = self.current_clippoint.origin;
\r
295 e = self.current_navnode;
\r
296 v = self.current_navnode.origin;
\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
306 else if (self.button3 & self.button4)
\r
308 if (self.current_clippoint)
\r
310 if (self.current_clippoint == self.clippoint1)
\r
312 if (self.clippoint2)
\r
313 self.current_clippoint = self.clippoint2;
\r
315 self.current_clippoint = self.clippoint1;
\r
317 else if (self.current_clippoint == self.clippoint2)
\r
319 if (self.clippoint3)
\r
320 self.current_clippoint = self.clippoint3;
\r
322 self.current_clippoint = self.clippoint1;
\r
324 else if (self.current_clippoint == self.clippoint3)
\r
325 self.current_clippoint = self.clippoint1;
\r
328 self.current_plane = self.current_plane.plane_next;
\r
331 self.gridsize = self.gridsize * 2;
\r
335 if (self.button3 & !self.button4)
\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
346 else if (self.button4 & !self.button3)
\r
348 if (self.current_clippoint)
\r
350 e = self.current_clippoint;
\r
351 v = self.current_clippoint.origin;
\r
355 e = self.current_navnode;
\r
356 v = self.current_navnode.origin;
\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
366 else if (self.button3 & self.button4)
\r
368 if (self.current_clippoint)
\r
370 if (self.current_clippoint == self.clippoint1)
\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
377 self.current_clippoint = self.clippoint1;
\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
385 self.current_plane = self.current_plane.plane_prev;
\r
389 self.gridsize = self.gridsize * 0.5;
\r
390 if (self.gridsize < 1)
\r
394 else if (i == 110) // Spawns new navnode
\r
396 if (!self.lockselection)
\r
398 v = SnapToGrid(self.origin);
\r
399 e = SpawnNavNode(v, '-32 -32 -32', '32 32 32');
\r
404 self.current_navnode = e;
\r
405 self.other_navnode = e;
\r
406 self.lockselection = TRUE;
\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
413 if (self.current_navnode)
\r
415 self.confirm = C_DELETE_NAVNODE;
\r
416 self.lockselection = TRUE;
\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
421 if (self.current_plane)
\r
423 self.confirm = C_DELETE_PLANE;
\r
424 self.lockselection = TRUE;
\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
431 if (!self.lockselection)
\r
432 if (self.selmode == M_OVERLAP)
\r
435 else if (i == 121) // Switches selection mode
\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
442 else if (i == 122) // Cycles through axis
\r
444 else if (i == 123) // Switches to X axis
\r
446 else if (i == 124) // Switches to Y axis
\r
448 else if (i == 125) // Switches to Z axis
\r
452 void() ClientKill = {};
\r
454 void() ClientConnect =
\r
456 bprint (self.netname);
\r
457 bprint (" has connected\n");
\r
460 void() ClientDisconnect =
\r
462 bprint (self.netname);
\r
463 bprint (" has disconnected\n");
\r
466 float BT_LIGHTNING = 0;
\r
469 void(float beamtype, vector bmins, vector bmaxs) BeamBox =
\r
471 local vector v1, v2;
\r
476 if (beamtype == BT_LIGHTNING)
\r
477 te_lightning1(world, v1, v2);
\r
479 te_beam(world, v1, v2);
\r
483 if (beamtype == BT_LIGHTNING)
\r
484 te_lightning1(world, v1, v2);
\r
486 te_beam(world, v1, v2);
\r
490 if (beamtype == BT_LIGHTNING)
\r
491 te_lightning1(world, v1, v2);
\r
493 te_beam(world, v1, v2);
\r
497 if (beamtype == BT_LIGHTNING)
\r
498 te_lightning1(world, v1, v2);
\r
500 te_beam(world, v1, v2);
\r
504 if (beamtype == BT_LIGHTNING)
\r
505 te_lightning1(world, v1, v2);
\r
507 te_beam(world, v1, v2);
\r
511 if (beamtype == BT_LIGHTNING)
\r
512 te_lightning1(world, v1, v2);
\r
514 te_beam(world, v1, v2);
\r
520 if (beamtype == BT_LIGHTNING)
\r
521 te_lightning1(world, v1, v2);
\r
523 te_beam(world, v1, v2);
\r
529 if (beamtype == BT_LIGHTNING)
\r
530 te_lightning1(world, v1, v2);
\r
532 te_beam(world, v1, v2);
\r
538 if (beamtype == BT_LIGHTNING)
\r
539 te_lightning1(world, v1, v2);
\r
541 te_beam(world, v1, v2);
\r
547 if (beamtype == BT_LIGHTNING)
\r
548 te_lightning1(world, v1, v2);
\r
550 te_beam(world, v1, v2);
\r
555 if (beamtype == BT_LIGHTNING)
\r
556 te_lightning1(world, v1, v2);
\r
558 te_beam(world, v1, v2);
\r
563 if (beamtype == BT_LIGHTNING)
\r
564 te_lightning1(world, v1, v2);
\r
566 te_beam(world, v1, v2);
\r
569 void() PlayerPreThink =
\r
572 local vector v, edge1, edge2, org, tvec, intonav; // FIXME
\r
573 local entity e, navcurrent, navother, delplane;
\r
575 if (self.selmode == M_OVERLAP)
\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
582 self.other_navnode = world;
\r
583 self.current_navnode = world;
\r
586 else if (self.selmode == M_CLOSEST)
\r
588 if (self.current_navnode)
\r
589 if (!self.lockselection)
\r
591 e = FindCurrentNavNode(world, self.origin, self.selmode);
\r
592 if (e != self.current_navnode)
\r
595 self.other_navnode = world;
\r
596 self.current_navnode = world;
\r
601 if (self.current_navnode)
\r
602 navcurrent = self.current_navnode;
\r
605 self.current_plane = world;
\r
606 navcurrent = self.current_navnode = FindCurrentNavNode(world, self.origin, self.selmode);
\r
609 navother = FindCurrentNavNode(world, self.origin, self.selmode);
\r
610 if (self.other_navnode)
\r
611 if (navother != self.other_navnode)
\r
613 if (self.other_navnode != self.current_navnode)
\r
614 self.other_navnode.colormod = '0 0 0';
\r
616 self.other_navnode = navother;
\r
620 if (!(self.buttonflag & B_FLAG0))
\r
624 if (self.button3 & !self.button4)
\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
636 else if (self.button4 & !self.button3)
\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
644 v = SnapToGrid(trace_endpos);
\r
647 else if (self.button3 & self.button4)
\r
649 if (self.clippoint3)
\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
657 org = (((self.clippoint1.origin + self.clippoint2.origin)*0.5) + self.clippoint3.origin)*0.5;
\r
658 RemoveClippoints();
\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
667 f = rint(v * (navcurrent.origin - org));
\r
669 e = navcurrent.plane_chain;
\r
672 if (e.mangle == v*-1)
\r
676 while (e != navcurrent.plane_chain)
\r
678 if (e.mangle == v*-1)
\r
686 RemovePlane(navcurrent, delplane);
\r
687 self.current_plane = world;
\r
690 AddPlane(navcurrent, v, f);
\r
694 makevectors (self.v_angle);
\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
703 self.buttonflag = self.buttonflag | B_FLAG0;
\r
706 self.buttonflag = self.buttonflag - (self.buttonflag & B_FLAG0);
\r
710 if (!(self.buttonflag & B_FLAG2))
\r
714 if (self.button3 & !self.button4)
\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
721 else if (self.button4 & !self.button3)
\r
723 if (self.current_clippoint)
\r
724 e = self.current_clippoint;
\r
727 v = SnapToGrid(self.origin);
\r
730 else if (self.button3 & self.button4)
\r
733 if (self.lockselection)
\r
735 v = SnapToGrid(self.origin);
\r
739 else if (!self.confirm)
\r
741 if (self.lockselection)
\r
743 RemoveClippoints();
\r
744 self.lockselection = FALSE;
\r
747 self.lockselection = TRUE;
\r
751 self.buttonflag = self.buttonflag | B_FLAG2;
\r
754 self.buttonflag = self.buttonflag - (self.buttonflag & B_FLAG2);
\r
756 if (time >= self.ltntime + 0.15)
\r
758 self.ltntime = time;
\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
766 if (self.clippoint1)
\r
768 if (!self.current_clippoint)
\r
769 self.current_clippoint = self.clippoint1;
\r
770 if (self.current_clippoint == self.clippoint1)
\r
772 self.clippoint1.colormod = '1 0 0';
\r
773 if (self.clippoint2)
\r
775 self.clippoint2.colormod = '0 0 0';
\r
776 if (self.clippoint3)
\r
777 self.clippoint3.colormod = '0 0 0';
\r
780 else if (self.current_clippoint == self.clippoint2)
\r
782 self.clippoint2.colormod = '1 0 0';
\r
783 if (self.clippoint1)
\r
785 self.clippoint1.colormod = '0 0 0';
\r
786 if (self.clippoint3)
\r
787 self.clippoint3.colormod = '0 0 0';
\r
790 else if (self.current_clippoint == self.clippoint3)
\r
792 self.clippoint3.colormod = '1 0 0';
\r
793 if (self.clippoint1)
\r
795 self.clippoint1.colormod = '0 0 0';
\r
796 if (self.clippoint2)
\r
797 self.clippoint2.colormod = '0 0 0';
\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
806 if (self.current_plane == e)
\r
810 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
812 while (e != navcurrent.plane_chain)
\r
814 if (self.current_plane == e)
\r
818 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
822 if (navother != navcurrent)
\r
824 navother.colormod = '1 0 0';
\r
825 BeamBox(BT_BEAM, navother.origin + navother.mins, navother.origin + navother.maxs);
\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
835 if (self.current_plane == e)
\r
839 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
841 while (e != navcurrent.plane_chain)
\r
843 if (self.current_plane == e)
\r
847 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
852 e = navcurrent.plane_chain;
\r
855 if (e.mangle_x < 0)
\r
856 tvec_x = self.origin_x + self.mins_x;
\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
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
866 tvec_z = self.origin_z + self.maxs_z;
\r
867 f = (tvec * e.mangle) - ((navcurrent.origin + (e.delay * e.mangle)) * e.mangle);
\r
869 intonav = intonav + e.mangle*-1;
\r
871 while (e != navcurrent.plane_chain)
\r
873 if (e.mangle_x < 0)
\r
874 tvec_x = self.origin_x + self.mins_x;
\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
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
884 tvec_z = self.origin_z + self.maxs_z;
\r
885 f = (tvec * e.mangle) - ((navcurrent.origin + (e.delay * e.mangle)) * e.mangle);
\r
887 intonav = intonav + e.mangle*-1;
\r
891 intonav = normalize(intonav);
\r
892 // te_lightning1(self, self.origin, self.origin + intonav*200);
\r
893 if (navcurrent.link0)
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1037 void() PlayerPostThink =
\r
1042 ImpulseCommands(self.impulse);
\r
1046 void() NavOrgThink =
\r
1048 self.nextthink = time + 0.1;
\r
1050 setorigin(self, self.owner.current_navnode.origin);
\r
1053 void() PutClientInServer =
\r
1055 local entity spawn_spot;
\r
1057 spawn_spot = find (world, classname, "info_player_start");
\r
1059 spawn_spot = find (world, classname, "info_player_deathmatch");
\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
1069 setorigin(self, spawn_spot.origin);
\r
1070 self.angles = spawn_spot.angles;
\r
1071 self.fixangle = TRUE;
\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
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
1095 void() SV_PlayerPhysics =
\r
1097 local vector wishvel, wishdir;
\r
1098 local float wishspeed, f;
\r
1100 if (self.movetype == MOVETYPE_NONE)
\r
1103 if (self.punchangle != '0 0 0')
\r
1104 self.punchangle = self.punchangle * (1 - frametime * 3);
\r
1106 if (self.punchvector != '0 0 0')
\r
1107 self.punchvector = self.punchvector * (1 - frametime * 3);
\r
1109 if (vlen(self.movement))
\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
1119 self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed);
\r
1122 self.velocity = '0 0 0';
\r