GiveQuest()
***********


FUNKTION
========

   varargs int GiveQuest(string questname, string message)


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

   /std/player/quests.c


ARGUMENTE
=========

   questname
     Questname, wie er im Questmaster eingetragen wurde.
   message
     Optionale Meldung, die auf dem Abenteuer-Kanal statt der
     Standardmeldung gesendet wird.
     Dabei wird @@name@@ durch den Spielernamen ersetzt.


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

   (Die Defines fuer den Rueckgabewert finden sich in
    /secure/questmaster.h)
    1 : Hat geklappt                           (OK)
   -1 : Spieler hat die Quest bereits geloest  (GQ_ALREADY_SET)
   -2 : Ungueltiger Questname                  (GQ_KEY_INVALID)
   -3 : Unbefugter Zugriff                     (GQ_ILLEGAL_OBJ)
   -4 : Quest zur Zeit inaktiv                 (GQ_IS_INACTIVE)


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

   Mit dieser Funktion wird nach dem erfolgreichen Loesen einer
   Quest die Quest im Spieler eingetragen. Dabei muss der Aufruf
   in dem Objekt erfolgen, welches im Questmaster eingetragen ist.
   Zusaetzlich wird der Zeitpunkt eingetragen, an dem die Quest
   bestanden wurde.



   Wer sich da nicht sicher ist, kann mit dem Questtool
   (/obj/tools/questtool) nachsehen.

   Nachdem eine Quest als geloest markiert wurde, ist dies in einem
   Logfile fuer die Quest im Verzeichnis /log/quest einzutragen. Dazu
   wird write_file verwendet.


BEISPIEL
========

   int quest;

   quest = this_player()->GiveQuest("Zacharias Eispalast");

   if (quest == 1)
   {
     write("Du fuehlst, wie Deine Erfahrung ansteigt.\n");
     write_file("/log/quest/eispalast",
                dtime(time())+"   Aufgabe geloest von "
                +this_player()->name()+"\n");
   }
   else if (quest != -1)
     write( "Die Weltenmaschine will Dir Deine Arbeit "
            +"nicht anerkennen.\n"
            +"Frage einen Erzmagier um Hilfe.\n" );


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

   /secure/questmaster.h, /obj/tools/questtool
   QueryQuest(), write_file(), ModifyQuestTime()

Zuletzt geaendert: Son, 27. Apr 2014, Arathorn
