AddTouchDetail()

FUNKTION:
    void AddTouchDetail(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:
    Diese Funktion entspricht dem AddDetail() fuer Standarddetails, nur
    koennen hiermit (ab)tastbare bzw. fuehlbare Details realisiert werden:
    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
    beim (Ab)Tasten aussehen, haengt im wesentlichen vom Typ der
    Beschreibung <desc> ab:
     <desc> ist ein String.
       Beim Untersuchen wird dieser String zurueckgegeben.
      <desc> ist ein String-Array.
        Beim Untersuchen 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 Details moeglich. Siehe auch die Beispiele.
     <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 fuehlbare Details koennen Forscherpunkte eingetragen werden.

    Fuehlbare Details koennen allgemein einen Raum oder Objekt zugeordnet
    werden: dafuer muss man als <key> SENSE_DEFAULT uebergeben.

    Spielerkommandos: "taste"

BEISPIELE:
    Ein kleines Beispiel fuer rassenabhaengige, fuehlbare Details mit Closures:
      string strafe(string key);
      ...
      AddTouchDetail(SENSE_DEFAULT, "Du fuehlst einige Knollen\n");
      AddTouchDetail(({"knollen"}),
                     ([0:       "Sie fuehlen sich an wie Knoblauchknollen. "
                                "Riech doch mal daran.\n",
                       "vampir": #'strafe]));

      string strafe(string key) {
        this_player()->reduce_hit_points(100);
        return "Au! Das waren ja Knoblauchknollen!\n";
      }

SIEHE AUCH:
    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds()
    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

