AddInfo()
*********


FUNKTION
========

   public varargs void AddInfo(string|string* key, string|closure
   info,
      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|closure meldung
      Information, die gegeben werden soll; wenn 'meldung' eine
      Closure ist, wird der gerufenen Funktion 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 entsprechende 'meldung' ausgegeben (oder die Closure in
   'meldung' gerufen und der zurueckgegebene Text ausgegeben). Der
   Meldung wird der Name des Monsters vorangestellt.

   Frage:
      Schluesselphrasen muessen kleingeschrieben sein, koennen aber
      Leerzeichen enthalten.

   Meldung:
      Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
      umbrechen.

   Indent:
      Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
      Monsternamen noch das 'indent' vorangesetzt. Ein typisches
      indent ist "sagt: ".

   Silent:
      Bei 'silent'==1 erfolgt keine Textausgabe der Antwortmeldung im
      Raum, ist 'silent' ein String, so wird jener an alle anderen
      Spieler ausser dem Fragesteller im Raum ausgegeben. Dem
      ausgegebenen Text wird der Name des NPCs als Indent
      vorangestellt.

   Casebased:
      Die als Closure angegebene Methode entscheidet, ob oder wie der
      NPC auf diese Frage antworten soll:

      # return 0:    normale Antwort mit "meldung"

      # return 1:    keine Antwort/Antwort mit DEFAULT_NOINFO

      # return string: Antwort mit string unter Beruecksichtigung
      eines indent

   Die Strings von 'silent' und 'meldung' werden geparsed. Dabei
   koennen die @[...]-Tags von replace_personal() verwendet werden,
   Objekt 1 ist this_player(). Ersetzte Strings am Satzanfang werden
   automatisch gross geschrieben. AddInfo() konvertiert die alten
   Schluesselworte @WER, @WESSEN, @WEM, @WEN zu denen von
   replace_personal(), jedoch nicht in den Rueckgabe- werten von
   Closures.

   Mittels der in <npc.h> definierten Frage DEFAULT_INFO kann eine
   Meldung gesetzt werden, die gegeben werden soll, wenn der Spieler
   etwas fragt, auf das keine Antwort vorgegeben ist (das loest
   SetProp(P_DEFAULT_INFO, <text>) ab).


BEISPIELE
=========

   Siehe auch: /doc/beispiele/AddInfo/

   // Beispiel 1: ### eine Standardantwort setzen ###
   AddInfo(DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
   // identisch zu
   // obsolet: SetProp(P_DEFAULT_INFO, "starrt Dir boese in die Augen.\n");

   // Beispiel 2: einfache Beispiele, auch mit casebased
   AddInfo(({"knete","kohle"}),
       "sagt: ich habe so etwas nicht.\n");
   AddInfo("geld",
       "Ich habe zwar kein Geld, aber [...] blablabla [...]",
       "sagt: ");
   AddInfo("muenzen",
       "fluestert: Du willst Geld?\n",
       0,
       "fluestert @WEM1 etwas zu.\n");

   // "frage monster nach geld": alle im Raum hoeren
   //  Das Monster sagt: Ich habe zwar kein Geld, aber [...]
   //  Das Monster sagt: [...] blablabla [...]

   // "frage monster nach muenzen":
   // - der Fragensteller hoert:
   //   "Das Monster fluestert: Du willst Geld?"
   // - alle andere hoeren:
   //   "Das Monster fluestert <Fragenstellernamen> etwas zu."

   // Beispiel 3: dynamisch
   // ein Prototyp, damit wir die Methode bekannt machen
   protected string query_kekse(string key);

   AddInfo(({"keks","kekse"}),
       #'query_kekse,        // ein Verweis auf die Funktion
       "sagt: ");

   protected string query_kekse(string key) {
     if(present("keks", this_object()))
       return("Ich hab noch welche. Aetsch!");
     else if(present("keks", environment()))
       return("Da liegt einer!");
     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!

   // Beispiel 4: dynamischer
   // ein Prototyp, damit wir die Methode bekannt machen
   protected string query_kekse(string key);
   protected mixed case_fighting(string key);

   AddInfo(({"keks","kekse"}),
       #'query_kekse,"        // ein Verweis auf die Funktion
       "sagt: ",
       0,                     // nicht silent :)
       #'case_fighting);      // noch ein Funktionsverweis

   protected string query_kekse(string key) {
     if(present("keks"))
       return("Ich hab noch welche. Aetsch!");
     return("Menno. Keine mehr da!");
   }

   protected mixed case_fighting(string key) {
     if(InFight())
       return("Keine Zeit fuer Kekse. Muss kaempfen.");
     return 0;
   }

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

   // Beispiel 5: ### dynamisch und komplex ###
   // ein Prototyp, damit wir die Methode bekannt machen
   protected string question_gold(string key);

   // "gold" wird eine Closure auf die Methode question_gold()
   // zugewiesen, ausserdem soll es still bleiben (wir informieren
   // den Restraum selbst)
   AddInfo("gold", #'question_gold, "murmelt: ", 1);

   // los gehts, wir generieren unsere Antwort selbst
   protected string question_gold(string key) {
     // wieviel Kohle hat der Spieler
     int money = this_player()->QueryMoney();
     string* valuables = ({});

     // Wertgegenstaende suchen, d.h. Material kein Gold,
     // Objekt kein Geld, und auch nicht unsichtbar
     foreach(object o : deep_inventory(this_player()))
     {
       if ( o->QueryMaterial(MAT_GOLD)>0 &&
            load_name(o) != "/items/money" &&
            o->QueryProp(P_SHORT) &&
            !o->QueryProp(P_INVIS) )
       {
         valuables += ({o->Name(WER,1)});
       }
     }

     // das geht an alle anderen im Raum, silent bietet sich hier
     // nicht an, weil es mehrere Moeglichkeiten gibt
     send_room(environment(),
       sprintf("%s murmelt %s etwas zu%s.",
               Name(WER,1),
               this_player()->name(WEM,1),
               (money || sizeof(valuables))?
                 " und glotzt "+this_player()->QueryPronoun(WEN)+
                 " gierig an" : ""),
       MT_LOOK|MT_LISTEN,
       MA_EMOTE, 0, ({this_player()}));

     // Und hier die Antwort an den Spieler selbst, mit diversen
     // Verzweigungen fuer dessen Besitztum.
     string reply = "Ich hab kein Gold bei mir.";
     string verb = sizeof(valuables) ? "ist" : "sind";
     if ( money )
     {
       reply += " Aber Du hast ja jede Menge Kohle bei dir, so etwa "+
                money+" Muenzen.";
       if ( sizeof(valuables) )
         reply += sprintf(" Ausserdem %s auch noch %s aus Gold.",
                    verb, CountUp(valuables));
     }
     else if ( sizeof(valuables) )
     {
         reply += sprintf(
           " Aber Du hast ja ein paar Wertsachen dabei: %s %s aus Gold.",
           CountUp(valuables), verb);
     }
     return reply;
   }

   // "frage monster nach gold"
   // - der Fragesteller hoert zB:
   //   Das Monster murmelt: Ich hab kein Gold bei mir. Aber Du hast ja
   //   Das Monster murmelt: jede Menge Kohle bei Dir, so etwa <number>
   //   Das Monster murmelt: Muenzen. Ausserdem ist/sind noch <object1>
   //   Das Monster murmelt: und <object2> aus Gold."
   // - die Umstehenden hoeren:
   //   "Das Monster murmelt @WEM1 etwas zu."
   //   oder
   //   "Das Monster murmelt @WEM1 etwas zu und glotzt ihn/sie gierig an."


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

   Verwandt:
      AddSpecialInfo(), RemoveInfo()

   Props:
      P_PRE_INFO

   Files:
      /std/npc/info.c

   Loggen:
      P_LOG_INFO

   Interna:
      GetInfoArr() , do_frage()

09.08.2021, Zesstra
