blob: 6b86f13670ffecc4528fa46ddc354584662002dc [file] [log] [blame]
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
----------
:doc:`../props/P_DEFEND_FUNC`, :doc:`QueryDefendd`
/std/armour/combat.c