********************* OBSOLETE LFUN ***********************************
* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
* Hooks (s. /doc/std/hooks).                                          *
***********************************************************************
AddInsertHook()

FUNKTION:
     void AddInsertHook(object ob);

DEFINIERT IN:
     /std/player/restrictions.c

ARGUMENTE:
     ob - Das Objekt, das informiert werden soll, wenn ein Objekt dem
          Spielerinventar hinzugefuegt wurde.

BESCHREIBUNG:
     (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
      H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
      vorhanden.)

     Diese Funktion wird im Spielerobjekt aufgerufen, um das Objekt ob als
     Hook-Listener anzumelden. Auf diese Weise eingetragene Listener
     werden informiert, wenn ein Objekt ins Spielerinventar bewegt wurde.
     Technisch wird die Bewegung ueber NotifyInsert() im Spielerobjekt
     detektiert, und im Listener-Objekt wird die Funktion InsertNotify()
     gerufen, die als Parameter das neu ins Spielerinventar bewegte Objekt
     uebergeben bekommt.

RUeCKGABEWERT:
     keiner

BEMERKUNGEN:
     Das Listener-Objekt muss sich ebenfalls im Spielerinventar befinden,
     ansonsten wird der eingetragene Hook wieder geloescht.

BEISPIEL:
     
     a) Objekt "ob" wird im Spieler als Listener angemeldet:
        this_player()->AddInsertHook(ob);

     b) Objekt "new" wird ins Spielerinventar bewegt, das Spielerobjekt
        informiert "ob" darueber:
        ob->InsertNotify(new);

     c) Das Listener-Objekt "ob" reagiert darauf, z.B. indem es die Fackel
        loescht, sofern sie vorher brannte:
        void InsertNotify(object new) {
          if ( objectp(new) && new->id("\nfackel") && 
               new->QueryProp(P_LIGHTED) )
            new->unlight();
          return;
        }

SIEHE AUCH:
    NotifyInsert(), RemoveInsertHook(), QueryInsertHooks()

----------------------------------------------------------------------------
Last modified: 14.04.2010, Arathorn
