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