
P_PRE_INFO
**********


NAME
====

   P_PRE_INFO                        "npc_pre_info"


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

   /sys/npc.h


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

   Ist die Property in einem NPC definiert, so wird ihr Ergebnis
   ausgewertet, bevor eine Frage an das Infosystem uebergeben wird.



   Moegliche Werte:
   - numerischer Wert ungleich 0
     => der NPC gibt _keinerlei_ Antwort, die Frage fuehrt sozusagen
        ins Leere

   - Stringwert
     => wird als Rueckgabe an den Fragenden ausgegeben, umstehende
        Personen bekommen den Text:
       "XY ist nicht gewillt, Spieler YZ zu antworten".
       Der Fragende selbst bekommt bei angegebenem Stringwert:
       "XY " + Stringwert.

   - Closure
     => die Antwort bzw. Reaktion des NPCs obliegt ganz der
        angegebenen Closure. Diese muss dabei einen String oder
        Ganzzahlen-Wert zurueckgeben


BEISPIEL
========

   Ein NPC der manchmal herumrennt, um z.B. eine Aufgabe zu verrichten,
   koennte so lange Chats abschalten, z.B.

     SetProp(P_CHAT_CHANCE,0); // NPC latscht los



   Und eine Weile spaeter:



     SetProp(P_CHAT_CHANCE,5); // NPC ruht wieder, quasselt rum



   Waehrend des Herumlaufens, also wenn er nicht automatisch schwatzt,
   soll er auch keinerlei Fragen beantworten:



     Set(P_PRE_INFO, function mixed () {
       return (QueryProp(P_CHAT_CHANCE) ? 0 :
         "hat gerade keine Zeit fuer Dich.");
       }, F_QUERY_METHOD);


HINWEISE
========

   Bitte beachten, dass der interne Name der Property "npc_pre_info"
   ist und somit nur das Ueberschreiben von _query_npc_pre_info()
   funktioniert.


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

   AddInfo(), /std/npc/info.c

Last modified: 01.03.2016 by Arathorn
