
SetAttackChats()
****************


FUNKTION
========

   void SetAttackChats(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' einen zufaellig
   gewaehlten Text aus 'strs' von sich. Die Arrayelemente koennen
   auch Funktionen ("@@func@@") oder Closures enthalten, die dann
   aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.


RUECKGABEWERT
=============

   keiner


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

   AttackChats werden nur im Kampf ausgegeben. Ansonsten ist SetChats()
   zu verwenden.



   'chance' wird in der Property P_ACHAT_CHANCE abgelegt. Um einen NPC
   voruebergehend 'stillzulegen', kann man P_ACHAT_CHANCE auf 0 setzen.



   Man kann AttackChats nutzen, um Monsterspells zu realisieren. Besser
   ist es aber, dafuer 'AddSpell' zu verwenden.


BEISPIELE
=========

   SetAttackChats( 20,
     ({ "Der Ork tritt Dir in den Hintern.\n",
        "Der Ork bruellt: Lebend kommst Du hier nicht raus!\n",
        "Der Ork blutet schon aus mehreren Wunden.\n",
        "@@knirsch@@" }) );



   string knirsch()
   {
     object *ruestung, *tmp, helm;



     ruestung = this_player()->QueryProp(P_ARMOURS); // getragene Ruestung
     tmp = filter_objects(ruestung, "id", AT_HELMET);
     // Wenn der Spieler einen Helm traegt, enthaelt 'tmp' jetzt
     // ein Array mit dem Helmobjekt als einzigem Element
     if (sizeof(tmp)) helm = tmp[0];
       if (objectp(helm))
       {
         // AC nur dann senken, wenn sie nicht schon 0 ist.
         if (helm->QueryProp(P_AC)>0) {
           helm->Damage(1);
           return "Der Ork beschaedigt Deinen Helm!\n";
         }
         return "";
       }
       else
         return ""; // keine Meldung
   }


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

   P_ACHAT_CHANCE, SetChats(), /std/npc/chat.c, AddSpell()


LETZTE AENDERUNG
================

   Don, 27.12.2007, 16:35:00 von Arathorn
