VERALTET: AddSpecialDetail()

FUNKTION:
    void AddSpecialDetail(string|string* keys, string func);

DEFINIERT IN:
    /std/thing/description.c

ARGUMENTE:
    keys
      String oder Array von Strings mit den Namen der Details.
    func
      String mit dem Namen der Funktion, die zur Auswertung aufgerufen
      wird.

BESCHREIBUNG:
    Es wird ein Detail hinzugefuegt, dessen Inhalt nicht von vornherein
    feststeht, sondern von aeusseren Bedingungen abhaengt. Zu diesem
    Zweck wird immer, wenn dieses Detail untersucht wird, die Funktion
    func aufgerufen, um den aktuellen Zustand des Details zu bestimmen.
    Der Funktion wird als Parameter das Schluesselwort uebergeben, mit
    dem das Detail untersucht wurde.

    VERALTET: Bitte AddDetail mit Closure benutzen.

BEISPIELE:
    Ein zustandsabhaengiges Detail:

      int hebel_betaetigt;
      string hebel(string key);
      ...
      // ALT: AddSpecialDetail( ({ "hebel", "schalter" }), "hebel" );
      AddDetail(({ "hebel", "schalter" }), #'hebel );
      ...
      string hebel(string key)
      { if(hebel_betaetigt)
          return "Der "+capitalize(key)+" steht auf EIN.\n";
        else
          return "Der "+capitalize(key)+" steht auf AUS.\n";
      }

    Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
    ob das Flag hebel_betaetigt gesetzt ist oder nicht.

BEMERKUNG:
    Intern werden Details und SpecialDetails im selben Mapping
    verwaltet.
    Man kann statt dieser Funktion deshalb auch AddDetail mit Closures
    nutzen.

SIEHE AUCH:
    Setzen :   AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
               AddTouchDetail()
    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
               RemoveSounds(), RemoveTouchDetail()
    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
    Veraltet:  RemoveSpecialDetail(), P_READ_MSG
    Sonstiges: GetDetail(), break_string()

20.01.2015, Zesstra

