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 float shirt, pants;
\r
151 local entity ent, ret;
\r
154 self = spawnclient();
\r
157 bprint("Can not add UrreBot, server full\n");
\r
158 if (bottype == BOT_TYPE_URREBOT)
\r
159 cvar_set("urrebots", ftos(urrebots));
\r
161 cvar_set("bot_number", ftos(bot_number));
\r
166 // Requested by Vermeulen
\r
167 self.netname = PickARandomName();
\r
169 JoinBestTeam(self, 0);
\r
172 shirt = floor(random()*15);
\r
173 pants = floor(random()*15);
\r
174 self.clientcolors = pants + shirt * 16;
\r
176 self.list = urrebot_chain;
\r
177 urrebot_chain = self;
\r
179 PutClientInServer();
\r
183 strategytoken = urrebot_chain;
\r
188 /* --- UrreBotRemove ---
\r
189 removes an UrreBot from the server*/
\r
191 void() UrreBotRemove =
\r
193 local entity ent, t;
\r
195 ent = findchainflags(flags, FL_CLIENT);
\r
198 if (clienttype(ent) == CLIENTTYPE_BOT)
\r
200 if (ent.bot_type == BOT_TYPE_URREBOT)
\r
202 if (urrebot_chain == self)
\r
203 urrebot_chain = self.list;
\r
206 t = find(world, classname, "player");
\r
211 t = find(t, classname, "player");
\r
217 ClientDisconnect();
\r
225 /* --- SpawnNavNode ---
\r
226 The one to guess what this does gets free bacon from FrikaC*/
\r
228 entity(vector org, vector nnmins, vector nnmaxs) SpawnNavNode =
\r
231 setsize(newmis, nnmins, nnmaxs);
\r
232 newmis.classname = "navnode";
\r
233 setorigin(newmis, org);
\r
237 /* --- AddPlane ---
\r
238 Adds a plane to the plane list of a navnode*/
\r
240 void(entity navn, vector normal, float dist) AddPlane =
\r
245 newmis.classname = "plane";
\r
246 newmis.list = navn.plane_chain;
\r
247 navn.plane_chain = newmis;
\r
248 newmis.mangle = normal*-1;
\r
249 newmis.delay = dist;
\r
250 f = (navn.origin * newmis.mangle) - ((navn.origin + (newmis.delay * newmis.mangle)) * newmis.mangle);
\r
253 newmis.mangle = newmis.mangle*-1;
\r
254 newmis.delay = newmis.delay*-1;
\r
258 /* --- SpawnOptPoint ---
\r
259 This function spawns waypoints for the most used paths between navnodes as an
\r
262 void(entity navn, entity l1, entity l2) SpawnOptPoint =
\r
265 local vector point;
\r
266 local entity oldself;
\r
267 local entity l, upd_pt;
\r
270 setsize (newmis, PL_MIN, PL_MAX);
\r
273 point = ClampPointToSpace(ClampPointToSpace(l2.origin, l2, navn), l1, navn);
\r
276 l = navn.optp_chain;
\r
279 if (point == l.origin)
\r
291 if (upd_pt.link0 != l1)
\r
292 if (upd_pt.link1 != l1)
\r
293 if (upd_pt.link2 != l1)
\r
294 if (upd_pt.link3 != l1)
\r
295 if (upd_pt.link4 != l1)
\r
296 if (upd_pt.link5 != l1)
\r
297 if (upd_pt.link6 != l1)
\r
298 if (upd_pt.link7 != l1)
\r
299 if (upd_pt.link8 != l1)
\r
300 if (upd_pt.link9 != l1)
\r
304 else if (!upd_pt.link1)
\r
306 else if (!upd_pt.link2)
\r
308 else if (!upd_pt.link3)
\r
310 else if (!upd_pt.link4)
\r
312 else if (!upd_pt.link5)
\r
314 else if (!upd_pt.link6)
\r
316 else if (!upd_pt.link7)
\r
318 else if (!upd_pt.link8)
\r
320 else if (!upd_pt.link9)
\r
324 if (upd_pt.link10 != l2)
\r
325 if (upd_pt.link11 != l2)
\r
326 if (upd_pt.link12 != l2)
\r
327 if (upd_pt.link13 != l2)
\r
328 if (upd_pt.link14 != l2)
\r
329 if (upd_pt.link15 != l2)
\r
330 if (upd_pt.link16 != l2)
\r
331 if (upd_pt.link17 != l2)
\r
332 if (upd_pt.link18 != l2)
\r
333 if (upd_pt.link19 != l2)
\r
335 if (!upd_pt.link10)
\r
337 upd_pt.link10 = l2;
\r
340 else if (!upd_pt.link11)
\r
342 upd_pt.link11 = l2;
\r
345 else if (!upd_pt.link12)
\r
347 upd_pt.link12 = l2;
\r
350 else if (!upd_pt.link13)
\r
352 upd_pt.link13 = l2;
\r
355 else if (!upd_pt.link14)
\r
357 upd_pt.link14 = l2;
\r
360 else if (!upd_pt.link15)
\r
362 upd_pt.link15 = l2;
\r
365 else if (!upd_pt.link16)
\r
367 upd_pt.link16 = l2;
\r
370 else if (!upd_pt.link17)
\r
372 upd_pt.link17 = l2;
\r
375 else if (!upd_pt.link18)
\r
377 upd_pt.link18 = l2;
\r
380 else if (!upd_pt.link19)
\r
382 upd_pt.link19 = l2;
\r
390 newmis.classname = "optpoint";
\r
391 newmis.list = navn.optp_chain;
\r
392 navn.optp_chain = newmis;
\r
393 setorigin(newmis, point);
\r
395 newmis.link10 = l2;
\r
401 void() OptimiseNavigation =
\r
403 local entity navn, l;
\r
405 navn = navnode_chain;
\r
408 l = navn.optp_chain;
\r
411 l.think = SUB_Remove;
\r
412 l.nextthink = time;
\r
413 SpawnOptPoint(navn, l.enemy, navn);
\r
414 if (navn.link0 != l.enemy)
\r
415 if (!(navn.lflags0 & LF_NOWALK))
\r
416 if (!(navn.lflags0 & LF_NOLINK))
\r
417 SpawnOptPoint(navn, l.enemy, navn.link0);
\r
420 if (navn.link1 != l.enemy)
\r
421 if (!(navn.lflags1 & LF_NOWALK))
\r
422 if (!(navn.lflags1 & LF_NOLINK))
\r
423 SpawnOptPoint(navn, l.enemy, navn.link1);
\r
426 if (navn.link2 != l.enemy)
\r
427 if (!(navn.lflags2 & LF_NOWALK))
\r
428 if (!(navn.lflags2 & LF_NOLINK))
\r
429 SpawnOptPoint(navn, l.enemy, navn.link2);
\r
432 if (navn.link3 != l.enemy)
\r
433 if (!(navn.lflags3 & LF_NOWALK))
\r
434 if (!(navn.lflags3 & LF_NOLINK))
\r
435 SpawnOptPoint(navn, l.enemy, navn.link3);
\r
438 if (navn.link4 != l.enemy)
\r
439 if (!(navn.lflags4 & LF_NOWALK))
\r
440 if (!(navn.lflags4 & LF_NOLINK))
\r
441 SpawnOptPoint(navn, l.enemy, navn.link4);
\r
444 if (navn.link5 != l.enemy)
\r
445 if (!(navn.lflags5 & LF_NOWALK))
\r
446 if (!(navn.lflags5 & LF_NOLINK))
\r
447 SpawnOptPoint(navn, l.enemy, navn.link5);
\r
450 if (navn.link6 != l.enemy)
\r
451 if (!(navn.lflags6 & LF_NOWALK))
\r
452 if (!(navn.lflags6 & LF_NOLINK))
\r
453 SpawnOptPoint(navn, l.enemy, navn.link6);
\r
456 if (navn.link7 != l.enemy)
\r
457 if (!(navn.lflags7 & LF_NOWALK))
\r
458 if (!(navn.lflags7 & LF_NOLINK))
\r
459 SpawnOptPoint(navn, l.enemy, navn.link7);
\r
462 if (navn.link8 != l.enemy)
\r
463 if (!(navn.lflags8 & LF_NOWALK))
\r
464 if (!(navn.lflags8 & LF_NOLINK))
\r
465 SpawnOptPoint(navn, l.enemy, navn.link8);
\r
468 if (navn.link9 != l.enemy)
\r
469 if (!(navn.lflags9 & LF_NOWALK))
\r
470 if (!(navn.lflags9 & LF_NOLINK))
\r
471 SpawnOptPoint(navn, l.enemy, navn.link9);
\r
474 if (navn.link10 != l.enemy)
\r
475 if (!(navn.lflags10 & LF_NOWALK))
\r
476 if (!(navn.lflags10 & LF_NOLINK))
\r
477 SpawnOptPoint(navn, l.enemy, navn.link10);
\r
480 if (navn.link11 != l.enemy)
\r
481 if (!(navn.lflags11 & LF_NOWALK))
\r
482 if (!(navn.lflags11 & LF_NOLINK))
\r
483 SpawnOptPoint(navn, l.enemy, navn.link11);
\r
486 if (navn.link12 != l.enemy)
\r
487 if (!(navn.lflags12 & LF_NOWALK))
\r
488 if (!(navn.lflags12 & LF_NOLINK))
\r
489 SpawnOptPoint(navn, l.enemy, navn.link12);
\r
492 if (navn.link13 != l.enemy)
\r
493 if (!(navn.lflags13 & LF_NOWALK))
\r
494 if (!(navn.lflags13 & LF_NOLINK))
\r
495 SpawnOptPoint(navn, l.enemy, navn.link13);
\r
498 if (navn.link14 != l.enemy)
\r
499 if (!(navn.lflags14 & LF_NOWALK))
\r
500 if (!(navn.lflags14 & LF_NOLINK))
\r
501 SpawnOptPoint(navn, l.enemy, navn.link14);
\r
504 if (navn.link15 != l.enemy)
\r
505 if (!(navn.lflags15 & LF_NOWALK))
\r
506 if (!(navn.lflags15 & LF_NOLINK))
\r
507 SpawnOptPoint(navn, l.enemy, navn.link15);
\r
510 if (navn.link16 != l.enemy)
\r
511 if (!(navn.lflags16 & LF_NOWALK))
\r
512 if (!(navn.lflags16 & LF_NOLINK))
\r
513 SpawnOptPoint(navn, l.enemy, navn.link16);
\r
516 if (navn.link17 != l.enemy)
\r
517 if (!(navn.lflags17 & LF_NOWALK))
\r
518 if (!(navn.lflags17 & LF_NOLINK))
\r
519 SpawnOptPoint(navn, l.enemy, navn.link17);
\r
522 if (navn.link18 != l.enemy)
\r
523 if (!(navn.lflags18 & LF_NOWALK))
\r
524 if (!(navn.lflags18 & LF_NOLINK))
\r
525 SpawnOptPoint(navn, l.enemy, navn.link18);
\r
527 if (navn.link19 != l.enemy)
\r
528 if (!(navn.lflags19 & LF_NOWALK))
\r
529 if (!(navn.lflags19 & LF_NOLINK))
\r
530 SpawnOptPoint(navn, l.enemy, navn.link19);
\r
555 void(entity navn, entity linked) SpawnOptController =
\r
558 newmis.classname = "optcontroller";
\r
559 newmis.list = navn.optp_chain;
\r
560 navn.optp_chain = newmis;
\r
561 newmis.enemy = linked;
\r
564 /* --- LinkNavNodes ---
\r
565 Links the navnodes and gives some special attributes (like doors, teleporters)*/
\r
567 void() LinkNavNodes =
\r
569 local entity e, t, tdest;
\r
571 navnode_chain = world;
\r
574 e = findchain(classname, "navnode");
\r
577 e.list = navnode_chain;
\r
579 e.delay = navnodes;
\r
580 navnodes = navnodes + 1;
\r
589 e.link0.think = SUB_Remove;
\r
590 e.link0.nextthink = time;
\r
594 if (t.delay == e.link0.delay)
\r
598 e.lflags0 = e.lflags0 | LF_REMOTE;
\r
602 e.link1.think = SUB_Remove;
\r
603 e.link1.nextthink = time;
\r
607 if (t.delay == e.link1.delay)
\r
611 e.lflags1 = e.lflags1 | LF_REMOTE;
\r
615 e.link2.think = SUB_Remove;
\r
616 e.link2.nextthink = time;
\r
620 if (t.delay == e.link2.delay)
\r
624 e.lflags2 = e.lflags2 | LF_REMOTE;
\r
628 e.link3.think = SUB_Remove;
\r
629 e.link3.nextthink = time;
\r
633 if (t.delay == e.link3.delay)
\r
637 e.lflags3 = e.lflags3 | LF_REMOTE;
\r
641 e.link4.think = SUB_Remove;
\r
642 e.link4.nextthink = time;
\r
646 if (t.delay == e.link4.delay)
\r
650 e.lflags4 = e.lflags4 | LF_REMOTE;
\r
654 e.link5.think = SUB_Remove;
\r
655 e.link5.nextthink = time;
\r
659 if (t.delay == e.link5.delay)
\r
663 e.lflags5 = e.lflags5 | LF_REMOTE;
\r
667 e.link6.think = SUB_Remove;
\r
668 e.link6.nextthink = time;
\r
672 if (t.delay == e.link6.delay)
\r
676 e.lflags6 = e.lflags6 | LF_REMOTE;
\r
680 e.link7.think = SUB_Remove;
\r
681 e.link7.nextthink = time;
\r
685 if (t.delay == e.link7.delay)
\r
689 e.lflags7 = e.lflags7 | LF_REMOTE;
\r
693 e.link8.think = SUB_Remove;
\r
694 e.link8.nextthink = time;
\r
698 if (t.delay == e.link8.delay)
\r
702 e.lflags8 = e.lflags8 | LF_REMOTE;
\r
706 e.link9.think = SUB_Remove;
\r
707 e.link9.nextthink = time;
\r
711 if (t.delay == e.link9.delay)
\r
715 e.lflags9 = e.lflags9 | LF_REMOTE;
\r
719 e.link10.think = SUB_Remove;
\r
720 e.link10.nextthink = time;
\r
724 if (t.delay == e.link10.delay)
\r
728 e.lflags10 = e.lflags10 | LF_REMOTE;
\r
732 e.link11.think = SUB_Remove;
\r
733 e.link11.nextthink = time;
\r
737 if (t.delay == e.link11.delay)
\r
741 e.lflags11 = e.lflags11 | LF_REMOTE;
\r
745 e.link12.think = SUB_Remove;
\r
746 e.link12.nextthink = time;
\r
750 if (t.delay == e.link12.delay)
\r
754 e.lflags12 = e.lflags12 | LF_REMOTE;
\r
758 e.link13.think = SUB_Remove;
\r
759 e.link13.nextthink = time;
\r
763 if (t.delay == e.link13.delay)
\r
767 e.lflags13 = e.lflags13 | LF_REMOTE;
\r
771 e.link14.think = SUB_Remove;
\r
772 e.link14.nextthink = time;
\r
776 if (t.delay == e.link14.delay)
\r
780 e.lflags14 = e.lflags14 | LF_REMOTE;
\r
784 e.link15.think = SUB_Remove;
\r
785 e.link15.nextthink = time;
\r
789 if (t.delay == e.link15.delay)
\r
793 e.lflags15 = e.lflags15 | LF_REMOTE;
\r
797 e.link16.think = SUB_Remove;
\r
798 e.link16.nextthink = time;
\r
802 if (t.delay == e.link16.delay)
\r
806 e.lflags16 = e.lflags16 | LF_REMOTE;
\r
810 e.link17.think = SUB_Remove;
\r
811 e.link17.nextthink = time;
\r
815 if (t.delay == e.link17.delay)
\r
819 e.lflags17 = e.lflags17 | LF_REMOTE;
\r
823 e.link18.think = SUB_Remove;
\r
824 e.link18.nextthink = time;
\r
828 if (t.delay == e.link18.delay)
\r
832 e.lflags18 = e.lflags18 | LF_REMOTE;
\r
836 e.link19.think = SUB_Remove;
\r
837 e.link19.nextthink = time;
\r
841 if (t.delay == e.link19.delay)
\r
845 e.lflags19 = e.lflags19 | LF_REMOTE;
\r
852 if (!(e.sflags & S_TELEPORT))
\r
857 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))
\r
900 else if (!e.link10)
\r
902 else if (!e.link11)
\r
904 else if (!e.link12)
\r
906 else if (!e.link13)
\r
908 else if (!e.link14)
\r
910 else if (!e.link15)
\r
912 else if (!e.link16)
\r
914 else if (!e.link17)
\r
916 else if (!e.link18)
\r
918 else if (!e.link19)
\r
921 dprint("WARNING: Too many linking NavNodes!\n");
\r
922 if (urrebots_navopt)
\r
923 SpawnOptController(e, t);
\r
933 if (e.sflags & S_TELEPORT)
\r
935 t = findchain(classname, "trigger_teleport");
\r
938 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
940 tdest = find(world, targetname, t.target);
\r
941 tdest = FindCurrentNavNode(tdest.origin, '0 0 0', '0 0 0');
\r
947 error("Expected navnode\n");
\r
949 else if (e.sflags & S_DOOR)
\r
951 t = findchain(classname, "door");
\r
954 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))
\r
959 error("Expected door\n");
\r
965 /* --- LoadNavNodes ---
\r
966 Loads the navnodes from an .nnl file (NavNodeList) for the map*/
\r
968 void() LoadNavNodes =
\r
970 local float f, file, length;
\r
973 local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;
\r
974 local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;
\r
976 local float rl0, rl1, rl2, rl3, rl4, rl5, rl6, rl7, rl8, rl9;
\r
977 local float rl10, rl11, rl12, rl13, rl14, rl15, rl16, rl17, rl18, rl19;
\r
979 local vector wborg, wbmaxs, wbmins;
\r
980 local entity e, plane_storage;
\r
984 dprint("NavNodes present, map needs to be reloaded to load navnode-file\n");
\r
988 plane_storage = spawn();
\r
990 length = strlen(world.model);
\r
991 length = length - 5;
\r
992 s = substring(world.model, 5, length);
\r
993 s = strcat("maps/", s, ".nnl");
\r
995 file = fopen(s, FILE_READ);
\r
999 dprint("Found navnode file\n");
\r
1001 while (s == "navnode")
\r
1006 wborg = wbmaxs = wbmins = nullvector;
\r
1007 plane_storage.plane_chain = world;
\r
1009 tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;
\r
1010 tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;
\r
1011 rl0 = rl1 = rl2 = rl3 = rl4 = rl5 = rl6 = rl7 = rl8 = rl9 = -1;
\r
1012 rl10 = rl11 = rl12 = rl13 = rl14 = rl15 = rl16 = rl17 = rl18 = rl19 = -1;
\r
1020 while (s == "plane")
\r
1026 AddPlane(plane_storage, pln*-1, pdst);
\r
1029 while (substring(s, 0, 6) == "remote")
\r
1031 length = strlen(s);
\r
1032 f = stof(substring(s, 6, length));
\r
1076 if (s == "sflags")
\r
1082 while (substring(s, 0, 6) == "lflags")
\r
1084 length = strlen(s);
\r
1085 f = stof(substring(s, 6, length));
\r
1129 e = SpawnNavNode(wborg, wbmins, wbmaxs);
\r
1130 if (plane_storage.plane_chain)
\r
1131 e.plane_chain = plane_storage.plane_chain;
\r
1143 e.lflags10 = tfl10;
\r
1144 e.lflags11 = tfl11;
\r
1145 e.lflags12 = tfl12;
\r
1146 e.lflags13 = tfl13;
\r
1147 e.lflags14 = tfl14;
\r
1148 e.lflags15 = tfl15;
\r
1149 e.lflags16 = tfl16;
\r
1150 e.lflags17 = tfl17;
\r
1151 e.lflags18 = tfl18;
\r
1152 e.lflags19 = tfl19;
\r
1156 newmis.classname = "remotelinker";
\r
1157 newmis.delay = rl0;
\r
1163 newmis.classname = "remotelinker";
\r
1164 newmis.delay = rl1;
\r
1170 newmis.classname = "remotelinker";
\r
1171 newmis.delay = rl2;
\r
1177 newmis.classname = "remotelinker";
\r
1178 newmis.delay = rl3;
\r
1184 newmis.classname = "remotelinker";
\r
1185 newmis.delay = rl4;
\r
1191 newmis.classname = "remotelinker";
\r
1192 newmis.delay = rl5;
\r
1198 newmis.classname = "remotelinker";
\r
1199 newmis.delay = rl6;
\r
1205 newmis.classname = "remotelinker";
\r
1206 newmis.delay = rl7;
\r
1212 newmis.classname = "remotelinker";
\r
1213 newmis.delay = rl8;
\r
1219 newmis.classname = "remotelinker";
\r
1220 newmis.delay = rl9;
\r
1226 newmis.classname = "remotelinker";
\r
1227 newmis.delay = rl10;
\r
1228 e.link10 = newmis;
\r
1233 newmis.classname = "remotelinker";
\r
1234 newmis.delay = rl11;
\r
1235 e.link11 = newmis;
\r
1240 newmis.classname = "remotelinker";
\r
1241 newmis.delay = rl12;
\r
1242 e.link12 = newmis;
\r
1247 newmis.classname = "remotelinker";
\r
1248 newmis.delay = rl13;
\r
1249 e.link13 = newmis;
\r
1254 newmis.classname = "remotelinker";
\r
1255 newmis.delay = rl14;
\r
1256 e.link14 = newmis;
\r
1261 newmis.classname = "remotelinker";
\r
1262 newmis.delay = rl15;
\r
1263 e.link15 = newmis;
\r
1268 newmis.classname = "remotelinker";
\r
1269 newmis.delay = rl16;
\r
1270 e.link16 = newmis;
\r
1275 newmis.classname = "remotelinker";
\r
1276 newmis.delay = rl17;
\r
1277 e.link17 = newmis;
\r
1282 newmis.classname = "remotelinker";
\r
1283 newmis.delay = rl18;
\r
1284 e.link18 = newmis;
\r
1289 newmis.classname = "remotelinker";
\r
1290 newmis.delay = rl19;
\r
1291 e.link19 = newmis;
\r
1297 dprint("No navnode file found\n");
\r
1298 remove(plane_storage);
\r
1299 plane_storage = world;
\r