AddSpecialInfo()
****************


FUNKTION
========

   public varargs void AddSpecialInfo(string|string* keys, string
   functionname,
      string indent, int|string silent, string|closure  casebased);


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

   /std/npc/info.c


ARGUMENTE
=========

   string|string* frage
      Schluesselphrase(n), fuer die der NPC eine Antwort geben soll,
      wenn man ihn danach fragt

   string functionname
      Name der Funktion, die gerufen werden soll, um den
      Informationstext des NPCs zu ermitteln. Der gerufenen Funktion
      wird die vom Spieler gefragte Schluesselphrase uebergeben.

   string indent    (optional)
      Text, der sich bei mehrzeiligen Meldungen wiederholen soll.

   int|string silent    (optional)
      Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.

   string|closure casebased   (optional)
      Closure mit Returnwert string oder int. Der Funktion wird die
      vom Spieler gefragte Schluesselphrase uebergeben.


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

   Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>"
   nach einer Information mit dem Schluessel frage fragt, so wird die
   Methode "function" gerufen. Die Rueckgabe wird als Meldung
   ausgegeben.

   Fuer die Beschreibung der weiteren Parameter siehe man AddInfo(L).

   "AddSpecialInfo(keys, "function", ...)" entspricht "AddInfo(keys,
   #'function, ...)".


BEMERKUNGEN
===========

   Da AddSpecialInfo() und AddInfo() auf die gleichen Daten zugreifen,
   kann man Informationen, die mit AddSpecialInfo() gesetzt wurden,
   auch mit RemoveInfo() entfernen. Es gibt kein RemoveSpecialInfo().


BEISPIELE
=========

   // Das folgende Beispiel ist auch unter man AddInfo(L) zu finden.
   ### dynamisch ###
   AddSpecialInfo(({"keks","kekse"}),
                  "query_kekse",      // der Methodenname
                  "sagt: ");
   // ist uebrigens das gleiche wie:
   // static string query_kekse(string key);
   // ...
   // AddInfo(({"keks","kekse"}),
   //         #'query_kekse,          // ein Verweis auf die Methode
   //         "sagt: ");
   ...
   static string query_kekse(string key) {
    if(present("keks"))
     return("Ich hab noch welche. Aetsch!");
    return("Menno. Keine mehr da!");
   }

   // "frage monster nach keks":
   // - wenn es noch Kekse hat, hoeren alle:
   //   "Das Monster sagt: Ich hab noch welche. Aetsch!
   // - sonst:
   //   "Das Monster sagt: "Menno. Keine mehr da!


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

   Verwandt:
      AddInfo(), RemoveInfo()

   Props:
      P_PRE_INFO

   Files:
      /std/npc/info.c

   Loggen:
      P_LOG_INFO

   Interna:
      GetInfoArr() , do_frage()

09.08.2021, Zesstra
