 Das Questsystem wird in MorgenGrauen von einem zentralen Questhandler
gesteuert. Dieser stellt die folgenden Funktionen zur Verfuegung:

AddQuest(string questname, int questpoints, int experience,
         string *allowedobj, string hint, int difficulty, int needed)
 Diese Funktion definiert eine Quest und gibt sie zur Benutzung durch die
 Spieler frei. Sie darf nur von Erzmagiern aufgerufen werden.
 Bedeutung der Parameter:
   questname gibt den Namen der zu definierenden Quest an. Es darf bereits
             eine Quest dieses Namens geben, ihre Parameter werden dann
             geaendert.
   questpoints gibt die Zahl der Questpunkte an, die der Spieler fuer die
               Loesung dieser Quest angerechnet bekommt. Muss >0 sein.
   experience gibt die Zahl der Erfahrungspunkte an, die der Spieler fuer
              eine Quest bekommen kann. DIESE ZAHL KANN <0 SEIN!
   allowedobj ist ein Array mit den Filenamen der Objekte, die diese Quest als
              durch einen Spieler geloest kennzeichnen duerfen. Darueberhinaus
              duerfen Erzmagier dies immer tun.
   hint ist ein String, der Tips zur Loesung der Quest enthaelt. Dieser String
        wird dem Spieler vom Orakel als Hinweis gegeben.
   difficulty ist eine Zahl zwischen 0 und 20, die den "Schwierigkeitsgrad"
              der Quest angibt. 0 hat eine besondere Bedeutung, naemlich die,
              das keine Einschaetzung vorliegt.
   needed legt fest, ob die Quest von einem Spieler geloest werden muss, be-
          vor er Magier werden kann. Falls needed !=0 ist, MUSS er die Quest
          loesen, unabhaengig von der 90%-Regel.

RemoveQuest(string questname);
 Gegenstueck zu AddQuest, loescht eine Quest. Kann natuerlich ebenfalls nur
 von Erzmagiern aufgerufen werden. DIE SPIELER, DIE DIE QUEST SCHON GELOEST
 HABEN, BEHALTEN DIE ENTSPRECHENDEN QUESTPUNKTE !!

QueryReadyForWiz(object player)
 Dieser Funktion muss ein Playerobjekt uebergeben bekommen und prueft, ob
 der Spieler seitens der Quests bereit ist zur Aufstufung zum Magier, dh
 ob er 90% der QP sowie alle zwingend vorgeschriebenen Quests (siehe
 AddQuest, Parameter needed) geloest hat. Falls dies der Fall ist, liefert
 die Funktion eine 1 zurueck. Wenn er die 90% nicht hat, eine -1. Falls
 ihm noetige Quests fehlen, eine Liste der nicht geloesten, noetigen Quests.

QueryQuest(questname)
 Liefert eine -1, falls keine Quest dieses Names eingetragen ist, sonst
 einen Array mit den Daten der Quest, in der Reihenfolge, in der sie in
 AddQuest eingegeben werden. Dabei ist questpoints das erste Arrayelement.

QueryAdvanceExp(object player)
 Stellt fest, ob der Spieler player genuegend Questpunkte hat, um seine
 Erfahrung zu erhoehen.

-----------------------------------------------------------------------------
 Weiterhin enthaelt jedes Playerobjekt ein Quest-Modul, das die folgenden
Funktionen offeriert:

GiveQuest(string questname)
 Markiert eine Quest bei dem Player als geloest. Es wird getestet, ob die
 Aktion von einem "allowed_object" vorgenommen wird. Die Questpunkte werden
 entsprechend geupdated.

QueryQuests()
 Gibt eine Alist mit den Namen der vom Player geloesten Quests zurueck.

QueryQP()
 Gibt die Anzahl der vom Player erreichten Questpunkte zurueck.

QueryQuest(string questname)
 Stellt fest, ob ein Spieler die Quest geloest hat oder nicht.
