blob: 7043e044a6ba657510fd1c0132732e97ba8737a8 [file] [log] [blame]
DefendFunc(L)
FUNKTION:
int DefendFunc(string|string *dtyp, int|mappingspell, object enemy);
DEFINIERT IN:
eigenen Objekten; fuer /std/armour/combat.c
ARGUMENTE:
dtyp
Schadenstypen der Angriffsart.
Sollte heute ein string* sein.
spell
0 bei veralteten konventionellen Angriffen im Regelfall jedoch
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.
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:
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());
}
int DefendFunc(string *dtyp, mixed 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
----------------------------------------------------------------------------
Last modified: 18.Jul 2006 Muadib