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:`QueryDefend` /std/armour/combat.c