GetDetail()
***********


FUNKTION
========

   varargs string GetDetail(string key, string race, int sense)


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

   /std/thing/description.c


ARGUMENTE
=========

   key
     Das zu ermittelnde Detail.
   race
     Rasse des ermittelnden Objektes (falls es ein Lebewesen ist).
   sense
     Die Art des zu untersuchenden Details:
       Untersuchen, Riechen, Hoeren, Tasten.


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

   Die Beschreibung des gewuenschten Details wird ermittelt. Dabei
   werden rassenspezifische Details beruecksichtigt. Es gibt hierbei
   verschiedene Detailarten, deren Typ man in <sense> angibt:
     SENSE_VIEW    - Fuer Defaultdetails zum Untersuchen.
     SENSE_SMELL   - Fuer Details, die man riechen kann.
     SENSE_SOUND   - Fuer Details, die man hoeren kann.
     SENSE_TOUCH   - Fuer Details, die man abtasten kann.
     SENSE_READ    - Fuer Details, die man lesen kann.

   Dabei ist 0 == SENSE_VIEW.


RUeCKGABEWERT
=============

   Die Beschreibung des Details oder 0, wenn es dieses Detail nicht
   gibt.


HINWEIS
=======

   Fuer SENSE_VIEW und SENSE_READ wird die Funktion gar nicht erst
   aufgerufen, wenn der Spieler nichts sehen kann. Das gleiche gilt fuer
   SENSE_SOUND, wenn der Spieler taub ist.


BEISPIEL
========

   Im folgenden wird ein kleines Testdetail generiert:
     AddDetail("test","Das ist ein Test!\n");

   Im folgenden wird das Detail entfernt, wenn es existiert. Dies ist
   eigentlich nicht noetig, da RemoveDetail() damit zurechtkommt, aber
   eventuell sind ja noch weitere Aktionen noetig.
     if(GetDetail("test")) {
       RemoveDetail("test");
       ...
     }

   Einen Geruch kann man folgendermassen erzeugen:
     AddSmells("gold",
       ([0      :"Gold kann man nicht riechen!\n",
         "zwerg":"Deine trainierte Nase riecht es muehelos!\n"]));
   Die Abfrage des Details gestaltet sich recht einfach:
     GetDetail("gold","zwerg",SENSE_SMELL);
   Die Funktion liefert das Detail fuer den Zwerg.
     GetDetail("gold",0,SENSE_SMELL);
   Die Funktion liefert das Detail fuer die restlichen Rassen.
     GetDetail("gold",0,SENSE_SOUND);
   Ein Sounddetail mit dem Namen "gold" existiert nicht, die Funktion
   liefert 0 zurueck.


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

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

27. Jan 2013 Gloinson
