AddReadDetail()
***************


FUNKTION
========

   void AddReadDetail(string|string*keys,
                      string|string*|mapping|closure desc);


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

   /std/thing/description.c


ARGUMENTE
=========

   keys
     String oder Array von Strings mit den Namen der Details.
   desc
     String, Mapping, String-Array oder Closure mit/zur Beschreibung.


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

   Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
   beim Lesen ausgegeben werden, haengt im wesentlichen vom Typ der
   Beschreibung <desc> ab:
     <desc> ist ein String.
      Beim Lesen wird dieser String zurueckgegeben.
     <desc> ist ein String-Array.
      Beim Lesen wird zufaellig einer der Strings zurueckgegeben.
     <desc> ist ein Mapping.
       Das Mapping muss folgenden Aufbau haben:
         ([0:        "Defaulttext",
           "rasse1": "r1text", ...]).

       Falls fuer die Rasse des das Detail untersuchenden Spielers ein
       Eintrag im Mapping existiert, wird der entsprechende Text
       zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
       rassenabhaengige Texte moeglich.
     <desc> ist eine Closure.
       In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
       zurueckgegeben. Die Closure bekommt dabei den Namen des Details
       als Parameter uebergeben.

   Fuer lesbare Details koennen Forscherpunkte eingetragen werden.

   Will man ein lesbares Detail an einem Objekt haben, welches der Spieler
   mit "lies <id>" (<id> ist eine ID des Objekts) bekommt, muss man ein
   Detail SENSE_DEFAULT hinzufuegen.
   (Ein Detail "<id>" hinzuzufuegen, hat einen ganz anderes Effekt! Dieses
    wuerde vom Spieler mit "lies <id> an <id>" gelesen werden und ist
    meistens nicht das, was gewuenscht wird.)


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

   (1) Auf die 'desc' wird kein process_string() mehr angewendet.
       Bitte stattdessen lfun closures bzw. 'inline closures'
       verwenden.

   (2) Im Gegensatz zum Verhalten von AddTouchDetail(), AddSmells() und
       AddSounds() wirkt ein SENSE_DEFAULT-Detail in einem Raum nicht.
       Ein einfaches "lies" bleibt dann ohne Rueckgabewert.


BEISPIELE
=========

   AddReadDetail( ({ "schild" }),
     "BETRETEN STRENGSTENS VERBOTEN!\n" );

   AddReadDetail("inschrift",
                 ([0: "Dort steht: Ein Ring sie zu binden. ....\n",
                   "elf": "Alles in dir straeubt sich, DAS DA zu lesen.\n"]));

   AddReadDetail("regeln",
     function string() {
       this_player()->More("/etc/WIZRULES", 1);
       return "";
     });


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

   Setzen:    AddDetail(), AddSmells(), AddSounds(),
              AddTouchDetail()
   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
              RemoveSounds(), RemoveTouchDetail()
   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
   Sonstiges: GetDetail(), break_string()

20.01.2015, Zesstra
