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

