6 self = spawnclient();
\r
9 bprint("Can not add UrreBot, server full\n");
\r
10 cvar_set("bots", ftos(actualurrebots));
\r
15 self.list = bot_chain;
\r
17 self.bottype = BOTTYPE_URREBOT;
\r
19 PutClientInServer();
\r
22 strategytoken = bot_chain;
\r
23 actualurrebots = actualurrebots + 1;
\r
26 void() UrreBotRemove =
\r
28 local entity ent, t;
\r
30 ent = findchain(classname, "player");
\r
33 if (clienttype(ent) == CLIENTTYPE_BOT)
\r
35 if (ent.bottype == BOTTYPE_URREBOT)
\r
37 if (bot_chain == self)
\r
38 bot_chain = self.list;
\r
41 t = find(world, classname, "player");
\r
46 t = find(t, classname, "player");
\r
49 if (actualurrebots > 0)
\r
50 actualurrebots -= 1;
\r
51 if(cvar("g_lms") && self.frags < 1)
\r
52 lms_dead_count -= 1;
\r
60 /* --- SpawnNavNode ---
\r
61 The one to guess what this does gets bacon from FrikaC*/
\r
63 entity(vector org, vector nnmins, vector nnmaxs) SpawnNavNode =
\r
66 setsize(newmis, nnmins, nnmaxs);
\r
67 newmis.classname = "navnode";
\r
68 setorigin(newmis, org);
\r
72 void(entity navn, vector normal, float dist) AddPlane =
\r
77 newmis.classname = "plane";
\r
78 newmis.list = navn.plane_chain;
\r
79 navn.plane_chain = newmis;
\r
80 newmis.mangle = normal*-1;
\r
81 newmis.delay = dist;
\r
82 f = (navn.origin * newmis.mangle) - ((navn.origin + (newmis.delay * newmis.mangle)) * newmis.mangle);
\r
85 newmis.mangle = newmis.mangle*-1;
\r
86 newmis.delay = newmis.delay*-1;
\r
90 /* --- LinkNavNodes ---
\r
91 Links the navnodes and gives some special attributes (like doors, teleporters)*/
\r
93 void() LinkNavNodes =
\r
95 local entity e, t, tdest;
\r
97 navnode_chain = world;
\r
100 e = findchain(classname, "navnode");
\r
103 e.list = navnode_chain;
\r
105 e.delay = navnodes;
\r
106 navnodes = navnodes + 1;
\r
115 e.link0.think = SUB_Remove;
\r
116 e.link0.nextthink = time;
\r
120 if (t.delay == e.link0.delay)
\r
124 e.lflags0 = e.lflags0 | LF_REMOTE;
\r
128 e.link1.think = SUB_Remove;
\r
129 e.link1.nextthink = time;
\r
133 if (t.delay == e.link1.delay)
\r
137 e.lflags1 = e.lflags1 | LF_REMOTE;
\r
141 e.link2.think = SUB_Remove;
\r
142 e.link2.nextthink = time;
\r
146 if (t.delay == e.link2.delay)
\r
150 e.lflags2 = e.lflags2 | LF_REMOTE;
\r
154 e.link3.think = SUB_Remove;
\r
155 e.link3.nextthink = time;
\r
159 if (t.delay == e.link3.delay)
\r
163 e.lflags3 = e.lflags3 | LF_REMOTE;
\r
167 e.link4.think = SUB_Remove;
\r
168 e.link4.nextthink = time;
\r
172 if (t.delay == e.link4.delay)
\r
176 e.lflags4 = e.lflags4 | LF_REMOTE;
\r
180 e.link5.think = SUB_Remove;
\r
181 e.link5.nextthink = time;
\r
185 if (t.delay == e.link5.delay)
\r
189 e.lflags5 = e.lflags5 | LF_REMOTE;
\r
193 e.link6.think = SUB_Remove;
\r
194 e.link6.nextthink = time;
\r
198 if (t.delay == e.link6.delay)
\r
202 e.lflags6 = e.lflags6 | LF_REMOTE;
\r
206 e.link7.think = SUB_Remove;
\r
207 e.link7.nextthink = time;
\r
211 if (t.delay == e.link7.delay)
\r
215 e.lflags7 = e.lflags7 | LF_REMOTE;
\r
219 e.link8.think = SUB_Remove;
\r
220 e.link8.nextthink = time;
\r
224 if (t.delay == e.link8.delay)
\r
228 e.lflags8 = e.lflags8 | LF_REMOTE;
\r
232 e.link9.think = SUB_Remove;
\r
233 e.link9.nextthink = time;
\r
237 if (t.delay == e.link9.delay)
\r
241 e.lflags9 = e.lflags9 | LF_REMOTE;
\r
245 e.link10.think = SUB_Remove;
\r
246 e.link10.nextthink = time;
\r
250 if (t.delay == e.link10.delay)
\r
254 e.lflags10 = e.lflags10 | LF_REMOTE;
\r
258 e.link11.think = SUB_Remove;
\r
259 e.link11.nextthink = time;
\r
263 if (t.delay == e.link11.delay)
\r
267 e.lflags11 = e.lflags11 | LF_REMOTE;
\r
271 e.link12.think = SUB_Remove;
\r
272 e.link12.nextthink = time;
\r
276 if (t.delay == e.link12.delay)
\r
280 e.lflags12 = e.lflags12 | LF_REMOTE;
\r
284 e.link13.think = SUB_Remove;
\r
285 e.link13.nextthink = time;
\r
289 if (t.delay == e.link13.delay)
\r
293 e.lflags13 = e.lflags13 | LF_REMOTE;
\r
297 e.link14.think = SUB_Remove;
\r
298 e.link14.nextthink = time;
\r
302 if (t.delay == e.link14.delay)
\r
306 e.lflags14 = e.lflags14 | LF_REMOTE;
\r
310 e.link15.think = SUB_Remove;
\r
311 e.link15.nextthink = time;
\r
315 if (t.delay == e.link15.delay)
\r
319 e.lflags15 = e.lflags15 | LF_REMOTE;
\r
323 e.link16.think = SUB_Remove;
\r
324 e.link16.nextthink = time;
\r
328 if (t.delay == e.link16.delay)
\r
332 e.lflags16 = e.lflags16 | LF_REMOTE;
\r
336 e.link17.think = SUB_Remove;
\r
337 e.link17.nextthink = time;
\r
341 if (t.delay == e.link17.delay)
\r
345 e.lflags17 = e.lflags17 | LF_REMOTE;
\r
349 e.link18.think = SUB_Remove;
\r
350 e.link18.nextthink = time;
\r
354 if (t.delay == e.link18.delay)
\r
358 e.lflags18 = e.lflags18 | LF_REMOTE;
\r
362 e.link19.think = SUB_Remove;
\r
363 e.link19.nextthink = time;
\r
367 if (t.delay == e.link19.delay)
\r
371 e.lflags19 = e.lflags19 | LF_REMOTE;
\r
378 if (!(e.sflags & S_TELEPORT))
\r
383 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))
\r
426 else if (!e.link10)
\r
428 else if (!e.link11)
\r
430 else if (!e.link12)
\r
432 else if (!e.link13)
\r
434 else if (!e.link14)
\r
436 else if (!e.link15)
\r
438 else if (!e.link16)
\r
440 else if (!e.link17)
\r
442 else if (!e.link18)
\r
444 else if (!e.link19)
\r
447 dprint("WARNING: Too many linking NavNodes!\n");
\r
457 if (e.sflags & S_TELEPORT)
\r
459 t = findchain(classname, "trigger_teleport");
\r
462 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
464 tdest = find(world, targetname, t.target);
\r
465 tdest = FindCurrentNavNode(tdest.origin, '0 0 0', '0 0 0');
\r
471 error("Expected navnode\n");
\r
473 else if (e.sflags & S_DOOR)
\r
475 t = findchain(classname, "door");
\r
478 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
483 error("Expected door\n");
\r
489 void() LoadNavNodes =
\r
491 local float f, file, length;
\r
494 local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;
\r
495 local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;
\r
497 local float rl0, rl1, rl2, rl3, rl4, rl5, rl6, rl7, rl8, rl9;
\r
498 local float rl10, rl11, rl12, rl13, rl14, rl15, rl16, rl17, rl18, rl19;
\r
500 local vector wborg, wbmaxs, wbmins;
\r
501 local entity e, plane_storage;
\r
505 dprint("NavNodes present, map needs to be reloaded to load navnode-file\n");
\r
509 plane_storage = spawn();
\r
511 length = strlen(world.model);
\r
512 length = length - 5;
\r
513 s = substring(world.model, 5, length);
\r
514 s = strcat("maps/", s, ".nnl");
\r
516 file = fopen(s, FILE_READ);
\r
520 dprint("Found navnode file\n");
\r
522 while (s == "navnode")
\r
527 wborg = wbmaxs = wbmins = nullvector;
\r
528 plane_storage.plane_chain = world;
\r
530 tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;
\r
531 tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;
\r
532 rl0 = rl1 = rl2 = rl3 = rl4 = rl5 = rl6 = rl7 = rl8 = rl9 = -1;
\r
533 rl10 = rl11 = rl12 = rl13 = rl14 = rl15 = rl16 = rl17 = rl18 = rl19 = -1;
\r
541 while (s == "plane")
\r
547 AddPlane(plane_storage, pln*-1, pdst);
\r
550 while (substring(s, 0, 6) == "remote")
\r
552 length = strlen(s);
\r
553 f = stof(substring(s, 6, length));
\r
603 while (substring(s, 0, 6) == "lflags")
\r
605 length = strlen(s);
\r
606 f = stof(substring(s, 6, length));
\r
650 e = SpawnNavNode(wborg, wbmins, wbmaxs);
\r
651 if (plane_storage.plane_chain)
\r
652 e.plane_chain = plane_storage.plane_chain;
\r
664 e.lflags10 = tfl10;
\r
665 e.lflags11 = tfl11;
\r
666 e.lflags12 = tfl12;
\r
667 e.lflags13 = tfl13;
\r
668 e.lflags14 = tfl14;
\r
669 e.lflags15 = tfl15;
\r
670 e.lflags16 = tfl16;
\r
671 e.lflags17 = tfl17;
\r
672 e.lflags18 = tfl18;
\r
673 e.lflags19 = tfl19;
\r
677 newmis.classname = "remotelinker";
\r
678 newmis.delay = rl0;
\r
684 newmis.classname = "remotelinker";
\r
685 newmis.delay = rl1;
\r
691 newmis.classname = "remotelinker";
\r
692 newmis.delay = rl2;
\r
698 newmis.classname = "remotelinker";
\r
699 newmis.delay = rl3;
\r
705 newmis.classname = "remotelinker";
\r
706 newmis.delay = rl4;
\r
712 newmis.classname = "remotelinker";
\r
713 newmis.delay = rl5;
\r
719 newmis.classname = "remotelinker";
\r
720 newmis.delay = rl6;
\r
726 newmis.classname = "remotelinker";
\r
727 newmis.delay = rl7;
\r
733 newmis.classname = "remotelinker";
\r
734 newmis.delay = rl8;
\r
740 newmis.classname = "remotelinker";
\r
741 newmis.delay = rl9;
\r
747 newmis.classname = "remotelinker";
\r
748 newmis.delay = rl10;
\r
754 newmis.classname = "remotelinker";
\r
755 newmis.delay = rl11;
\r
761 newmis.classname = "remotelinker";
\r
762 newmis.delay = rl12;
\r
768 newmis.classname = "remotelinker";
\r
769 newmis.delay = rl13;
\r
775 newmis.classname = "remotelinker";
\r
776 newmis.delay = rl14;
\r
782 newmis.classname = "remotelinker";
\r
783 newmis.delay = rl15;
\r
789 newmis.classname = "remotelinker";
\r
790 newmis.delay = rl16;
\r
796 newmis.classname = "remotelinker";
\r
797 newmis.delay = rl17;
\r
803 newmis.classname = "remotelinker";
\r
804 newmis.delay = rl18;
\r
810 newmis.classname = "remotelinker";
\r
811 newmis.delay = rl19;
\r
818 dprint("No navnode file found\n");
\r
819 remove(plane_storage);
\r
820 plane_storage = world;
\r
823 /* --- SpawnWayBox ---
\r
824 The one to guess what this does gets a cookie from Quest*/
\r
826 entity(vector org, vector wsize) SpawnWayBox =
\r
829 setsize(newmis, wsize*-1, wsize);
\r
830 newmis.classname = "waybox";
\r
831 setorigin(newmis, org);
\r
835 /* --- LinkWayBoxes ---
\r
836 Links wayboxes and gives some special attributes (like doors, teleporters)*/
\r
839 void() LinkWayBoxes =
\r
841 local entity e, t, tdest;
\r
846 e = findchain(classname, "waybox");
\r
849 e.list = box_chain;
\r
851 e.link0 = e.link1 = e.link2 = e.link3 = e.link4 = e.link5 = e.link6 = e.link7 = e.link8 = e.link9 = world;
\r
852 e.link10 = e.link11 = e.link12 = e.link13 = e.link14 = e.link15 = e.link16 = e.link17 = e.link18 = e.link19 = world;
\r
853 wayboxes = wayboxes + 1;
\r
860 if (!(e.sflags & S_TELEPORT))
\r
865 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))
\r
908 else if (!e.link10)
\r
910 else if (!e.link11)
\r
912 else if (!e.link12)
\r
914 else if (!e.link13)
\r
916 else if (!e.link14)
\r
918 else if (!e.link15)
\r
920 else if (!e.link16)
\r
922 else if (!e.link17)
\r
924 else if (!e.link18)
\r
926 else if (!e.link19)
\r
929 objerror("Too many touching wayboxes!\n");
\r
939 if (e.sflags & S_TELEPORT)
\r
941 t = findchain(classname, "trigger_teleport");
\r
944 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
946 tdest = find(world, targetname, t.target);
\r
947 tdest = FindCurrentWayBox(tdest.origin, '0 0 0', '0 0 0');
\r
953 else if (e.sflags & S_DOOR)
\r
955 t = findchain(classname, "door");
\r
958 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
963 error("Expected door\n");
\r
970 /* --- LoadWayBoxes ---
\r
971 Loads wayboxes from a file generated by the waybox-editor mod*/
\r
976 local float f, file, length;
\r
978 local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;
\r
979 local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;
\r
980 local string s, nname;
\r
981 local vector wborg, wbmaxs;
\r
986 dprint("NavEntities present, map needs to be reloaded to load navent-file\n");
\r
990 length = strlen(world.model);
\r
991 length = length - 5;
\r
992 s = substring(world.model, 5, length);
\r
993 s = strcat(s, ".nel");
\r
995 file = fopen(s, FILE_READ);
\r
1000 while (s == "navent")
\r
1004 tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;
\r
1005 tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;
\r
1007 if (s == "sflags")
\r
1013 while (substring(s, 0, 6) == "tflags")
\r
1015 f = stof(substring(s, 6, 7));
\r
1062 e = SpawnNavEnt(wborg, wbmaxs);
\r
1074 e.tflags10 = tfl10;
\r
1075 e.tflags11 = tfl11;
\r
1076 e.tflags12 = tfl12;
\r
1077 e.tflags13 = tfl13;
\r
1078 e.tflags14 = tfl14;
\r
1079 e.tflags15 = tfl15;
\r
1080 e.tflags16 = tfl16;
\r
1081 e.tflags17 = tfl17;
\r
1082 e.tflags18 = tfl18;
\r
1083 e.tflags19 = tfl19;
\r
1092 void() LoadWayBoxes =
\r
1094 local float f, file, length;
\r
1096 local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;
\r
1097 local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;
\r
1098 local string s, nname;
\r
1099 local vector wborg, wbmaxs;
\r
1104 dprint("Wayboxes present, map needs to be reloaded to load waybox-file\n");
\r
1108 length = strlen(world.model);
\r
1109 length = length - 5;
\r
1110 s = substring(world.model, 5, length);
\r
1111 s = strcat(s, ".wbl");
\r
1113 file = fopen(s, FILE_READ);
\r
1118 while (s == "waybox")
\r
1122 tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;
\r
1123 tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;
\r
1125 if (s == "sflags")
\r
1131 while (substring(s, 0, 6) == "tflags")
\r
1133 f = stof(substring(s, 6, 7));
\r
1180 e = SpawnWayBox(wborg, wbmaxs);
\r
1192 e.tflags10 = tfl10;
\r
1193 e.tflags11 = tfl11;
\r
1194 e.tflags12 = tfl12;
\r
1195 e.tflags13 = tfl13;
\r
1196 e.tflags14 = tfl14;
\r
1197 e.tflags15 = tfl15;
\r
1198 e.tflags16 = tfl16;
\r
1199 e.tflags17 = tfl17;
\r
1200 e.tflags18 = tfl18;
\r
1201 e.tflags19 = tfl19;
\r