AddSmells()

FUNKTION:
    void AddSmells(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 Gerueche realisiert werden:
    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
    bei der Untersuchung 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 Geruchsdetails koennen Forscherpunkte eingetragen werden.

    Gerueche koennen allgemein einen Raum oder Objekt zugeordnet werden:
    dafuer muss man als <key> SENSE_DEFAULT uebergeben.
    
    Spielerkommandos: "riech", "rieche", "schnupper", "schnuppere"

BEISPIELE:
    Ein kleines Beispiel fuer rassenabhaengige Gerueche mit Closures:
      string strafe(string key);
      ...
      AddSmells(SENSE_DEFAULT,
        "Der Geruch von Knoblauch ist ueberwaeltigend!\n");
      AddSmells(({"knoblauch","geruch"}),
                ([0:        "Puhh, das stinkt!\n",
                  "vampir": #'strafe]));
      ...
      string strafe(string key) {
        this_player()->reduce_hit_points(100);
        return "Der Knoblauch schmerzt dich furchtbar!\n";
      }

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

