Lpc Manpages

DefendFunc()

FUNKTION:
     int DefendFunc(string *dtyp, mixed spell, object enemy);

DEFINIERT IN:
     eigenen Objekten; fuer /std/armour/combat.c

ARGUMENTE:
     dtyp
          Schadenstypen der Angriffsart (siehe /sys/combat.h>
     spell
          0 bei konventinellem Angriff, Mapping mit weiteren Infos bei
          Angriff per Zauberspruch.
     enemy
          Der angreifende Gegner

BESCHREIBUNG:
     Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
     auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
     Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
     Die DefendFunc wird mit der Propertie P_DEFEND_FUNC eingetragen.

RUECKGABEWERT:
     Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.

BEMERKUNGEN:
     Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
     insgesamt nicht groesser werden als der fuer den Ruestungstyp maximal
     zulaessige!
     
DOKUMENTIERT:
     08.05.1996 von Wargon@MorgenGrauen
     08.08.1996 modifiziert von Mupfel
     26.08.1996 modifiziert von Mupfel

BEISPIELE:
     Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
     und bei Angriffen durch Geister geschwaecht wird:

     inherit "std/armour";

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

     create()
     {
       ::create();

       SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
       SetProp(P_AC, 20);
       ...  /* Weitere SetProp's, um das Aussehen zu definieren */

       /* Die DefendFunc() ist in der Ruestung selbst definiert */
       SetProp(P_DEFEND_FUNC, this_object());
     }

     int DefendFunc(string *dtyp, mixed spell, object enemy)
     {
       int prot;

       prot = 0;

       /* Zuerst fragen wir den Angriff durch Feuer ab: */
       if (member(dtyp, DT_FIRE) >= 0)   /* Feuer gehoert zu den Schadenstypen */
         prot = 5 + random(10);  /* Das ergibt maximal 14. Zusammen mit P_AC
                                    kommt man also maximal auf 14+20 = 34,
                                    liegt also unter der fuer AT_ARMOUR geltenden
                                    Obergrenze von 40 */

       /* Und jetzt der Geistertest (einfach per Rasse): */
       if (enemy->QueryProp(P_RACE) == "Geist")
         prot -= random(10);

       /* Der Rueckgabewert wird auf den aus P_AC errechneten Wert
          draufgeschlagen. */
       return prot;
     }

SIEHE AUCH:
     SetDefendFunc(), QueryDefend(), P_DEFEND_FUNC, P_DAM_TYPE,
     /std/armour/combat.c