blob: 4b57f96fdd49c23950390d10dbd607e4133a693d [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001P_TMP_ATTACK_HOOK
2=================
3
4********************* VERALTETE PROPERTY ******************************
5* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
6***********************************************************************
7P_TMP_ATTACK_HOOK
8
9NAME
10----
11::
12
13 P_TMP_ATTACK_HOOK "attack_hook"
14
15DEFINIERT IN
16------------
17::
18
19 /sys/new_skills.h
20
21BESCHREIBUNG
22------------
23::
24
25 Mittels dieser Property koennen die Attacken eines Livings ggf.
26 abgebrochen werden noch bevor Waffen oder Skills zum ausgewertet
27 wurden.
28
29 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 Attack() des
32 Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
33
34 Der Methode wird als Parameter der Gegner uebergeben.
35
36 Gibt die Methode 0 als Rueckgabewert zurueck, wird die Attacke sofort
37 kommentarlos abgebrochen.
38
39BEMERKUNGEN
40-----------
41::
42
43 - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
44 - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
45 Property auf 0 gesetzt
46 - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
47 pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
48 im Code anderer und ist andererseits unfair gegenueber ihnen
49
50BEISPIELE
51---------
52::
53
54 *** der Spieler erhaelt eine Verwundung, die ihn manchmal behindert ***
55 if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_HOOK)) ||
56 sizeof(tmp)<3 || tmp[0]<=time()) {
57 TP->SetProp(P_TMP_ATTACK_HOOK,
58 ({time()+3600, this_object(), "test_hurt"}));
59 ...
60
61 // die entsprechende Methode, die bei jedem Angriff ueber Attack()
62 // gerufen wird ...
63 int test_hurt(object enemy) {
64
65 // mit 10% Chance generell und 20% Chance bei groesseren Gegnern
66 // bricht der Angriff ab ... previous_object() ist natuerlich
67 // der Angreifer
68 if(!random(10) ||
69 (enemy->QueryProp(P_SIZE)>previous_object()->QueryProp(P_SIZE) &&
70 !random(5)) {
71
72 tell_object(previous_object(),
73 "Deine Wunde schmerzt dich zu sehr um anzugreifen.\n");
74 tell_room(environment(previous_object()),
75 previous_object()->Name(WER,1)+" zuckt vor Schmerzen zusammen.\n",
76 ({previous_object()}));
77 return 0;
78 }
79
80 // ansonsten geht der Angriff weiter
81 return 1;
82 }
83
84SIEHE AUCH
85----------
86::
87
88 Angriff: Attack(L)
89 Schutz: Defend(L)
90 Verwandt: InternalModifyAttack(L), P_TMP_ATTACK_MOD
91 Hooks: P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_DEFEND_HOOK
92 neue Hooks: std/hooks
93
9408.12.2008, Zesstra
95