blob: 5338a9ff8f335bc5f45a00872c5cbe8258c0c6f9 [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
==========
P_DEFEND_FUNC, *QueryDefendd* /std/armour/combat.c