
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
