1 /* --- UrreBotSetup ---
\r
2 Issues a random funky name, random colors, playermodel and team to the bot*/
\r
4 void() UrreBotSetup =
\r
6 local float r, shirt, pants;
\r
11 s = "GrooveMachine";
\r
52 self.playermodel = "models/player/carni.zym";
\r
54 self.playerskin = "0";
\r
56 self.playerskin = "1";
\r
60 self.playermodel = "models/player/crash.zym";
\r
61 self.playerskin = "0";
\r
65 self.playermodel = "models/player/grunt.zym";
\r
66 self.playerskin = "0";
\r
70 self.playermodel = "models/player/headhunter.zym";
\r
71 self.playerskin = "0";
\r
75 self.playermodel = "models/player/insurrectionist.zym";
\r
76 self.playerskin = "0";
\r
80 self.playermodel = "models/player/jeandarc.zym";
\r
81 self.playerskin = "0";
\r
85 self.playermodel = "models/player/lurk.zym";
\r
87 self.playerskin = "0";
\r
89 self.playerskin = "1";
\r
93 self.playermodel = "models/player/lycanthrope.zym";
\r
94 self.playerskin = "0";
\r
98 self.playermodel = "models/player/marine.zym";
\r
99 self.playerskin = "0";
\r
103 self.playermodel = "models/player/nexus.zym";
\r
104 if (random() < 0.5)
\r
105 self.playerskin = "0";
\r
107 self.playerskin = "1";
\r
111 self.playermodel = "models/player/pyria.zym";
\r
112 self.playerskin = "0";
\r
116 self.playermodel = "models/player/shock.zym";
\r
117 self.playerskin = "0";
\r
121 self.playermodel = "models/player/skadi.zym";
\r
122 self.playerskin = "0";
\r
126 self.playermodel = "models/player/specop.zym";
\r
127 self.playerskin = "0";
\r
131 self.playermodel = "models/player/visitant.zym";
\r
132 self.playerskin = "0";
\r
136 JoinBestTeam(self, 0);
\r
139 shirt = floor(random()*15);
\r
140 pants = floor(random()*15);
\r
141 self.clientcolors = pants + shirt * 16;
\r
145 /* --- UrreBotAdd ---
\r
146 Adds an UrreBot to the server*/
\r
148 entity(float bottype) UrreBotAdd =
\r
150 local entity ent, ret;
\r
153 self = spawnclient();
\r
156 bprint("Can not add UrreBot, server full\n");
\r
157 if (bottype == BOT_TYPE_URREBOT)
\r
158 cvar_set("urrebots", ftos(urrebots));
\r
160 cvar_set("bot_number", ftos(bot_number));
\r
165 self.list = urrebot_chain;
\r
166 urrebot_chain = self;
\r
168 PutClientInServer();
\r
172 strategytoken = urrebot_chain;
\r
177 /* --- UrreBotRemove ---
\r
178 removes an UrreBot from the server*/
\r
180 void() UrreBotRemove =
\r
182 local entity ent, t;
\r
184 ent = findchain(classname, "player");
\r
187 if (clienttype(ent) == CLIENTTYPE_BOT)
\r
189 if (ent.bot_type == BOT_TYPE_URREBOT)
\r
191 if (urrebot_chain == self)
\r
192 urrebot_chain = self.list;
\r
195 t = find(world, classname, "player");
\r
200 t = find(t, classname, "player");
\r
205 //if(cvar("g_lms") && self.frags < 1) // DP_SV_BOTCLIENT handles this automaticly
\r
206 // lms_dead_count -= 1;
\r
214 /* --- SpawnNavNode ---
\r
215 The one to guess what this does gets free bacon from FrikaC*/
\r
217 entity(vector org, vector nnmins, vector nnmaxs) SpawnNavNode =
\r
220 setsize(newmis, nnmins, nnmaxs);
\r
221 newmis.classname = "navnode";
\r
222 setorigin(newmis, org);
\r
226 /* --- AddPlane ---
\r
227 Adds a plane to the plane list of a navnode*/
\r
229 void(entity navn, vector normal, float dist) AddPlane =
\r
234 newmis.classname = "plane";
\r
235 newmis.list = navn.plane_chain;
\r
236 navn.plane_chain = newmis;
\r
237 newmis.mangle = normal*-1;
\r
238 newmis.delay = dist;
\r
239 f = (navn.origin * newmis.mangle) - ((navn.origin + (newmis.delay * newmis.mangle)) * newmis.mangle);
\r
242 newmis.mangle = newmis.mangle*-1;
\r
243 newmis.delay = newmis.delay*-1;
\r
247 /* --- LinkNavNodes ---
\r
248 Links the navnodes and gives some special attributes (like doors, teleporters)*/
\r
250 void() LinkNavNodes =
\r
252 local entity e, t, tdest;
\r
254 navnode_chain = world;
\r
257 e = findchain(classname, "navnode");
\r
260 e.list = navnode_chain;
\r
262 e.delay = navnodes;
\r
263 navnodes = navnodes + 1;
\r
272 e.link0.think = SUB_Remove;
\r
273 e.link0.nextthink = time;
\r
277 if (t.delay == e.link0.delay)
\r
281 e.lflags0 = e.lflags0 | LF_REMOTE;
\r
285 e.link1.think = SUB_Remove;
\r
286 e.link1.nextthink = time;
\r
290 if (t.delay == e.link1.delay)
\r
294 e.lflags1 = e.lflags1 | LF_REMOTE;
\r
298 e.link2.think = SUB_Remove;
\r
299 e.link2.nextthink = time;
\r
303 if (t.delay == e.link2.delay)
\r
307 e.lflags2 = e.lflags2 | LF_REMOTE;
\r
311 e.link3.think = SUB_Remove;
\r
312 e.link3.nextthink = time;
\r
316 if (t.delay == e.link3.delay)
\r
320 e.lflags3 = e.lflags3 | LF_REMOTE;
\r
324 e.link4.think = SUB_Remove;
\r
325 e.link4.nextthink = time;
\r
329 if (t.delay == e.link4.delay)
\r
333 e.lflags4 = e.lflags4 | LF_REMOTE;
\r
337 e.link5.think = SUB_Remove;
\r
338 e.link5.nextthink = time;
\r
342 if (t.delay == e.link5.delay)
\r
346 e.lflags5 = e.lflags5 | LF_REMOTE;
\r
350 e.link6.think = SUB_Remove;
\r
351 e.link6.nextthink = time;
\r
355 if (t.delay == e.link6.delay)
\r
359 e.lflags6 = e.lflags6 | LF_REMOTE;
\r
363 e.link7.think = SUB_Remove;
\r
364 e.link7.nextthink = time;
\r
368 if (t.delay == e.link7.delay)
\r
372 e.lflags7 = e.lflags7 | LF_REMOTE;
\r
376 e.link8.think = SUB_Remove;
\r
377 e.link8.nextthink = time;
\r
381 if (t.delay == e.link8.delay)
\r
385 e.lflags8 = e.lflags8 | LF_REMOTE;
\r
389 e.link9.think = SUB_Remove;
\r
390 e.link9.nextthink = time;
\r
394 if (t.delay == e.link9.delay)
\r
398 e.lflags9 = e.lflags9 | LF_REMOTE;
\r
402 e.link10.think = SUB_Remove;
\r
403 e.link10.nextthink = time;
\r
407 if (t.delay == e.link10.delay)
\r
411 e.lflags10 = e.lflags10 | LF_REMOTE;
\r
415 e.link11.think = SUB_Remove;
\r
416 e.link11.nextthink = time;
\r
420 if (t.delay == e.link11.delay)
\r
424 e.lflags11 = e.lflags11 | LF_REMOTE;
\r
428 e.link12.think = SUB_Remove;
\r
429 e.link12.nextthink = time;
\r
433 if (t.delay == e.link12.delay)
\r
437 e.lflags12 = e.lflags12 | LF_REMOTE;
\r
441 e.link13.think = SUB_Remove;
\r
442 e.link13.nextthink = time;
\r
446 if (t.delay == e.link13.delay)
\r
450 e.lflags13 = e.lflags13 | LF_REMOTE;
\r
454 e.link14.think = SUB_Remove;
\r
455 e.link14.nextthink = time;
\r
459 if (t.delay == e.link14.delay)
\r
463 e.lflags14 = e.lflags14 | LF_REMOTE;
\r
467 e.link15.think = SUB_Remove;
\r
468 e.link15.nextthink = time;
\r
472 if (t.delay == e.link15.delay)
\r
476 e.lflags15 = e.lflags15 | LF_REMOTE;
\r
480 e.link16.think = SUB_Remove;
\r
481 e.link16.nextthink = time;
\r
485 if (t.delay == e.link16.delay)
\r
489 e.lflags16 = e.lflags16 | LF_REMOTE;
\r
493 e.link17.think = SUB_Remove;
\r
494 e.link17.nextthink = time;
\r
498 if (t.delay == e.link17.delay)
\r
502 e.lflags17 = e.lflags17 | LF_REMOTE;
\r
506 e.link18.think = SUB_Remove;
\r
507 e.link18.nextthink = time;
\r
511 if (t.delay == e.link18.delay)
\r
515 e.lflags18 = e.lflags18 | LF_REMOTE;
\r
519 e.link19.think = SUB_Remove;
\r
520 e.link19.nextthink = time;
\r
524 if (t.delay == e.link19.delay)
\r
528 e.lflags19 = e.lflags19 | LF_REMOTE;
\r
535 if (!(e.sflags & S_TELEPORT))
\r
540 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))
\r
583 else if (!e.link10)
\r
585 else if (!e.link11)
\r
587 else if (!e.link12)
\r
589 else if (!e.link13)
\r
591 else if (!e.link14)
\r
593 else if (!e.link15)
\r
595 else if (!e.link16)
\r
597 else if (!e.link17)
\r
599 else if (!e.link18)
\r
601 else if (!e.link19)
\r
604 dprint("WARNING: Too many linking NavNodes!\n");
\r
614 if (e.sflags & S_TELEPORT)
\r
616 t = findchain(classname, "trigger_teleport");
\r
619 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
621 tdest = find(world, targetname, t.target);
\r
622 tdest = FindCurrentNavNode(tdest.origin, '0 0 0', '0 0 0');
\r
628 error("Expected navnode\n");
\r
630 else if (e.sflags & S_DOOR)
\r
632 t = findchain(classname, "door");
\r
635 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
640 error("Expected door\n");
\r
646 /* --- LoadNavNodes ---
\r
647 Loads the navnodes from an .nnl file (NavNodeList) for the map*/
\r
649 void() LoadNavNodes =
\r
651 local float f, file, length;
\r
654 local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;
\r
655 local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;
\r
657 local float rl0, rl1, rl2, rl3, rl4, rl5, rl6, rl7, rl8, rl9;
\r
658 local float rl10, rl11, rl12, rl13, rl14, rl15, rl16, rl17, rl18, rl19;
\r
660 local vector wborg, wbmaxs, wbmins;
\r
661 local entity e, plane_storage;
\r
665 dprint("NavNodes present, map needs to be reloaded to load navnode-file\n");
\r
669 plane_storage = spawn();
\r
671 length = strlen(world.model);
\r
672 length = length - 5;
\r
673 s = substring(world.model, 5, length);
\r
674 s = strcat("maps/", s, ".nnl");
\r
676 file = fopen(s, FILE_READ);
\r
680 dprint("Found navnode file\n");
\r
682 while (s == "navnode")
\r
687 wborg = wbmaxs = wbmins = nullvector;
\r
688 plane_storage.plane_chain = world;
\r
690 tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;
\r
691 tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;
\r
692 rl0 = rl1 = rl2 = rl3 = rl4 = rl5 = rl6 = rl7 = rl8 = rl9 = -1;
\r
693 rl10 = rl11 = rl12 = rl13 = rl14 = rl15 = rl16 = rl17 = rl18 = rl19 = -1;
\r
701 while (s == "plane")
\r
707 AddPlane(plane_storage, pln*-1, pdst);
\r
710 while (substring(s, 0, 6) == "remote")
\r
712 length = strlen(s);
\r
713 f = stof(substring(s, 6, length));
\r
763 while (substring(s, 0, 6) == "lflags")
\r
765 length = strlen(s);
\r
766 f = stof(substring(s, 6, length));
\r
810 e = SpawnNavNode(wborg, wbmins, wbmaxs);
\r
811 if (plane_storage.plane_chain)
\r
812 e.plane_chain = plane_storage.plane_chain;
\r
824 e.lflags10 = tfl10;
\r
825 e.lflags11 = tfl11;
\r
826 e.lflags12 = tfl12;
\r
827 e.lflags13 = tfl13;
\r
828 e.lflags14 = tfl14;
\r
829 e.lflags15 = tfl15;
\r
830 e.lflags16 = tfl16;
\r
831 e.lflags17 = tfl17;
\r
832 e.lflags18 = tfl18;
\r
833 e.lflags19 = tfl19;
\r
837 newmis.classname = "remotelinker";
\r
838 newmis.delay = rl0;
\r
844 newmis.classname = "remotelinker";
\r
845 newmis.delay = rl1;
\r
851 newmis.classname = "remotelinker";
\r
852 newmis.delay = rl2;
\r
858 newmis.classname = "remotelinker";
\r
859 newmis.delay = rl3;
\r
865 newmis.classname = "remotelinker";
\r
866 newmis.delay = rl4;
\r
872 newmis.classname = "remotelinker";
\r
873 newmis.delay = rl5;
\r
879 newmis.classname = "remotelinker";
\r
880 newmis.delay = rl6;
\r
886 newmis.classname = "remotelinker";
\r
887 newmis.delay = rl7;
\r
893 newmis.classname = "remotelinker";
\r
894 newmis.delay = rl8;
\r
900 newmis.classname = "remotelinker";
\r
901 newmis.delay = rl9;
\r
907 newmis.classname = "remotelinker";
\r
908 newmis.delay = rl10;
\r
914 newmis.classname = "remotelinker";
\r
915 newmis.delay = rl11;
\r
921 newmis.classname = "remotelinker";
\r
922 newmis.delay = rl12;
\r
928 newmis.classname = "remotelinker";
\r
929 newmis.delay = rl13;
\r
935 newmis.classname = "remotelinker";
\r
936 newmis.delay = rl14;
\r
942 newmis.classname = "remotelinker";
\r
943 newmis.delay = rl15;
\r
949 newmis.classname = "remotelinker";
\r
950 newmis.delay = rl16;
\r
956 newmis.classname = "remotelinker";
\r
957 newmis.delay = rl17;
\r
963 newmis.classname = "remotelinker";
\r
964 newmis.delay = rl18;
\r
970 newmis.classname = "remotelinker";
\r
971 newmis.delay = rl19;
\r
978 dprint("No navnode file found\n");
\r
979 remove(plane_storage);
\r
980 plane_storage = world;
\r