
RemoveDetail()
**************


FUNKTION
========

   void RemoveDetail(mixed *keys);


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

   /std/thing/description.c


ARGUMENTE
=========

   keys
     String oder Array von Strings mit den zu entfernenden Details.


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

   Entfernt die in <keys> angegebenen Details aus der Liste der
   vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
   saemtliche Details entfernt!


BEISPIEL
========

   Ein kleines Beispiel, bei dem eine Oeffnung erscheint und wieder
   verschwindet, je nachdem, ob man eine Luke oeffnet oder schliesst.
     int oeffneLuke(string str);
     int schliesseLuke(string str);
     ...
     AddCmd("oeffne", #'oeffneLuke);
     AddCmd("schliesse", #'schliesseLuke);
     ...
     int oeffneLuke(string str) {
       if(str!="luke" || GetDetail("oeffnung"))
         return 0;
       AddDetail("oeffnung","Du siehst eine kleine Oeffnung.\n");
       return 1;
     }

     int schliesseLuke(string str) {
       if(str!="luke" || !GetDetail("oeffnung"))
         return 0;
       RemoveDetail("oeffnung"); // Detail wieder entfernen
       return 1;
     }


BEMERKUNGEN
===========

   Da intern Details und SpecialDetails im gleichen Mapping verwaltet
   werden, lassen sich mit dieser Funktion auch SpecialDetails
   entfernen.
   Die Funktion RemoveSpecialDetail() sollte also nicht genutzt werden!


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

   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
              AddTouchDetail()
   Loeschen:  RemoveReadDetail(), RemoveSmells(),
              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: GetDetail(), break_string()

8. Juli 2011 Gloinson
