
InsertSensitiveObject()
***********************


FUNKTION
========

   void InsertSensitiveObject(object ob, mixed *arg)


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

   /std/container/inventory.c
   generalizes /std/living/inventory.c


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

   Fuegt "ob" in die Benachrichtigungslisten des Containers ein.
   Wird von thing/moving.c im Ziel-Environment gerufen, wenn
   P_SENSITIVE gesetzt ist.


BEMERKUNGEN
===========

   Setzt man P_SENSITIVE nicht als Default sondern situationsabhaengig,
   dann muss man auch InsertSensitiveObject() im Environment
   auch selbst rufen!


BEISPIEL
========

   // Fackel (inheriting lightsource)
   // wenn angezuendet, aendert es die Eigenschaften und wird zum
   // aktiven Objekt - das muss man dem environment() mitteilen
   static int light(string str) {
    int i;
    i=::light(str);
    if(i && QueryProp(P_LIGHT)>0) {
     SetProp(P_SENSITIVE,
      ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
     if(environment())
      environment()->InsertSensitiveObject(this_object(),
                                           QueryProp(P_SENSITIVE));
    }
    return i;
   }

   - falls ein empfindliches Objekt im environment() ist, dann wird
     in diesem nun eventuell (Treshold) trigger_sensitive_inv()
     gerufen


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

   P_SENSITIVE
   RemoveSensitiveObject
   insert_sensitive_inv_trigger, insert_sensitive_inv
   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
   CheckSensitiveAttack

25.Apr.2001, Gloinson@MG
