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

