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
