blob: 03f89512f64c3c6aecada5243b3769d664f0755b [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001init()
2======
3
4FUNKTION
5--------
Zesstra18626972017-01-31 10:38:27 +01006
Zesstra90adb4e2018-03-07 21:14:31 +01007 public varargs void init(object origin);
Zesstra18626972017-01-31 10:38:27 +01008
9DEFINIERT IN
10------------
Zesstra18626972017-01-31 10:38:27 +010011
Zesstra90adb4e2018-03-07 21:14:31 +010012 /std/room/description.c
Zesstra18626972017-01-31 10:38:27 +010013
14ARGUMENTE
15---------
Zesstra18626972017-01-31 10:38:27 +010016
Zesstra418eb8a2018-03-07 21:16:17 +010017 object origin
18 Ursprungsumgebung der Bewegung / letzte Umgebung des Lebewesen (sofern
19 existent)
Zesstra18626972017-01-31 10:38:27 +010020
21BESCHREIBUNG
22------------
Zesstra18626972017-01-31 10:38:27 +010023
Zesstra90adb4e2018-03-07 21:14:31 +010024 init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die
25 Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt
26 in die Naehe von Lebewesen gelangt. init() wird dabei in allen
27 Objekten aufgerufen, bei denen es notwendig ist.
Zesstra18626972017-01-31 10:38:27 +010028
Zesstra90adb4e2018-03-07 21:14:31 +010029 Der Hauptzweck dieser Funktion besteht darin, den Objekten
30 untereinander ihre jeweiligen Befehle zugaenglich zu machen.
31 Waehrend dies in anderen MudLibs durch eine Reihe von
32 add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies in
33 der MG-MudLib bei Objekten, die /std/thing/commands.c erben
34 (das sind zB. alle Standardobjekte) quasi automatisch
35 (dort werden die Befehle dann per AddCmd() im create() angemeldet,
36 man spart sich die Implementierung von init(). Der andere Weg ist aber
37 natuerlich immer noch moeglich.
38
39 Der Ablauf der init()-Kette ist wie folgt:
40
41 1. Ist das Objekt X, welches ins Zielobjekt D bewegt wurde, ein
42 Lebewesen, so wird in D init() aufgerufen, wobei this_player() auf
43 X gesetzt ist.
44 2. Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt:
45
46 + Ist C ein Lebewesen, dann wird init() in X aufgerufen, wobei
47 this_player() auf C gesetzt ist.
48 + Ist X ein Lebewesen, dann wird init() in C aufgerufen, wobei
49 this_player() auf X gesetzt ist.
50
51 3. Schliesslich wird in dem Fall, dass D lebendig ist, in X init()
52 aufgerufen, wobei this_player() auf D gesetzt ist.
Zesstra18626972017-01-31 10:38:27 +010053
Zesstra418eb8a2018-03-07 21:16:17 +010054 Das Argument <origin> kann genutzt werden, um herauszufinden, wo das
55 Lebewesen nun eigentlich herkam.
56
Zesstra18626972017-01-31 10:38:27 +010057RUeCKGABEWERT
58-------------
Zesstra18626972017-01-31 10:38:27 +010059
Zesstra90adb4e2018-03-07 21:14:31 +010060 keiner
Zesstra18626972017-01-31 10:38:27 +010061
62BEMERKUNGEN
63-----------
Zesstra18626972017-01-31 10:38:27 +010064
Zesstra90adb4e2018-03-07 21:14:31 +010065 * Wenn man init() ueberschreibt und vergisst, in etwaigen geerbten Programmen
66 das init() zu rufen, resultiert das in schweren Bugs
Zesstra418eb8a2018-03-07 21:16:17 +010067 * Das Argument <origin> gab es frueher nicht und es ist weitgehend optional.
68 Die Standardlib uebergibt es, aber nicht alle (speziell) aeltere Programme
69 uebergeben es weiter an ihre geerbten init().
Zesstra18626972017-01-31 10:38:27 +010070
71BEISPIELE
72---------
Zesstra18626972017-01-31 10:38:27 +010073
Zesstra90adb4e2018-03-07 21:14:31 +010074 D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende
75 N1 und N2 befinden.
76 Betritt ein Spieler X diesen Raum, so werden folgende init()s
77 aufgerufen:
Zesstra18626972017-01-31 10:38:27 +010078
Zesstra90adb4e2018-03-07 21:14:31 +010079 1. D->init(); // this_player() == X
80 2. X->init(); // this_player() == L1
81 3. L1->init(); // this_player() == X
82 4. N1->init(); // this_player() == X
83 5. N2->init(); // this_player() == X
Zesstra18626972017-01-31 10:38:27 +010084
Zesstra90adb4e2018-03-07 21:14:31 +010085 Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das Ganze
86 wie folgt aus:
Zesstra18626972017-01-31 10:38:27 +010087
Zesstra90adb4e2018-03-07 21:14:31 +010088 1. X->init(); // this_player() == L1
Zesstra18626972017-01-31 10:38:27 +010089
90SIEHE AUCH
91----------
Zesstra18626972017-01-31 10:38:27 +010092
Zesstra90adb4e2018-03-07 21:14:31 +010093 :doc:`exit`, :doc:`AddCmd`, :doc:`NotifyInsert`
Zesstra18626972017-01-31 10:38:27 +010094
Zesstra90adb4e2018-03-07 21:14:31 +010095 add_action(E)
96
97Last modified: 07.03.2018, Zesstra
Zesstra18626972017-01-31 10:38:27 +010098