Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc/lfun/DefendFunc

DefendFunc()
************


FUNKTION
========

   public int DefendFunc(string* dtyp, mapping spell, object enemy);


DEFINIERT IN
============

   Eigenen Objekten; fuer /std/armour/combat.c


ARGUMENTE
=========

   dtyp
      Schadenstypen der Angriffsart.

   spell
      Ein Mapping mit weiteren Infos. Bei einem konventionellen
      Angriff ist spell[SP_PHYSICAL_ATTACK] gleich 1.

   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.


RUeCKGABEWERT
=============

   Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.


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

   Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
   zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
   dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
   Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen die
   DefendFuncs nicht konstant wirken. Ausserdem sind solche Ruestungen
   immer genehmigungspflichtig.

   Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
   SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.


BEISPIELE
=========

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

   protected void create()
   {
     ::create();

     SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
     SetProp(P_AC, 20);
     ...
     // Die DefendFunc() ist in der Ruestung selbst definiert
     SetProp(P_DEFEND_FUNC, this_object());
   }

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

     // 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

     // Und jetzt der Geistertest
     if (enemy->QueryProp(P_RACE) == "Geist" ||
         enemy->is_class_member(CL_GHOST))
       prot -= random(10);

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


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


P_DEFEND_FUNC, QueryDefend() /std/armour/combat.c


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.