NotifyGiveQuest()
=================

********************* OBSOLETE LFUN ***********************************
* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
* Events (siehe "man events").                                        *
***********************************************************************

NotifyGiveQuest()

FUNKTION
--------
::

     void NotifyGiveQuest(object pl, string key);

     

DEFINIERT IN
------------
::

     /std/gilden_ob.c

     

ARGUMENTE
---------
::

     pl     Der Spieler, der eine Quest geloest hat.
     key    Name der geloesten Quest.

     

BESCHREIBUNG
------------
::

     Die Funktion wird in der Gilde des Spielers aufgerufen, wenn der 
     Spieler eine gueltige Quest besteht - und zwar unabhaengig davon,
     ob er sie bereits geloest hat, oder nicht.

     

RUECKGABEWERT
-------------
::

     keiner

     

BEMERKUNGEN
-----------
::

     Die Funktion ist dafuer gedacht, von Gildenprogrammierern ueberschrieben
     zu werden, wenn beispielsweise bestimmte Quests als Aufstiegsbedingung
     verlangt werden, diese aber in der entsprechenden Gilde geloest sein
     muessen (z.B. Obergladiator als Level-5-Zauberer).

     

SIEHE AUCH
----------
::

     /std/gilden_ob.c
     /std/player/quests.c


Last modified: Fri Oct 4 10:17:00 1996 by Silvana

