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