blob: 144f7a4e746b85a4a6d8a2536401d4e7c41ffc27 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002P_TMP_DEFEND_HOOK
Zesstra953f9972017-02-18 15:37:36 +01003*****************
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005********************* VERALTETE PROPERTY
6****************************** * Diese Property ist veraltet. Bitte
7nicht mehr in neuem Code nutzen. * **********************************
8************************************* P_TMP_DEFEND_HOOK
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011NAME
12====
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 P_TMP_DEFEND_HOOK "defend_hook"
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017DEFINIERT IN
18============
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstra953f9972017-02-18 15:37:36 +010020 /sys/new_skills.h
MG Mud User88f12472016-06-24 23:31:02 +020021
MG Mud User88f12472016-06-24 23:31:02 +020022
Zesstra953f9972017-02-18 15:37:36 +010023BESCHREIBUNG
24============
MG Mud User88f12472016-06-24 23:31:02 +020025
Zesstra953f9972017-02-18 15:37:36 +010026 Mittels dieser Property koennen die Abwehren eines Livings temporaer
27 veraendert werden.
MG Mud User88f12472016-06-24 23:31:02 +020028
Zesstra953f9972017-02-18 15:37:36 +010029 Es wird an dem Living die Property als mindestens 3-elementiges Array
Arathorn214fd7a2021-01-20 00:27:01 +010030
31 ({int zeitpunkt, object objekt, string methode, ...})
32
Zesstra953f9972017-02-18 15:37:36 +010033 gesetzt und die Methode 'methode' wird dann waehrend des Defend() des
34 Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
MG Mud User88f12472016-06-24 23:31:02 +020035
Zesstra953f9972017-02-18 15:37:36 +010036 Der Methode werden die Parameter der Defend() uebergeben:
Arathorn214fd7a2021-01-20 00:27:01 +010037 int dam, string* dam_type, int|mapping spell, object enemy
Zesstra953f9972017-02-18 15:37:36 +010038 - spell ist definitiv ein Mapping - ein an Defend() uebergebener
39 int-Wert wurde aequivalent umgesetzt.
40 - dam_type ist definitiv ein Array von Schadenswerten oder einem Wert
MG Mud User88f12472016-06-24 23:31:02 +020041
Zesstra953f9972017-02-18 15:37:36 +010042 Zudem findet der Aufruf der Methode nach dem Abarbeiten der P_DEFENDERS
43 statt, diese koennen also weitere Modifikationen vorgenommen haben.
MG Mud User88f12472016-06-24 23:31:02 +020044
Arathorn214fd7a2021-01-20 00:27:01 +010045 Gibt die Methode:
Zesstra953f9972017-02-18 15:37:36 +010046 - 0 zurueck, wird Defend() abgebrochen (und damit der Schaden voellig
47 abgefangen) - nur noch die Flucht wird geprueft
Arathorn214fd7a2021-01-20 00:27:01 +010048 - ein 3-elementiges Array ({dam, dam_type, spell}) zurueck,
Zesstra953f9972017-02-18 15:37:36 +010049 werden diese Werte in der Defend() an Stelle der uebergebenen Werte
50 verwendet
51 - weder noch zurueck, wird das Ergebnis ignoriert und die Defend laeuft
52 regulaer weiter
MG Mud User88f12472016-06-24 23:31:02 +020053
MG Mud User88f12472016-06-24 23:31:02 +020054
Zesstra953f9972017-02-18 15:37:36 +010055BEMERKUNGEN
56===========
MG Mud User88f12472016-06-24 23:31:02 +020057
Zesstra953f9972017-02-18 15:37:36 +010058 - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
Arathorn214fd7a2021-01-20 00:27:01 +010059 - Der korrekte Union-Datentyp fuer die Property ist
60 <int|object|string>* fuer die normale Nutzung mit 3 Elementen.
61 Ein weit verbreiteter Anwendungsfall verwendet 2 weitere Elemente,
62 die vom Typ int und string|string* sind. Alle Stellen, die die Property
63 abfragen, sollten daher den Union-Datentyp <int|object|string|string*>*
64 verwenden. Das Beispiel beruecksichtigt diesen Fall bereits.
65 - Falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
66 Property auf 0 gesetzt.
67 - Vor dem Setzen immer auf die Existenz eines gueltigen Hooks
Zesstra953f9972017-02-18 15:37:36 +010068 pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
Arathorn214fd7a2021-01-20 00:27:01 +010069 im Code anderer und ist andererseits unfair gegenueber ihnen.
Zesstra953f9972017-02-18 15:37:36 +010070
71
72BEISPIEL
73========
74
75 *** ein gruener Schutzzauber ***
Arathorn214fd7a2021-01-20 00:27:01 +010076 // Vor dem Setzen der Prop pruefen, ob schon ein Hook gesetzt ist.
Zesstra953f9972017-02-18 15:37:36 +010077
Arathorn214fd7a2021-01-20 00:27:01 +010078 <int|object|string|string*>* tmp = TP->QueryProp(P_TMP_DEFEND_HOOK);
79
80 // Ein etwas ausfuehrlicherer Check, ob wir ueberschreiben koennen,
81 // Existenz && noch nicht abgelaufen?
82 if(sizeof(tmp) && intp(tmp[0]) && time() < tmp[0]) {
83 write("Der Zauber klappt nicht!\n");
84 }
Zesstra953f9972017-02-18 15:37:36 +010085 else {
Arathorn214fd7a2021-01-20 00:27:01 +010086 // der Zauber gilt eine Stunde
87 TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
88 write("Ein Zauber legt sich auf Dich.\n");
Zesstra953f9972017-02-18 15:37:36 +010089 }
90 ...
91
92 // die gerufene Methode
Arathorn214fd7a2021-01-20 00:27:01 +010093 int|<int|string*|mapping>* abwehrfun(int dam, string* dam_type,
94 mapping spell, object en)
95 {
96 // keine rekursiven Schaeden abfangen ... mindestens ein magischer
97 // muss auch dabei sein
98 if(!spell[SP_RECURSIVE] &&
99 sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
100 // mit 10% Whkeit schuetzt der Zauber total
101 if(!random(10)) {
102 tell_object(previous_object(),
103 "Dein Zauber gleisst rund um Dich gruen auf.\n");
104 tell_room(environment(previous_object()), break_string(
105 previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
106 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
107 ({previous_object()}));
Zesstra953f9972017-02-18 15:37:36 +0100108
Arathorn214fd7a2021-01-20 00:27:01 +0100109 // manchmal geht der Zauber dabei endgueltig kaputt
110 if(!random(10))
111 previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
Zesstra953f9972017-02-18 15:37:36 +0100112
Arathorn214fd7a2021-01-20 00:27:01 +0100113 return 0; // volles Abfangen des Angriffs
114 }
Zesstra953f9972017-02-18 15:37:36 +0100115
Arathorn214fd7a2021-01-20 00:27:01 +0100116 // der Zauber schuetzt auf jeden Fall immer ein bischen
117 tell_object(previous_object(),
118 "Dein Zauber flackert rund um dich gruen auf.\n");
119 tell_room(environment(previous_object()), break_string(
120 previous_object()->Name(WESSEN)+" Haut flackert rund um "+
121 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
122 ({previous_object()}));
123 dam = (7+random(2))*dam/10; // Schaden reduzieren
124
125 return(({dam, dam_type, spell}));
MG Mud User88f12472016-06-24 23:31:02 +0200126 }
127
Arathorn214fd7a2021-01-20 00:27:01 +0100128 // der Zauber schuetzt dann gar nicht ...
129 return 1;
Zesstra953f9972017-02-18 15:37:36 +0100130 }
131
132
133SIEHE AUCH
134==========
135
Arathorn214fd7a2021-01-20 00:27:01 +0100136 Angriff: Attack(L)
137 Schutz: Defend(L)
138 Verwandt: InternalModifyDefend(L), P_TMP_ATTACK_MOD
139 Hooks: P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
Zesstra953f9972017-02-18 15:37:36 +0100140 neue Hooks: std/hooks
MG Mud User88f12472016-06-24 23:31:02 +0200141
Arathorn214fd7a2021-01-20 00:27:01 +010014229.12.2020, Arathorn