AddFun()
********


FUNKTION
========

   void AddFun(string fun, int next);


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

   /std/transport.c


ARGUMENTE
=========

   fun
        Name der Funktion.
   next
        Zeit bis zur naechsten Fahrplanstation.


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

   Dem Fahrplan wird der Aufruf der Funktion fun, die im Transporter
   definiert sein muss, hinzugefuegt. Nach Aufruf der Funktion vergehen
   next Sekunden, bis die naechste Station angefahren wird.


RUeCKGABEWERT
=============

   keiner


HINWEISE
========

   Die genannte Funktion <fun> wird per call_other() an this_object()
   gerufen, d.h. ihre Sichtbarkeit muss static oder public sein.


BEISPIELE
=========

   Wenn ein zufaellig ausgewaehlter Passagier eines Schiffes unterwegs
   seekrank werden soll, koennte man das wie folgt realisieren:

   protected void create() {
     ...
     AddFun("seekrank", 5);
     ...
   }

   seekrank() {
     // soll nicht immer passieren
     if (random(5))
       return;

     // Opfer auswaehlen
     object* passagiere = QueryPassengers();
     object opfer;
     if (sizeof(passagiere))
       opfer = passagiere[random(sizeof(passagiere))];

     tell_object(opfer,
       "Du wirst seekrank! Schnell stuerzt Du zur Reling, um Dich zu\n"
       "uebergeben.\n");
     tell_room(this_object(),
       sprintf("%s ueberkommt die Seekrankheit!\n"
               "%s stuerzt an die Reling, um sich zu uebergeben.\n",
               opfer->Name(WEN),
               capitalize(opfer->QueryPronoun(WER))), ({ opfer }) );
   }


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

   AddRoute(), AddMsg(), /std/transport.c

Last modified: 15.01.2020, Arathorn
