
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
      Schluesselwoerter, 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 nichts 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 werden
      keine Argumente 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:
      Schluessel 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();

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

   protected string query_kekse() {
     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();
   protected mixed case_fighting();

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

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

   protected mixed case_fighting() {
     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();

   // "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() {
     // 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()

24.09.2020, Arathorn
