
RemoveTouchDetail()
*******************


FUNKTION
========

   void RemoveTouchDetail(string|string* keys);


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

   /std/thing/description.c


ARGUMENTE
=========

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


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

   Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,
   nur koennen hiermit (ab)tastbare Details entfernt werden:
   Entfernt die in <keys> angegebenen Details aus der Liste der
   vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
   saemtliche tastbaren/fuehlbaren Details entfernt!


BEISPIEL
========

   Zuerst wird ein Detail "boden" erzeugt, das abgetastet werden kann.
   Dieses kann durch Betaetigen eines Knopfes, aeh, entfernt werden.

     int knopf();
     void knopf2();

     AddTouchDetail("boden", "Er ist aus Stein.\n");
     AddCmd("drueck|druecke&knopf", #'knopf, "Was willst du druecken?");

     void knopf() {
       tell_room(this_object(), break_string(
         this_player()->Name(WER)+" drueckt einen Knopf, der dabei satt "+
         "klackt.", 78));

       if(find_call_out(#'knopf2)<=0)
         call_out(#'knopf2, 1);
     }



     void knopf2() {
       tell_room(this_object(), "Uhoh. Der Boden klappt weg. Du faellst.");
       RemoveTouchDetails("boden");
     }


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

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