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