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
