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

