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