blob: 004402768098e8934d46c1cbd74201a09df054f7 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001P_TMP_DEFEND_HOOK
Zesstra953f9972017-02-18 15:37:36 +01002*****************
MG Mud User88f12472016-06-24 23:31:02 +02003
Zesstra953f9972017-02-18 15:37:36 +01004********************* VERALTETE PROPERTY
5****************************** * Diese Property ist veraltet. Bitte
6nicht mehr in neuem Code nutzen. * **********************************
7************************************* P_TMP_DEFEND_HOOK
MG Mud User88f12472016-06-24 23:31:02 +02008
MG Mud User88f12472016-06-24 23:31:02 +02009
Zesstra953f9972017-02-18 15:37:36 +010010NAME
11====
MG Mud User88f12472016-06-24 23:31:02 +020012
Zesstra953f9972017-02-18 15:37:36 +010013 P_TMP_DEFEND_HOOK "defend_hook"
MG Mud User88f12472016-06-24 23:31:02 +020014
MG Mud User88f12472016-06-24 23:31:02 +020015
Zesstra953f9972017-02-18 15:37:36 +010016DEFINIERT IN
17============
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra953f9972017-02-18 15:37:36 +010019 /sys/new_skills.h
MG Mud User88f12472016-06-24 23:31:02 +020020
MG Mud User88f12472016-06-24 23:31:02 +020021
Zesstra953f9972017-02-18 15:37:36 +010022BESCHREIBUNG
23============
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstra953f9972017-02-18 15:37:36 +010025 Mittels dieser Property koennen die Abwehren eines Livings temporaer
26 veraendert werden.
MG Mud User88f12472016-06-24 23:31:02 +020027
Zesstra953f9972017-02-18 15:37:36 +010028 Es wird an dem Living die Property als mindestens 3-elementiges Array
Arathorn214fd7a2021-01-20 00:27:01 +010029
30 ({int zeitpunkt, object objekt, string methode, ...})
31
Zesstra953f9972017-02-18 15:37:36 +010032 gesetzt und die Methode 'methode' wird dann waehrend des Defend() des
33 Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
MG Mud User88f12472016-06-24 23:31:02 +020034
Zesstra953f9972017-02-18 15:37:36 +010035 Der Methode werden die Parameter der Defend() uebergeben:
Arathorn214fd7a2021-01-20 00:27:01 +010036 int dam, string* dam_type, int|mapping spell, object enemy
Zesstra953f9972017-02-18 15:37:36 +010037 - spell ist definitiv ein Mapping - ein an Defend() uebergebener
38 int-Wert wurde aequivalent umgesetzt.
39 - dam_type ist definitiv ein Array von Schadenswerten oder einem Wert
MG Mud User88f12472016-06-24 23:31:02 +020040
Zesstra953f9972017-02-18 15:37:36 +010041 Zudem findet der Aufruf der Methode nach dem Abarbeiten der P_DEFENDERS
42 statt, diese koennen also weitere Modifikationen vorgenommen haben.
MG Mud User88f12472016-06-24 23:31:02 +020043
Arathorn214fd7a2021-01-20 00:27:01 +010044 Gibt die Methode:
Zesstra953f9972017-02-18 15:37:36 +010045 - 0 zurueck, wird Defend() abgebrochen (und damit der Schaden voellig
46 abgefangen) - nur noch die Flucht wird geprueft
Arathorn214fd7a2021-01-20 00:27:01 +010047 - ein 3-elementiges Array ({dam, dam_type, spell}) zurueck,
Zesstra953f9972017-02-18 15:37:36 +010048 werden diese Werte in der Defend() an Stelle der uebergebenen Werte
49 verwendet
50 - weder noch zurueck, wird das Ergebnis ignoriert und die Defend laeuft
51 regulaer weiter
MG Mud User88f12472016-06-24 23:31:02 +020052
MG Mud User88f12472016-06-24 23:31:02 +020053
Zesstra953f9972017-02-18 15:37:36 +010054BEMERKUNGEN
55===========
MG Mud User88f12472016-06-24 23:31:02 +020056
Zesstra953f9972017-02-18 15:37:36 +010057 - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
Arathorn214fd7a2021-01-20 00:27:01 +010058 - Der korrekte Union-Datentyp fuer die Property ist
59 <int|object|string>* fuer die normale Nutzung mit 3 Elementen.
60 Ein weit verbreiteter Anwendungsfall verwendet 2 weitere Elemente,
61 die vom Typ int und string|string* sind. Alle Stellen, die die Property
62 abfragen, sollten daher den Union-Datentyp <int|object|string|string*>*
63 verwenden. Das Beispiel beruecksichtigt diesen Fall bereits.
64 - Falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
65 Property auf 0 gesetzt.
66 - Vor dem Setzen immer auf die Existenz eines gueltigen Hooks
Zesstra953f9972017-02-18 15:37:36 +010067 pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
Arathorn214fd7a2021-01-20 00:27:01 +010068 im Code anderer und ist andererseits unfair gegenueber ihnen.
Zesstra953f9972017-02-18 15:37:36 +010069
70
71BEISPIEL
72========
73
74 *** ein gruener Schutzzauber ***
Arathorn214fd7a2021-01-20 00:27:01 +010075 // Vor dem Setzen der Prop pruefen, ob schon ein Hook gesetzt ist.
Zesstra953f9972017-02-18 15:37:36 +010076
Arathorn214fd7a2021-01-20 00:27:01 +010077 <int|object|string|string*>* tmp = TP->QueryProp(P_TMP_DEFEND_HOOK);
78
79 // Ein etwas ausfuehrlicherer Check, ob wir ueberschreiben koennen,
80 // Existenz && noch nicht abgelaufen?
81 if(sizeof(tmp) && intp(tmp[0]) && time() < tmp[0]) {
82 write("Der Zauber klappt nicht!\n");
83 }
Zesstra953f9972017-02-18 15:37:36 +010084 else {
Arathorn214fd7a2021-01-20 00:27:01 +010085 // der Zauber gilt eine Stunde
86 TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
87 write("Ein Zauber legt sich auf Dich.\n");
Zesstra953f9972017-02-18 15:37:36 +010088 }
89 ...
90
91 // die gerufene Methode
Arathorn214fd7a2021-01-20 00:27:01 +010092 int|<int|string*|mapping>* abwehrfun(int dam, string* dam_type,
93 mapping spell, object en)
94 {
95 // keine rekursiven Schaeden abfangen ... mindestens ein magischer
96 // muss auch dabei sein
97 if(!spell[SP_RECURSIVE] &&
98 sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
99 // mit 10% Whkeit schuetzt der Zauber total
100 if(!random(10)) {
101 tell_object(previous_object(),
102 "Dein Zauber gleisst rund um Dich gruen auf.\n");
103 tell_room(environment(previous_object()), break_string(
104 previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
105 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
106 ({previous_object()}));
Zesstra953f9972017-02-18 15:37:36 +0100107
Arathorn214fd7a2021-01-20 00:27:01 +0100108 // manchmal geht der Zauber dabei endgueltig kaputt
109 if(!random(10))
110 previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
Zesstra953f9972017-02-18 15:37:36 +0100111
Arathorn214fd7a2021-01-20 00:27:01 +0100112 return 0; // volles Abfangen des Angriffs
113 }
Zesstra953f9972017-02-18 15:37:36 +0100114
Arathorn214fd7a2021-01-20 00:27:01 +0100115 // der Zauber schuetzt auf jeden Fall immer ein bischen
116 tell_object(previous_object(),
117 "Dein Zauber flackert rund um dich gruen auf.\n");
118 tell_room(environment(previous_object()), break_string(
119 previous_object()->Name(WESSEN)+" Haut flackert rund um "+
120 previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
121 ({previous_object()}));
122 dam = (7+random(2))*dam/10; // Schaden reduzieren
123
124 return(({dam, dam_type, spell}));
MG Mud User88f12472016-06-24 23:31:02 +0200125 }
126
Arathorn214fd7a2021-01-20 00:27:01 +0100127 // der Zauber schuetzt dann gar nicht ...
128 return 1;
Zesstra953f9972017-02-18 15:37:36 +0100129 }
130
131
132SIEHE AUCH
133==========
134
Arathorn214fd7a2021-01-20 00:27:01 +0100135 Angriff: Attack(L)
136 Schutz: Defend(L)
137 Verwandt: InternalModifyDefend(L), P_TMP_ATTACK_MOD
138 Hooks: P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
Zesstra953f9972017-02-18 15:37:36 +0100139 neue Hooks: std/hooks
MG Mud User88f12472016-06-24 23:31:02 +0200140
Arathorn214fd7a2021-01-20 00:27:01 +010014129.12.2020, Arathorn