blob: f29d342f917c372bd65e74023e19ce21ba0208be [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
30 ({zeitpunkt, objekt, methode, ...})
31 gesetzt und die Methode 'methode' wird dann waehrend des Defend() des
32 Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
MG Mud User88f12472016-06-24 23:31:02 +020033
Zesstra953f9972017-02-18 15:37:36 +010034 Der Methode werden die Parameter der Defend() uebergeben:
35 int dam, mixed dam_type, mixed spell, object enemy
36 - spell ist definitiv ein Mapping - ein an Defend() uebergebener
37 int-Wert wurde aequivalent umgesetzt.
38 - dam_type ist definitiv ein Array von Schadenswerten oder einem Wert
MG Mud User88f12472016-06-24 23:31:02 +020039
Zesstra953f9972017-02-18 15:37:36 +010040 Zudem findet der Aufruf der Methode nach dem Abarbeiten der P_DEFENDERS
41 statt, diese koennen also weitere Modifikationen vorgenommen haben.
MG Mud User88f12472016-06-24 23:31:02 +020042
Zesstra953f9972017-02-18 15:37:36 +010043 Gibt die Funktion:
44 - 0 zurueck, wird Defend() abgebrochen (und damit der Schaden voellig
45 abgefangen) - nur noch die Flucht wird geprueft
46 - ein 3-elementiges Array ({schaden, schadenstypen, spell}) zurueck,
47 werden diese Werte in der Defend() an Stelle der uebergebenen Werte
48 verwendet
49 - weder noch zurueck, wird das Ergebnis ignoriert und die Defend laeuft
50 regulaer weiter
MG Mud User88f12472016-06-24 23:31:02 +020051
MG Mud User88f12472016-06-24 23:31:02 +020052
Zesstra953f9972017-02-18 15:37:36 +010053BEMERKUNGEN
54===========
MG Mud User88f12472016-06-24 23:31:02 +020055
Zesstra953f9972017-02-18 15:37:36 +010056 - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
57 - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
58 Property auf 0 gesetzt
59 - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
60 pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
61 im Code anderer und ist andererseits unfair gegenueber ihnen
62
63
64BEISPIEL
65========
66
67 *** ein gruener Schutzzauber ***
68 // Setzen der Prop
69 ...
70 tmp=TP->QueryProp(P_TMP_DEFEND_HOOK);
71
72 // ein etwas ausfuehrlicher Check, ob wir ueberschreiben koennen,
73 // Existenz && Gueltigkeit
74 if(pointerp(tmp) && sizeof(tmp) && intp(tmp[0]) && (time()<tmp[0]))
75 write("Der Zauber klappt nicht!\n");
76 else {
77 // der Zauber gilt eine Stunde
78 TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
79 write("Ein Zauber legt sich auf dich.\n");
80 }
81 ...
82
83 // die gerufene Methode
84 mixed abwehrfun(int dam, string* dam_type, mapping spell, object en) {
85 // keine rekursiven Schaeden abfangen ... mindestens ein magischer
86 // muss auch dabei sein
87 if((!mappingp(spell) || !spell[SP_RECURSIVE]) &&
88 sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
89
90 // mit 10% Whkeit schuetzt der Zauber total
91 if(!random(10)) {
92 tell_object(previous_object(),
93 "Dein Zauber gleisst rund um dich gruen auf.\n");
94 tell_room(environment(previous_object()), break_string(
95 previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
96 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
97 ({previous_object()}));
98
99 // manchmal geht der Zauber dabei endgueltig kaputt
100 if(!random(10)) previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
101
102 return 0; // volles Abfangen des Angriffs
MG Mud User88f12472016-06-24 23:31:02 +0200103 }
104
Zesstra953f9972017-02-18 15:37:36 +0100105 // der Zauber schuetzt auf jeden Fall immer ein bischen
106 tell_object(previous_object(),
107 "Dein Zauber flackert rund um dich gruen auf.\n");
108 tell_room(environment(previous_object()), break_string(
109 previous_object()->Name(WESSEN)+" Haut flackert rund um "+
110 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
111 ({previous_object()}));
112 dam=(7+random(2))*dam/10; // Schaden reduzieren
113
114 return(({dam, dam_type, spell}));
115 }
116
117 // der Zauber schuetzt dann gar nicht ...
118 return 1;
119 }
120
121
122SIEHE AUCH
123==========
124
125 Angriff: Attack(L)
126 Schutz: Defend(L)
127 Verwandt: InternalModifyDefend(L), P_TMP_ATTACK_MOD
128 Hooks: P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
129 neue Hooks: std/hooks
MG Mud User88f12472016-06-24 23:31:02 +0200130
13108.12.2008, Zesstra