1 void(string s) SV_ParseClientCommand =
\r
3 local float f, f2, args;
\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
574 local entity e, navcurrent, navother, delplane;
\r
576 if (self.selmode == M_OVERLAP)
\r
578 if (self.current_navnode)
\r
579 if (!self.lockselection)
\r
580 if (!boxesoverlap(self.origin, self.origin, self.current_navnode.origin + self.current_navnode.mins, self.current_navnode.origin + self.current_navnode.maxs))
\r
583 self.other_navnode = world;
\r
584 self.current_navnode = world;
\r
587 else if (self.selmode == M_CLOSEST)
\r
589 if (self.current_navnode)
\r
590 if (!self.lockselection)
\r
592 e = FindCurrentNavNode(world, self.origin, self.selmode);
\r
593 if (e != self.current_navnode)
\r
596 self.other_navnode = world;
\r
597 self.current_navnode = world;
\r
602 if (self.current_navnode)
\r
603 navcurrent = self.current_navnode;
\r
606 self.current_plane = world;
\r
607 navcurrent = self.current_navnode = FindCurrentNavNode(world, self.origin, self.selmode);
\r
610 navother = FindCurrentNavNode(world, self.origin, self.selmode);
\r
611 if (self.other_navnode)
\r
612 if (navother != self.other_navnode)
\r
614 if (self.other_navnode != self.current_navnode)
\r
615 self.other_navnode.colormod = '0 0 0';
\r
617 self.other_navnode = navother;
\r
621 if (!(self.buttonflag & B_FLAG0))
\r
625 if (self.button3 & !self.button4)
\r
627 makevectors(self.v_angle);
\r
628 traceline(self.origin, self.origin + v_forward*8192, TRUE, world);
\r
629 v = SnapToGrid(trace_endpos);
\r
630 if (self.axis == 0)
\r
631 ResizeNavNode(navcurrent, self.axis, v_x);
\r
632 else if (self.axis == 1)
\r
633 ResizeNavNode(navcurrent, self.axis, v_y);
\r
634 else if (self.axis == 2)
\r
635 ResizeNavNode(navcurrent, self.axis, v_z);
\r
637 else if (self.button4 & !self.button3)
\r
639 makevectors(self.v_angle);
\r
640 traceline(self.origin, self.origin + v_forward*8192, TRUE, world);
\r
641 if (self.current_clippoint)
\r
642 e = self.current_clippoint;
\r
645 v = SnapToGrid(trace_endpos);
\r
648 else if (self.button3 & self.button4)
\r
650 if (self.clippoint3)
\r
652 edge1=self.clippoint1.origin-self.clippoint2.origin;
\r
653 edge2=self.clippoint3.origin-self.clippoint2.origin;
\r
654 v_x=edge1_y*edge2_z-edge1_z*edge2_y;
\r
655 v_y=edge1_z*edge2_x-edge1_x*edge2_z;
\r
656 v_z=edge1_x*edge2_y-edge1_y*edge2_x;
\r
658 org = (((self.clippoint1.origin + self.clippoint2.origin)*0.5) + self.clippoint3.origin)*0.5;
\r
659 RemoveClippoints();
\r
663 makevectors(self.v_angle);
\r
664 traceline(self.origin, self.origin + v_forward*8192, TRUE, world);
\r
665 v = trace_plane_normal;
\r
666 org = trace_endpos;
\r
668 f = rint(v * (navcurrent.origin - org));
\r
670 e = navcurrent.plane_chain;
\r
673 if (e.mangle == v*-1)
\r
677 while (e != navcurrent.plane_chain)
\r
679 if (e.mangle == v*-1)
\r
687 RemovePlane(navcurrent, delplane);
\r
688 self.current_plane = world;
\r
691 AddPlane(navcurrent, v, f);
\r
695 makevectors (self.v_angle);
\r
697 traceline(self.origin, self.origin + v_forward*8192, TRUE, self);
\r
698 f = pointcontents(trace_endpos);
\r
699 if (f != CONTENT_SOLID || f != CONTENT_SKY)
\r
700 setorigin(self, trace_endpos + v*8);
\r
704 self.buttonflag = self.buttonflag | B_FLAG0;
\r
707 self.buttonflag = self.buttonflag - (self.buttonflag & B_FLAG0);
\r
711 if (!(self.buttonflag & B_FLAG2))
\r
715 if (self.button3 & !self.button4)
\r
717 v = SnapToGrid(self.origin);
\r
718 ResizeNavNode(navcurrent, 0, v_x);
\r
719 ResizeNavNode(navcurrent, 1, v_y);
\r
720 ResizeNavNode(navcurrent, 2, v_z);
\r
722 else if (self.button4 & !self.button3)
\r
724 if (self.current_clippoint)
\r
725 e = self.current_clippoint;
\r
728 v = SnapToGrid(self.origin);
\r
731 else if (self.button3 & self.button4)
\r
734 if (self.lockselection)
\r
736 v = SnapToGrid(self.origin);
\r
740 else if (!self.confirm)
\r
742 if (self.lockselection)
\r
744 RemoveClippoints();
\r
745 self.lockselection = FALSE;
\r
748 self.lockselection = TRUE;
\r
752 self.buttonflag = self.buttonflag | B_FLAG2;
\r
755 self.buttonflag = self.buttonflag - (self.buttonflag & B_FLAG2);
\r
757 if (time >= self.ltntime + 0.15)
\r
759 self.ltntime = time;
\r
762 navcurrent.scale = 0.2;
\r
763 if (!self.current_plane)
\r
764 self.current_plane = navcurrent.plane_chain;
\r
765 if (self.lockselection)
\r
767 if (self.clippoint1)
\r
769 if (!self.current_clippoint)
\r
770 self.current_clippoint = self.clippoint1;
\r
771 if (self.current_clippoint == self.clippoint1)
\r
773 self.clippoint1.colormod = '1 0 0';
\r
774 if (self.clippoint2)
\r
776 self.clippoint2.colormod = '0 0 0';
\r
777 if (self.clippoint3)
\r
778 self.clippoint3.colormod = '0 0 0';
\r
781 else if (self.current_clippoint == self.clippoint2)
\r
783 self.clippoint2.colormod = '1 0 0';
\r
784 if (self.clippoint1)
\r
786 self.clippoint1.colormod = '0 0 0';
\r
787 if (self.clippoint3)
\r
788 self.clippoint3.colormod = '0 0 0';
\r
791 else if (self.current_clippoint == self.clippoint3)
\r
793 self.clippoint3.colormod = '1 0 0';
\r
794 if (self.clippoint1)
\r
796 self.clippoint1.colormod = '0 0 0';
\r
797 if (self.clippoint2)
\r
798 self.clippoint2.colormod = '0 0 0';
\r
802 navcurrent.colormod = '0.25 0.25 1';
\r
803 BeamBox(BT_LIGHTNING, navcurrent.origin + navcurrent.mins, navcurrent.origin + navcurrent.maxs);
\r
804 e = navcurrent.plane_chain;
\r
807 if (self.current_plane == e)
\r
811 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
813 while (e != navcurrent.plane_chain)
\r
815 if (self.current_plane == e)
\r
819 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
823 if (navother != navcurrent)
\r
825 navother.colormod = '1 0 0';
\r
826 BeamBox(BT_BEAM, navother.origin + navother.mins, navother.origin + navother.maxs);
\r
831 navcurrent.colormod = '1 0 0';
\r
832 BeamBox(BT_BEAM, navcurrent.origin + navcurrent.mins, navcurrent.origin + navcurrent.maxs);
\r
833 e = navcurrent.plane_chain;
\r
836 if (self.current_plane == e)
\r
840 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
842 while (e != navcurrent.plane_chain)
\r
844 if (self.current_plane == e)
\r
848 e.effects = EF_NODEPTHTEST | EF_ADDITIVE | EF_FULLBRIGHT;
\r
853 e = navcurrent.plane_chain;
\r
856 if (e.mangle_x < 0)
\r
857 tvec_x = self.origin_x + self.mins_x;
\r
859 tvec_x = self.origin_x + self.maxs_x;
\r
860 if (e.mangle_y < 0)
\r
861 tvec_y = self.origin_y + self.mins_y;
\r
863 tvec_y = self.origin_y + self.maxs_y;
\r
864 if (e.mangle_z < 0)
\r
865 tvec_z = self.origin_z + self.mins_z;
\r
867 tvec_z = self.origin_z + self.maxs_z;
\r
868 f = (tvec * e.mangle) - ((navcurrent.origin + (e.delay * e.mangle)) * e.mangle);
\r
870 intonav = intonav + e.mangle*-1;
\r
872 while (e != navcurrent.plane_chain)
\r
874 if (e.mangle_x < 0)
\r
875 tvec_x = self.origin_x + self.mins_x;
\r
877 tvec_x = self.origin_x + self.maxs_x;
\r
878 if (e.mangle_y < 0)
\r
879 tvec_y = self.origin_y + self.mins_y;
\r
881 tvec_y = self.origin_y + self.maxs_y;
\r
882 if (e.mangle_z < 0)
\r
883 tvec_z = self.origin_z + self.mins_z;
\r
885 tvec_z = self.origin_z + self.maxs_z;
\r
886 f = (tvec * e.mangle) - ((navcurrent.origin + (e.delay * e.mangle)) * e.mangle);
\r
888 intonav = intonav + e.mangle*-1;
\r
892 intonav = normalize(intonav);
\r
893 // te_lightning1(self, self.origin, self.origin + intonav*200);
\r
894 if (navcurrent.link0)
\r
896 navcurrent.link0.effects = EF_NODEPTHTEST;
\r
897 navcurrent.link0.frame = 0;
\r
898 if (navcurrent.lflags0 & LF_REMOTE)
\r
899 navcurrent.link0.frame = navcurrent.link0.frame + 21;
\r
900 if (navcurrent.link1)
\r
902 navcurrent.link1.effects = EF_NODEPTHTEST;
\r
903 navcurrent.link1.frame = 1;
\r
904 if (navcurrent.lflags1 & LF_REMOTE)
\r
905 navcurrent.link1.frame = navcurrent.link1.frame + 21;
\r
906 if (navcurrent.link2)
\r
908 navcurrent.link2.effects = EF_NODEPTHTEST;
\r
909 navcurrent.link2.frame = 2;
\r
910 if (navcurrent.lflags2 & LF_REMOTE)
\r
911 navcurrent.link2.frame = navcurrent.link2.frame + 21;
\r
912 if (navcurrent.link3)
\r
914 navcurrent.link3.effects = EF_NODEPTHTEST;
\r
915 navcurrent.link3.frame = 3;
\r
916 if (navcurrent.lflags3 & LF_REMOTE)
\r
917 navcurrent.link3.frame = navcurrent.link3.frame + 21;
\r
918 if (navcurrent.link4)
\r
920 navcurrent.link4.effects = EF_NODEPTHTEST;
\r
921 navcurrent.link4.frame = 4;
\r
922 if (navcurrent.lflags4 & LF_REMOTE)
\r
923 navcurrent.link4.frame = navcurrent.link4.frame + 21;
\r
924 if (navcurrent.link5)
\r
926 navcurrent.link5.effects = EF_NODEPTHTEST;
\r
927 navcurrent.link5.frame = 5;
\r
928 if (navcurrent.lflags5 & LF_REMOTE)
\r
929 navcurrent.link5.frame = navcurrent.link5.frame + 21;
\r
930 if (navcurrent.link6)
\r
932 navcurrent.link6.effects = EF_NODEPTHTEST;
\r
933 navcurrent.link6.frame = 6;
\r
934 if (navcurrent.lflags6 & LF_REMOTE)
\r
935 navcurrent.link6.frame = navcurrent.link6.frame + 21;
\r
936 if (navcurrent.link7)
\r
938 navcurrent.link7.effects = EF_NODEPTHTEST;
\r
939 navcurrent.link7.frame = 7;
\r
940 if (navcurrent.lflags7 & LF_REMOTE)
\r
941 navcurrent.link7.frame = navcurrent.link7.frame + 21;
\r
942 if (navcurrent.link8)
\r
944 navcurrent.link8.effects = EF_NODEPTHTEST;
\r
945 navcurrent.link8.frame = 8;
\r
946 if (navcurrent.lflags8 & LF_REMOTE)
\r
947 navcurrent.link8.frame = navcurrent.link8.frame + 21;
\r
948 if (navcurrent.link9)
\r
950 navcurrent.link9.effects = EF_NODEPTHTEST;
\r
951 navcurrent.link9.frame = 9;
\r
952 if (navcurrent.lflags9 & LF_REMOTE)
\r
953 navcurrent.link9.frame = navcurrent.link9.frame + 21;
\r
954 if (navcurrent.link10)
\r
956 navcurrent.link10.effects = EF_NODEPTHTEST;
\r
957 navcurrent.link10.frame = 10;
\r
958 if (navcurrent.lflags10 & LF_REMOTE)
\r
959 navcurrent.link10.frame = navcurrent.link10.frame + 21;
\r
960 if (navcurrent.link11)
\r
962 navcurrent.link11.effects = EF_NODEPTHTEST;
\r
963 navcurrent.link11.frame = 11;
\r
964 if (navcurrent.lflags11 & LF_REMOTE)
\r
965 navcurrent.link11.frame = navcurrent.link11.frame + 21;
\r
966 if (navcurrent.link12)
\r
968 navcurrent.link12.effects = EF_NODEPTHTEST;
\r
969 navcurrent.link12.frame = 12;
\r
970 if (navcurrent.lflags12 & LF_REMOTE)
\r
971 navcurrent.link12.frame = navcurrent.link12.frame + 21;
\r
972 if (navcurrent.link13)
\r
974 navcurrent.link13.effects = EF_NODEPTHTEST;
\r
975 navcurrent.link13.frame = 13;
\r
976 if (navcurrent.lflags13 & LF_REMOTE)
\r
977 navcurrent.link13.frame = navcurrent.link13.frame + 21;
\r
978 if (navcurrent.link14)
\r
980 navcurrent.link14.effects = EF_NODEPTHTEST;
\r
981 navcurrent.link14.frame = 14;
\r
982 if (navcurrent.lflags14 & LF_REMOTE)
\r
983 navcurrent.link14.frame = navcurrent.link14.frame + 21;
\r
984 if (navcurrent.link15)
\r
986 navcurrent.link15.effects = EF_NODEPTHTEST;
\r
987 navcurrent.link15.frame = 15;
\r
988 if (navcurrent.lflags15 & LF_REMOTE)
\r
989 navcurrent.link15.frame = navcurrent.link15.frame + 21;
\r
990 if (navcurrent.link16)
\r
992 navcurrent.link16.effects = EF_NODEPTHTEST;
\r
993 navcurrent.link16.frame = 16;
\r
994 if (navcurrent.lflags16 & LF_REMOTE)
\r
995 navcurrent.link16.frame = navcurrent.link16.frame + 21;
\r
996 if (navcurrent.link17)
\r
998 navcurrent.link17.effects = EF_NODEPTHTEST;
\r
999 navcurrent.link17.frame = 17;
\r
1000 if (navcurrent.lflags17 & LF_REMOTE)
\r
1001 navcurrent.link17.frame = navcurrent.link17.frame + 21;
\r
1002 if (navcurrent.link18)
\r
1004 navcurrent.link18.effects = EF_NODEPTHTEST;
\r
1005 navcurrent.link18.frame = 18;
\r
1006 if (navcurrent.lflags18 & LF_REMOTE)
\r
1007 navcurrent.link18.frame = navcurrent.link18.frame + 21;
\r
1008 if (navcurrent.link19)
\r
1010 navcurrent.link19.effects = EF_NODEPTHTEST;
\r
1011 navcurrent.link19.frame = 19;
\r
1012 if (navcurrent.lflags19 & LF_REMOTE)
\r
1013 navcurrent.link19.frame = navcurrent.link19.frame + 21;
\r
1038 void() PlayerPostThink =
\r
1043 ImpulseCommands(self.impulse);
\r
1047 void() NavOrgThink =
\r
1049 self.nextthink = time + 0.1;
\r
1051 setorigin(self, self.owner.current_navnode.origin);
\r
1054 void() PutClientInServer =
\r
1056 local entity spawn_spot;
\r
1058 spawn_spot = find (world, classname, "info_player_start");
\r
1060 spawn_spot = find (world, classname, "info_player_deathmatch");
\r
1062 self.classname = "player";
\r
1063 self.health = 100;
\r
1064 self.solid = SOLID_SLIDEBOX;
\r
1065 self.movetype = MOVETYPE_FLY;
\r
1066 self.flags = FL_CLIENT;
\r
1067 self.nextthink = time;
\r
1068 self.think = SUB_Null;
\r
1070 setorigin(self, spawn_spot.origin);
\r
1071 self.angles = spawn_spot.angles;
\r
1072 self.fixangle = TRUE;
\r
1074 // setmodel (self, "progs/bbox.mdl");
\r
1075 setmodel (self, "progs/null.spr");
\r
1076 // setsize (self, '-16 -16 -28', '16 16 28');
\r
1077 setsize (self, '0 0 0', '0 0 0');
\r
1078 self.gridsize = 8;
\r
1080 self.navorg1 = spawn();
\r
1081 setmodel(self.navorg1, "progs/org.mdl");
\r
1082 setsize(self.navorg1, '0 0 0', '0 0 0');
\r
1083 self.navorg1.effects = EF_FULLBRIGHT;
\r
1084 self.navorg1.owner = self;
\r
1085 self.navorg1.think = NavOrgThink;
\r
1086 self.navorg1.nextthink = time;
\r
1087 self.navorg2 = spawn();
\r
1088 setmodel(self.navorg2, "progs/org2.mdl");
\r
1089 setsize(self.navorg2, '0 0 0', '0 0 0');
\r
1090 self.navorg2.effects = EF_ADDITIVE | EF_FULLBRIGHT;
\r
1091 self.navorg2.owner = self;
\r
1092 self.navorg2.think = NavOrgThink;
\r
1093 self.navorg2.nextthink = time;
\r
1096 void() SV_PlayerPhysics =
\r
1098 local vector wishvel, wishdir;
\r
1099 local float wishspeed, f;
\r
1101 if (self.movetype == MOVETYPE_NONE)
\r
1104 if (self.punchangle != '0 0 0')
\r
1105 self.punchangle = self.punchangle * (1 - frametime * 3);
\r
1107 if (self.punchvector != '0 0 0')
\r
1108 self.punchvector = self.punchvector * (1 - frametime * 3);
\r
1110 if (vlen(self.movement))
\r
1112 makevectors(self.v_angle);
\r
1113 wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z;
\r
1114 wishdir = normalize(wishvel);
\r
1115 wishspeed = vlen(wishvel);
\r
1116 if (wishspeed > sv_maxspeed)
\r
1117 wishspeed = sv_maxspeed;
\r
1118 f = wishspeed - (self.velocity * wishdir);
\r
1120 self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed);
\r
1123 self.velocity = '0 0 0';
\r