1 /* --- UrreBotAdd ---
\r
2 Adds an UrreBot to the server*/
\r
9 self = spawnclient();
\r
12 bprint("Can not add UrreBot, server full\n");
\r
13 cvar_set("bots", ftos(actualurrebots));
\r
18 self.list = bot_chain;
\r
20 self.bottype = BOTTYPE_URREBOT;
\r
22 PutClientInServer();
\r
25 strategytoken = bot_chain;
\r
26 actualurrebots = actualurrebots + 1;
\r
29 /* --- UrreBotRemove ---
\r
30 removes an UrreBot from the server*/
\r
32 void() UrreBotRemove =
\r
34 local entity ent, t;
\r
36 ent = findchain(classname, "player");
\r
39 if (clienttype(ent) == CLIENTTYPE_BOT)
\r
41 if (ent.bottype == BOTTYPE_URREBOT)
\r
43 if (bot_chain == self)
\r
44 bot_chain = self.list;
\r
47 t = find(world, classname, "player");
\r
52 t = find(t, classname, "player");
\r
55 if (actualurrebots > 0)
\r
56 actualurrebots -= 1;
\r
57 if(cvar("g_lms") && self.frags < 1)
\r
58 lms_dead_count -= 1;
\r
66 /* --- SpawnNavNode ---
\r
67 The one to guess what this does gets free bacon from FrikaC*/
\r
69 entity(vector org, vector nnmins, vector nnmaxs) SpawnNavNode =
\r
72 setsize(newmis, nnmins, nnmaxs);
\r
73 newmis.classname = "navnode";
\r
74 setorigin(newmis, org);
\r
79 Adds a plane to the plane list of a navnode*/
\r
81 void(entity navn, vector normal, float dist) AddPlane =
\r
86 newmis.classname = "plane";
\r
87 newmis.list = navn.plane_chain;
\r
88 navn.plane_chain = newmis;
\r
89 newmis.mangle = normal*-1;
\r
90 newmis.delay = dist;
\r
91 f = (navn.origin * newmis.mangle) - ((navn.origin + (newmis.delay * newmis.mangle)) * newmis.mangle);
\r
94 newmis.mangle = newmis.mangle*-1;
\r
95 newmis.delay = newmis.delay*-1;
\r
99 /* --- LinkNavNodes ---
\r
100 Links the navnodes and gives some special attributes (like doors, teleporters)*/
\r
102 void() LinkNavNodes =
\r
104 local entity e, t, tdest;
\r
106 navnode_chain = world;
\r
109 e = findchain(classname, "navnode");
\r
112 e.list = navnode_chain;
\r
114 e.delay = navnodes;
\r
115 navnodes = navnodes + 1;
\r
124 e.link0.think = SUB_Remove;
\r
125 e.link0.nextthink = time;
\r
129 if (t.delay == e.link0.delay)
\r
133 e.lflags0 = e.lflags0 | LF_REMOTE;
\r
137 e.link1.think = SUB_Remove;
\r
138 e.link1.nextthink = time;
\r
142 if (t.delay == e.link1.delay)
\r
146 e.lflags1 = e.lflags1 | LF_REMOTE;
\r
150 e.link2.think = SUB_Remove;
\r
151 e.link2.nextthink = time;
\r
155 if (t.delay == e.link2.delay)
\r
159 e.lflags2 = e.lflags2 | LF_REMOTE;
\r
163 e.link3.think = SUB_Remove;
\r
164 e.link3.nextthink = time;
\r
168 if (t.delay == e.link3.delay)
\r
172 e.lflags3 = e.lflags3 | LF_REMOTE;
\r
176 e.link4.think = SUB_Remove;
\r
177 e.link4.nextthink = time;
\r
181 if (t.delay == e.link4.delay)
\r
185 e.lflags4 = e.lflags4 | LF_REMOTE;
\r
189 e.link5.think = SUB_Remove;
\r
190 e.link5.nextthink = time;
\r
194 if (t.delay == e.link5.delay)
\r
198 e.lflags5 = e.lflags5 | LF_REMOTE;
\r
202 e.link6.think = SUB_Remove;
\r
203 e.link6.nextthink = time;
\r
207 if (t.delay == e.link6.delay)
\r
211 e.lflags6 = e.lflags6 | LF_REMOTE;
\r
215 e.link7.think = SUB_Remove;
\r
216 e.link7.nextthink = time;
\r
220 if (t.delay == e.link7.delay)
\r
224 e.lflags7 = e.lflags7 | LF_REMOTE;
\r
228 e.link8.think = SUB_Remove;
\r
229 e.link8.nextthink = time;
\r
233 if (t.delay == e.link8.delay)
\r
237 e.lflags8 = e.lflags8 | LF_REMOTE;
\r
241 e.link9.think = SUB_Remove;
\r
242 e.link9.nextthink = time;
\r
246 if (t.delay == e.link9.delay)
\r
250 e.lflags9 = e.lflags9 | LF_REMOTE;
\r
254 e.link10.think = SUB_Remove;
\r
255 e.link10.nextthink = time;
\r
259 if (t.delay == e.link10.delay)
\r
263 e.lflags10 = e.lflags10 | LF_REMOTE;
\r
267 e.link11.think = SUB_Remove;
\r
268 e.link11.nextthink = time;
\r
272 if (t.delay == e.link11.delay)
\r
276 e.lflags11 = e.lflags11 | LF_REMOTE;
\r
280 e.link12.think = SUB_Remove;
\r
281 e.link12.nextthink = time;
\r
285 if (t.delay == e.link12.delay)
\r
289 e.lflags12 = e.lflags12 | LF_REMOTE;
\r
293 e.link13.think = SUB_Remove;
\r
294 e.link13.nextthink = time;
\r
298 if (t.delay == e.link13.delay)
\r
302 e.lflags13 = e.lflags13 | LF_REMOTE;
\r
306 e.link14.think = SUB_Remove;
\r
307 e.link14.nextthink = time;
\r
311 if (t.delay == e.link14.delay)
\r
315 e.lflags14 = e.lflags14 | LF_REMOTE;
\r
319 e.link15.think = SUB_Remove;
\r
320 e.link15.nextthink = time;
\r
324 if (t.delay == e.link15.delay)
\r
328 e.lflags15 = e.lflags15 | LF_REMOTE;
\r
332 e.link16.think = SUB_Remove;
\r
333 e.link16.nextthink = time;
\r
337 if (t.delay == e.link16.delay)
\r
341 e.lflags16 = e.lflags16 | LF_REMOTE;
\r
345 e.link17.think = SUB_Remove;
\r
346 e.link17.nextthink = time;
\r
350 if (t.delay == e.link17.delay)
\r
354 e.lflags17 = e.lflags17 | LF_REMOTE;
\r
358 e.link18.think = SUB_Remove;
\r
359 e.link18.nextthink = time;
\r
363 if (t.delay == e.link18.delay)
\r
367 e.lflags18 = e.lflags18 | LF_REMOTE;
\r
371 e.link19.think = SUB_Remove;
\r
372 e.link19.nextthink = time;
\r
376 if (t.delay == e.link19.delay)
\r
380 e.lflags19 = e.lflags19 | LF_REMOTE;
\r
387 if (!(e.sflags & S_TELEPORT))
\r
392 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))
\r
435 else if (!e.link10)
\r
437 else if (!e.link11)
\r
439 else if (!e.link12)
\r
441 else if (!e.link13)
\r
443 else if (!e.link14)
\r
445 else if (!e.link15)
\r
447 else if (!e.link16)
\r
449 else if (!e.link17)
\r
451 else if (!e.link18)
\r
453 else if (!e.link19)
\r
456 dprint("WARNING: Too many linking NavNodes!\n");
\r
466 if (e.sflags & S_TELEPORT)
\r
468 t = findchain(classname, "trigger_teleport");
\r
471 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
473 tdest = find(world, targetname, t.target);
\r
474 tdest = FindCurrentNavNode(tdest.origin, '0 0 0', '0 0 0');
\r
480 error("Expected navnode\n");
\r
482 else if (e.sflags & S_DOOR)
\r
484 t = findchain(classname, "door");
\r
487 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
492 error("Expected door\n");
\r
498 /* --- LoadNavNodes ---
\r
499 Loads the navnodes from an .nnl file (NavNodeList) for the map*/
\r
501 void() LoadNavNodes =
\r
503 local float f, file, length;
\r
506 local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;
\r
507 local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;
\r
509 local float rl0, rl1, rl2, rl3, rl4, rl5, rl6, rl7, rl8, rl9;
\r
510 local float rl10, rl11, rl12, rl13, rl14, rl15, rl16, rl17, rl18, rl19;
\r
512 local vector wborg, wbmaxs, wbmins;
\r
513 local entity e, plane_storage;
\r
517 dprint("NavNodes present, map needs to be reloaded to load navnode-file\n");
\r
521 plane_storage = spawn();
\r
523 length = strlen(world.model);
\r
524 length = length - 5;
\r
525 s = substring(world.model, 5, length);
\r
526 s = strcat("maps/", s, ".nnl");
\r
528 file = fopen(s, FILE_READ);
\r
532 dprint("Found navnode file\n");
\r
534 while (s == "navnode")
\r
539 wborg = wbmaxs = wbmins = nullvector;
\r
540 plane_storage.plane_chain = world;
\r
542 tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;
\r
543 tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;
\r
544 rl0 = rl1 = rl2 = rl3 = rl4 = rl5 = rl6 = rl7 = rl8 = rl9 = -1;
\r
545 rl10 = rl11 = rl12 = rl13 = rl14 = rl15 = rl16 = rl17 = rl18 = rl19 = -1;
\r
553 while (s == "plane")
\r
559 AddPlane(plane_storage, pln*-1, pdst);
\r
562 while (substring(s, 0, 6) == "remote")
\r
564 length = strlen(s);
\r
565 f = stof(substring(s, 6, length));
\r
615 while (substring(s, 0, 6) == "lflags")
\r
617 length = strlen(s);
\r
618 f = stof(substring(s, 6, length));
\r
662 e = SpawnNavNode(wborg, wbmins, wbmaxs);
\r
663 if (plane_storage.plane_chain)
\r
664 e.plane_chain = plane_storage.plane_chain;
\r
676 e.lflags10 = tfl10;
\r
677 e.lflags11 = tfl11;
\r
678 e.lflags12 = tfl12;
\r
679 e.lflags13 = tfl13;
\r
680 e.lflags14 = tfl14;
\r
681 e.lflags15 = tfl15;
\r
682 e.lflags16 = tfl16;
\r
683 e.lflags17 = tfl17;
\r
684 e.lflags18 = tfl18;
\r
685 e.lflags19 = tfl19;
\r
689 newmis.classname = "remotelinker";
\r
690 newmis.delay = rl0;
\r
696 newmis.classname = "remotelinker";
\r
697 newmis.delay = rl1;
\r
703 newmis.classname = "remotelinker";
\r
704 newmis.delay = rl2;
\r
710 newmis.classname = "remotelinker";
\r
711 newmis.delay = rl3;
\r
717 newmis.classname = "remotelinker";
\r
718 newmis.delay = rl4;
\r
724 newmis.classname = "remotelinker";
\r
725 newmis.delay = rl5;
\r
731 newmis.classname = "remotelinker";
\r
732 newmis.delay = rl6;
\r
738 newmis.classname = "remotelinker";
\r
739 newmis.delay = rl7;
\r
745 newmis.classname = "remotelinker";
\r
746 newmis.delay = rl8;
\r
752 newmis.classname = "remotelinker";
\r
753 newmis.delay = rl9;
\r
759 newmis.classname = "remotelinker";
\r
760 newmis.delay = rl10;
\r
766 newmis.classname = "remotelinker";
\r
767 newmis.delay = rl11;
\r
773 newmis.classname = "remotelinker";
\r
774 newmis.delay = rl12;
\r
780 newmis.classname = "remotelinker";
\r
781 newmis.delay = rl13;
\r
787 newmis.classname = "remotelinker";
\r
788 newmis.delay = rl14;
\r
794 newmis.classname = "remotelinker";
\r
795 newmis.delay = rl15;
\r
801 newmis.classname = "remotelinker";
\r
802 newmis.delay = rl16;
\r
808 newmis.classname = "remotelinker";
\r
809 newmis.delay = rl17;
\r
815 newmis.classname = "remotelinker";
\r
816 newmis.delay = rl18;
\r
822 newmis.classname = "remotelinker";
\r
823 newmis.delay = rl19;
\r
830 dprint("No navnode file found\n");
\r
831 remove(plane_storage);
\r
832 plane_storage = world;
\r