
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.
======================
