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