Morgengrauner Dokumentation
Dateipfad: /home/mud/mudlib/doc/lfun/DefendFuncDefendFunc()
************
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