| 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 |