Sensitive Objekte

Man kann ein Objekt mit der Property P_SENSITIVE dazu veranlassen, auf
gewisse Dinge zu reagieren. Wenn diese Property benutzt wird, sollte sie ein
Array von Arrays enthalten, das so aussieht:

({ ({ ereignis1, key1, grenzwert1 (,Optionen1) }),
   ({ ereignis2, key2, grenzwert2 (,Optionen2) }),
   ...
   ({ ereignisN, keyN, grenzwertN (,OptionenN) }) })

Folgende moegliche Ereignisse sind in <sensitive.h> definiert:

SENSITIVE_ATTACK - reagiert auf Angriff.
     In diesem Fall ist der Key der Schadenstyp und der Grenzwert der
     Schaden, ab dem die Funktion trigger_sensitive_attack() in dem Objekt
     aufgerufen wird. Diese Funktion bekommt uebergeben:
       1. Den Feind
       2. Den Key (nicht ALLE Schadenstypen)
       3. Den Schaden
       4. Das Argument spell von Defend()
       5. Die Optionen, und zwar alles nach dem Grenzwert als Array.

     Bemerkungen:
        o Der Schaden nach Abzug durch Ruestungen und vor Beruecksichtigung
          von Resistenz und Koerperschutz ist ausschlaggebend.
        o Ein Ereignis kann mit verschiedenen Keys mehrfach angegeben
          werden.
SENSITIVE_INVENTORY - reagiert auf bestimmte Objekte im Inventory.
     Ein solches Objekt reagiert auf andere Objekte empfindlich, die
     sensitiv sind und SENSITIVE_INVENTORY_TRIGGER mit dem gleichen Key und
     einem hoeheren Grenzwert ausloesen.

     Es ist dabei egal, welches der beiden Objekte zuerst da war. In einem
     solchen Objekt wird dann die Funktion trigger_sensitive_inv()
     aufgerufen, und zwar mit folgenden Argumenten:
       1. Das ausloesende Objekt (Das mit Ereignis
          SENSITIVE_INVENTORY_TRIGGER)
       2. Der Key
       3. Der Grenzwert des ausloesenden Objekts
       4. Die Optionen des ausloesenden Objekts
       5. Die Optionen des reagierenden Objekts
SENSITIVE_INVENTORY_TRIGGER - siehe oben
     Mit diesem Objekt selber geschieht nichts, es loest nur Funktionen in
     anderen Objekten aus (siehe oben).

In Planung ist noch:

SENSITIVE_ENVIRONMENT_CHANGE (falls im Inventory von Lebewesen)

Die Einsatzmoeglichkeiten sensitiver Objekte sind vielfaeltig:

   * Dynamit koennte jetzt SENSITIVE_ATTACK mit DT_FIRE und z.B. Grenzwert
     150 haben, die Funktion trigger_sensitive_attack() sollte dann z.B. die
     Zuendschnur anzuenden...
   * Bei Nitroglycerin entsprechend mit DT_BLUDGEON, einem sehr kleinen
     Grenzwert und einer trigger_sensitive_attack()-Funktion, die BUMM
     macht...
   * Es soll auch Dinge geben, die man besser NICHT gleichzeitig am gleichen
     Ort aufbewahren sollte... Fuer solche Dinge sind SENSITIVE_INVENTORY
     und SENSITIVE_INVENTORY_TRIGGER da.
   * SENSITIVE_ENVIRONMENT_CHANGE ist dafuer vorgesehen, dass Objekte im
     Inventory empfindlich auf Tauchen oder Aufenthalt an heissen Orten usw.
     reagieren, dies ist jedoch noch in Planung.

----------------------------------------------------------------------------
Last modified: Wed May 8 10:00:28 1996 by Wargon
