TakeFlaw()
==========

FUNKTION
--------
::

     varargs void TakeFlaw(object enemy); (Waffen)
     varargs void TakeFlaw(mixed dam_types,mapping einfos) (Ruestungen)

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

     /std/armour/combat.c,
     /std/weapon/combat.c

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

     keine

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

     Diese Funktion wird in Waffen und Ruestungen waehrend des Kampfes
     aufgerufen. In einer Waffe erfolgt der Aufruf bei jedem Schlag mit
     dieser Waffe, bei Ruestungen wird TakeFlaw() in einer zufaellig
     ausgewaehlten getragenen Ruestung aufgerufen.
     Waffen bekommen das Gegnerobjekt uebergeben, Ruestungen die erweiterten
     DefendInfos (s. dort fuer Details). Aufgrund dieser Informationen kann
     man den Schaden, den ein Gegenstand nimmt, flexibler gestalten (z.B. bei
     einer Waffe in Abhaengigkeit von P_BODY des Gegners.)

     Soweit man die Funktion nicht ueberlaedt, bewirkt sie nichts weiter als
     das Erhoehen eines Zaehlers, der mit QueryFlaw() abgefragt werden kann.

RUeCKGABEWERT
-------------
::

     keiner

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

     Die Waffen-/ Ruestungsklasse wird nicht automatisch reduziert! Wenn
     eine Waffe oder Ruestung sich abnutzen soll, muss man TakeFlaw()
     ueberladen und dort entsprechend handeln, oder (fuer einfache
     Faelle) die Property P_QUALITY setzen.

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

     Eine Waffe, deren Waffenklasse alle 20 Schlaege um 1 abnimmt:

     inherit "std/weapon";

     #include <properties.h>
     #include <combat.h>

     create()
     {
       /* Das Uebliche... */
     }

     TakeFlaw()
     {
       int flaw;

       /* erst mal den Zaehler erhoehen... */
       ::TakeFlaw();

       /* jetzt den aktuellen Zaehlerstand abfragen */
       flaw = QueryFlaw()[0];

       /* Abzug nur jeden 20. Schlag */
       if (!(flaw % 20)) {
         /* So, jetzt fuer den Schaden sorgen. Hierfuer benutzt */
         /* man am sichersten die eingebaute Funktion Damage() */
         Damage(1);
       }
     }

     Dieses einfache Beispiel haette natuerlich auch ueber ein
     SetProp(P_QUALITY,20); im create() realisiert werden koennen.

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

     QueryFlaw(), Damage(), DefendInfo, P_QUIALITY, /std/armour/combat.c,
     /std/weapon/combat.c


Last modified: Thu May 22 10:30:10 1997 by Paracelsus

