RemoveSensitiveObject()
***********************


FUNKTION
========

   void RemoveSensitiveObject(object ob)


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

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


ARGUMENTE
=========

   ob - zu entfernendes Objekt


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

   Entfernt ob aus den Benachrichtigungslisten des Containers.
   Wird von thing/moving.c im alten Environment gerufen, wenn
   P_SENSITIVE gesetzt ist.
   Ruft dazu RemoveSensitiveObjectFromList().


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

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


BEISPIEL
========

   // Fackel (inheriting lightsource)
   void create() {
   ...
     SetProp(P_SENSITIVE,
      ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
   ...
   }

   // wenn die Fackel geloescht wird, verliert sie ihre aktive
   // Eigenschaft und muss das dem environment() mitteilen
   static int extinguish(string str) {
    int i;
    i=::extinguish(str);
    if(i && QueryProp(P_LIGHT)<=0) {
     SetProp(P_SENSITIVE,0);
     if(environment())
      environment()->RemoveSensitiveObject(this_object());
    }
    return i;
   }

   - empfindliche Objekte wie Eiszapfen koennen jetzt wieder gefahrlos
     in das selbe environment() bewegt werden


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

   P_SENSITIVE
   InsertSensitiveObject
   insert_sensitive_inv_trigger, insert_sensitive_inv
   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
   CheckSensitiveAttack

25.Apr.2001, Gloinson@MG
