Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 1 | DefendFunc() |
| 2 | ============ |
| 3 | |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 4 | FUNKTION |
| 5 | -------- |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 6 | |
heull001 | 4041d7a | 2017-08-23 21:50:30 +0200 | [diff] [blame] | 7 | public int DefendFunc(string* dtyp, mapping spell, object enemy); |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 8 | |
| 9 | DEFINIERT IN |
| 10 | ------------ |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 11 | |
heull001 | 4041d7a | 2017-08-23 21:50:30 +0200 | [diff] [blame] | 12 | Eigenen Objekten; fuer /std/armour/combat.c |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 13 | |
| 14 | ARGUMENTE |
| 15 | --------- |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 16 | |
| 17 | dtyp |
| 18 | Schadenstypen der Angriffsart. |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 19 | spell |
heull001 | 4041d7a | 2017-08-23 21:50:30 +0200 | [diff] [blame] | 20 | Ein Mapping mit weiteren Infos. |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 21 | Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich |
| 22 | 1. |
| 23 | enemy |
| 24 | Der angreifende Gegner |
| 25 | |
| 26 | BESCHREIBUNG |
| 27 | ------------ |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 28 | |
| 29 | Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder |
| 30 | auch ein Ruestungsmalus) errechnet werden, der zu dem normalen |
| 31 | Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird. |
| 32 | |
| 33 | RUeCKGABEWERT |
| 34 | ------------- |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 35 | |
| 36 | Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll. |
| 37 | |
| 38 | BEMERKUNGEN |
| 39 | ----------- |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 40 | |
| 41 | Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert |
| 42 | zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch- |
| 43 | dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen |
| 44 | Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen |
| 45 | die DefendFuncs nicht konstant wirken. |
heull001 | 4041d7a | 2017-08-23 21:50:30 +0200 | [diff] [blame] | 46 | Ausserdem sind solche Ruestungen immer genehmigungspflichtig. |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 47 | |
| 48 | Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und |
| 49 | SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen. |
| 50 | |
| 51 | BEISPIELE |
| 52 | --------- |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 53 | |
| 54 | Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet |
| 55 | und bei Angriffen durch Geister geschwaecht wird: |
| 56 | |
heull001 | 4041d7a | 2017-08-23 21:50:30 +0200 | [diff] [blame] | 57 | protected void create() |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 58 | { |
| 59 | ::create(); |
| 60 | |
| 61 | SetProp(P_ARMOUR_TYPE, AT_ARMOUR); |
| 62 | SetProp(P_AC, 20); |
| 63 | ... |
| 64 | // Die DefendFunc() ist in der Ruestung selbst definiert |
| 65 | SetProp(P_DEFEND_FUNC, this_object()); |
| 66 | } |
| 67 | |
heull001 | 4041d7a | 2017-08-23 21:50:30 +0200 | [diff] [blame] | 68 | public int DefendFunc(string* dtyp, mapping spell, object enemy) |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 69 | { |
| 70 | int prot; |
| 71 | |
| 72 | // Zuerst fragen wir den Angriff durch Feuer ab: |
| 73 | if (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den Schadenstypen |
| 74 | prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC |
| 75 | // kommt man also maximal auf 14+20 = 34, |
| 76 | // liegt also unter der fuer AT_ARMOUR |
| 77 | // geltenden Obergrenze |
| 78 | |
| 79 | // Und jetzt der Geistertest |
| 80 | if (enemy->QueryProp(P_RACE) == "Geist" || |
| 81 | enemy->is_class_member(CL_GHOST)) |
| 82 | prot -= random(10); |
| 83 | |
| 84 | // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen |
| 85 | return prot; |
| 86 | } |
| 87 | |
| 88 | SIEHE AUCH |
| 89 | ---------- |
Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 90 | |
heull001 | 4041d7a | 2017-08-23 21:50:30 +0200 | [diff] [blame] | 91 | :doc:`../props/P_DEFEND_FUNC`, :doc:`QueryDefendd` |
| 92 | /std/armour/combat.c |