AddRoute()
**********


FUNKTION
========

   public varargs void AddRoute(string room, int stay, int next,
       string harbour_desc, mixed dest_ids, string deststr)


DEFINIERT IN
============

   /std/transport.c


ARGUMENTE
=========

   string room
       Filename der Haltestelle (des Ziels)
   int stay
       Aufenthaltszeit an der Haltestelle.
   int next
       Fahrtzeit von dort bis zum naechsten Fahrplanpunkt
   string harbour_desc
       Name der Haltestelle (fuer QueryArrived)
   mixed dest_ids
       kleingeschriebene IDs der Haltestelle
   string destrstr
       Unbenutzt / Undefiniert.


BESCHREIBUNG
============

   Dem Fahrplan des Transporters wird eine neue Haltestelle hinzugefuegt.

   Bei Erreichen der Haltestelle wird der Transporter in den Raum 'room'
   bewegt und sichtbar gemacht. Nun kann man ihn fuer 'stay' Sekunden
   betreten oder verlassen, bevor er ablegt (unsichtbar gemacht wird).
   Nach 'next' Sekunden wird dann der naechste Punkt des Fahrplans
   ausgefuehrt.



   'harbour_desc' ist ein String, den QueryArrived() zurueckgibt, wenn sich
   der Transporter an einer Haltestelle befindet. In der Regel ist das ein
   String, der die Haltestelle naeher beschreibt.



   'dest_ids' ist ein Array von Strings, die als ID-Code fuer diese
   Haltstelle dienen. Das wird zB bei der Ermittlung einer Haltestelle bei
   "reise nach" benutzt. Wenn 'dest_ids' nicht gesetzt ist, und auch
   P_HARBOUR des Zielhafens nicht korrekt gesetzt ist, werden
   grossgeschriebene Begriffe aus 'harbour_desc' verwendet.


BEISPIELE
=========

   #1 Hier ein Auszug aus /d/inseln/schiffe/jolle.c:

     AddRoute("/d/ebene/room/PortVain/po_haf2", 40,
              10, "Hafen von Port Vain");

   Die Jolle wird also beim Anlegen in den Port Vainer Hafen bewegt und
   laesst sich dort 40 Sekunden lang betreten oder verlassen.
   QueryArrived() liefert waehrend dieser Zeit den String "Hafen von Port
   Vain" zurueck. Nach den 40 Sekunden legt die Jolle ab, und nach
   weiteren 10 Sekunden wird die naechste Station in ihrem Fahrplan
   angefahren.

   #2 Die Galeere nach Orkhausen:
     AddRoute(INSEL("steg"), 30, 20, "Verlorene Land ( Orkhausen )" );
     - haelt 30 Sekunden
     - reist 20 Sekunden
     - reist nach INSEL("steg"), bekannt als "Verlorene Land ( Orkhausen )"
     - da keine 'dest_ids' angegeben sind, waere eine so definierte
       Haltstelle nur mit den IDs ansprechbar, die in P_HARBOURS im Zielraum
       angegeben sind.

   Wenn man nun erreichen wollte, dass das Ziel auch mit dem Kuerzel "vland"
   ansprechbar ist, kann man zum einen explizite 'dest_ids' eintragen:
     AddRoute(INSEL("steg"), 30, 20, "Verlorene Land ( Orkhausen )",
              ({"verlorenes", "land", "orkhausen", "vland"}));
   Dies laesst sich im Zielhafen aber auch durch Eintragen des Kuerzels
   "vland" in P_HARBOUR erreichen. Dies hat den Vorteil, dass dieser Hafen
   dann von allen Transportern, die dort anlegen, unter demselben Namen
   erreicht werden kann.


HINWEISE
========

   Dadurch, dass die Eintraege aus P_HARBOUR und 'dest_ids' gleichberechtigt
   fuer "reise nach <ziel>" verwendet werden koennen, ist es moeglich,
   dass die Reiseziele auf einem Schiff unter zusaetzlichen Bezeichnungen
   bekannt sind, als an Land (zum Beispiel koennte eine fernwestliche
   Besatzung die Ziele anders nennen).


SIEHE AUCH
==========

Funktionen  AddMsg(L), AddFun(L), /std/transport.c Properties
P_HARBOUR, P_NO_TRAVELING, P_TRAVEL_INFO


2015-Jan-18, Arathorn.
======================
