blob: 986e63ae1da40feb662b96abdc3e82767e1baf3f [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001********************* VERALTETE PROPERTY ******************************
2* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
3***********************************************************************
4P_TMP_DEFEND_HOOK
5
6NAME:
7 P_TMP_DEFEND_HOOK "defend_hook"
8
9DEFINIERT IN:
10 /sys/new_skills.h
11
12BESCHREIBUNG:
13 Mittels dieser Property koennen die Abwehren eines Livings temporaer
14 veraendert werden.
15
16 Es wird an dem Living die Property als mindestens 3-elementiges Array
17 ({zeitpunkt, objekt, methode, ...})
18 gesetzt und die Methode 'methode' wird dann waehrend des Defend() des
19 Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
20
21 Der Methode werden die Parameter der Defend() uebergeben:
22 int dam, mixed dam_type, mixed spell, object enemy
23 - spell ist definitiv ein Mapping - ein an Defend() uebergebener
24 int-Wert wurde aequivalent umgesetzt.
25 - dam_type ist definitiv ein Array von Schadenswerten oder einem Wert
26
27 Zudem findet der Aufruf der Methode nach dem Abarbeiten der P_DEFENDERS
28 statt, diese koennen also weitere Modifikationen vorgenommen haben.
29
30 Gibt die Funktion:
31 - 0 zurueck, wird Defend() abgebrochen (und damit der Schaden voellig
32 abgefangen) - nur noch die Flucht wird geprueft
33 - ein 3-elementiges Array ({schaden, schadenstypen, spell}) zurueck,
34 werden diese Werte in der Defend() an Stelle der uebergebenen Werte
35 verwendet
36 - weder noch zurueck, wird das Ergebnis ignoriert und die Defend laeuft
37 regulaer weiter
38
39BEMERKUNGEN:
40 - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
41 - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
42 Property auf 0 gesetzt
43 - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
44 pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
45 im Code anderer und ist andererseits unfair gegenueber ihnen
46
47BEISPIEL:
48 *** ein gruener Schutzzauber ***
49 // Setzen der Prop
50 ...
51 tmp=TP->QueryProp(P_TMP_DEFEND_HOOK);
52
53 // ein etwas ausfuehrlicher Check, ob wir ueberschreiben koennen,
54 // Existenz && Gueltigkeit
55 if(pointerp(tmp) && sizeof(tmp) && intp(tmp[0]) && (time()<tmp[0]))
56 write("Der Zauber klappt nicht!\n");
57 else {
58 // der Zauber gilt eine Stunde
59 TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
60 write("Ein Zauber legt sich auf dich.\n");
61 }
62 ...
63
64 // die gerufene Methode
65 mixed abwehrfun(int dam, string* dam_type, mapping spell, object en) {
66 // keine rekursiven Schaeden abfangen ... mindestens ein magischer
67 // muss auch dabei sein
68 if((!mappingp(spell) || !spell[SP_RECURSIVE]) &&
69 sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
70
71 // mit 10% Whkeit schuetzt der Zauber total
72 if(!random(10)) {
73 tell_object(previous_object(),
74 "Dein Zauber gleisst rund um dich gruen auf.\n");
75 tell_room(environment(previous_object()), break_string(
76 previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
77 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
78 ({previous_object()}));
79
80 // manchmal geht der Zauber dabei endgueltig kaputt
81 if(!random(10)) previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
82
83 return 0; // volles Abfangen des Angriffs
84 }
85
86 // der Zauber schuetzt auf jeden Fall immer ein bischen
87 tell_object(previous_object(),
88 "Dein Zauber flackert rund um dich gruen auf.\n");
89 tell_room(environment(previous_object()), break_string(
90 previous_object()->Name(WESSEN)+" Haut flackert rund um "+
91 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
92 ({previous_object()}));
93 dam=(7+random(2))*dam/10; // Schaden reduzieren
94
95 return(({dam, dam_type, spell}));
96 }
97
98 // der Zauber schuetzt dann gar nicht ...
99 return 1;
100 }
101
102SIEHE AUCH:
103 Angriff: Attack(L)
104 Schutz: Defend(L)
105 Verwandt: InternalModifyDefend(L), P_TMP_ATTACK_MOD
106 Hooks: P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
107 neue Hooks: std/hooks
108
10908.12.2008, Zesstra
110