
give_notify()
*************


FUNKTION
========

   void give_notify(object obj);


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

   /std/npc/put_and_get.c


ARGUMENTE
=========

   obj
     an den NPC uebergebenes Objekt


RUeCKGABEWERT
=============

   keiner


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

   Diese Funktion wird automatisch immer dann aufgerufen, wenn ein
   Lebewesen (welches kein Spielercharakter ist) ein Objekt uebergeben
   bekommt. Dies muss jedoch ueber die Funktionalitaet von
   put_and_get.c geschehen sein, innerhalb von move() wird die Funktion
   nicht aufgerufen!


BEISPIEL
========

   Oftmals will man in Quests erreichen, dass einem NPC ein bestimmtes
   Item als Beweis der Erfuellung einer bestimmten Aufgabe ueberbracht
   wird. Folgendermasse kann dies realisiert werden:
   void create() {
     ::create();
     ...
     SetProp(P_REJECT,({REJECT_GIVE,
       Name(WER)+" sagt: Das brauche ich nicht!\n"}));
     ...
   }

   void quest_ok(object obj) { ...
     // Vernichtung des Questobjektes und Questtexte
     // Questbelohnung und Questanerkennung
   }

   void give_notify(object obj) {
     if(obj->id("\nquestitem")) // Questitem bekommen?
       quest_ok(obj);
     else
       ::give_notify(obj);  // P_REJECT soll sonst greifen
   }
   Der Aufruf von ::give_notify() stellt sicher, dass ein Objekt
   zurueckgegeben wird, sofern es nicht das gesuchte ist. Erreicht wird
   dies ueber P_REJECT (siehe Bemerkungen).


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

   Speziell in NPCs ist diese Funktion normalerweise dafuer
   verantwortlich, dass mittels der Property P_REJECT die Annahme von
   Objekten verweigert werden kann. Ueberschreibt man sie, so sollte
   man gegebenenfalls darauf achten, dass diese Standardfunktion
   ebenfalls aufgerufen wird.


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

   P_REJECT, show_notify(),
   /std/npc/put_and_get.c, /std/living/put_and_get.c

22. Oktober 2013, Arathorn.
