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 > 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.

   - Wenn eine als Querymethode gesetzte Closure einen String oder
     einen Integer > 0 zurueckgibt, sind die  Auswirkungen identisch
     zu den beiden oben beschriebenen Faellen. Siehe auch Beispiel
     unten.


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 string () {
       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: 2019-Okt-16 by Arathorn
