SetChats()
==========

FUNKTION
--------
::

	void SetChats(int chance,mixed strs);

DEFINIERT IN
------------
::

	/std/npc/chat.c

ARGUMENTE
---------
::

	chance
	  Prozentuale Wahrscheinlichkeit einer Ausgabe
	strs
	  Stringarray mit den Monsterchats

BESCHREIBUNG
------------
::

	Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat einen
	zufaellig gewaehlten Text aus dem Array <strs> von sich.
	Die Arrayelemente koennen auch Closures oder
	process_string()-Funktionen ("@@func@@") enthalten, die dann
	aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
	 (Fuer keine Ausgabe dann Leerstring "" zurueckgeben!)
	In diesen Funktionen ist this_player() das Monster selbst!
	Fuer Zeilenumbrueche ist immer selbst zu sorgen.

RUECKGABEWERT
-------------
::

	keiner

BEISPIELE
---------
::

	Ein einfaches Beispiel:
	  // Prototype fuer Closure.
	  static string info1();
	  void create()
	  { ...
	    SetChats(20,
	   ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
	     "Der Ork grinst Dich unverschaemt an.\n",
	     "Der Ork wedelt mit seinem Saebel vor Deinem Gesicht herum.\n",
	     "Der Ork droht Dir mit der Faust.\n",
             #'info1,
	     "@@info2@@"}));
          }
	  // Funktion als Closure. Prototype notwendig!
	  static string info1()
	  { if(QueryProp(P_HP)<QueryProp(P_ALIGN))
	      return"Gleich werde ich von hier fliehen!\n";
	    return"";
	  }
	  // Funktion als process_string().
	  string info2()
	  { return QueryProp(P_HP)==QueryProp(P_MAX_HP)?
	 "Der Ork grinst: Mir geht es fantastisch!\n":
	 "Der Ork seufzt: Mir ging es wirklich schon mal besser.\n";
	  }

BEMERKUNGEN
-----------
::

	Im Kampf werden keine Chats ausgegeben. Es ist dann SetAttackChats()
	zu verwenden.
	Funktionen als process_string() sollte man nicht mehr verwenden.
	<chance> wird in der Property P_CHAT_CHANCE abgelegt. Um einen NPC
	voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0 setzen.
  Wenn kein Spieler anwesend ist, haben NPC in der Regel keinen Heartbeat,
  weswegen dann auch die Chats ausgeschaltet sind.
  Spieler koennen NPC 'stillen', d.h. Chats und AttackChats abschalten.

SIEHE AUCH
----------
::

	P_CHAT_CHANCE, SetAttackChats(), process_string()


Last modified: Sat Jan 18 18:48:06 2003 by Patryn

