blob: ebd71917becbb49653d5022c34d888e8908e50a8 [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
17 keine
18
19BESCHREIBUNG
20------------
Zesstra18626972017-01-31 10:38:27 +010021
Zesstra90adb4e2018-03-07 21:14:31 +010022 init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die
23 Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt
24 in die Naehe von Lebewesen gelangt. init() wird dabei in allen
25 Objekten aufgerufen, bei denen es notwendig ist.
Zesstra18626972017-01-31 10:38:27 +010026
Zesstra90adb4e2018-03-07 21:14:31 +010027 Der Hauptzweck dieser Funktion besteht darin, den Objekten
28 untereinander ihre jeweiligen Befehle zugaenglich zu machen.
29 Waehrend dies in anderen MudLibs durch eine Reihe von
30 add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies in
31 der MG-MudLib bei Objekten, die /std/thing/commands.c erben
32 (das sind zB. alle Standardobjekte) quasi automatisch
33 (dort werden die Befehle dann per AddCmd() im create() angemeldet,
34 man spart sich die Implementierung von init(). Der andere Weg ist aber
35 natuerlich immer noch moeglich.
36
37 Der Ablauf der init()-Kette ist wie folgt:
38
39 1. Ist das Objekt X, welches ins Zielobjekt D bewegt wurde, ein
40 Lebewesen, so wird in D init() aufgerufen, wobei this_player() auf
41 X gesetzt ist.
42 2. Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt:
43
44 + Ist C ein Lebewesen, dann wird init() in X aufgerufen, wobei
45 this_player() auf C gesetzt ist.
46 + Ist X ein Lebewesen, dann wird init() in C aufgerufen, wobei
47 this_player() auf X gesetzt ist.
48
49 3. Schliesslich wird in dem Fall, dass D lebendig ist, in X init()
50 aufgerufen, wobei this_player() auf D gesetzt ist.
Zesstra18626972017-01-31 10:38:27 +010051
52RUeCKGABEWERT
53-------------
Zesstra18626972017-01-31 10:38:27 +010054
Zesstra90adb4e2018-03-07 21:14:31 +010055 keiner
Zesstra18626972017-01-31 10:38:27 +010056
57BEMERKUNGEN
58-----------
Zesstra18626972017-01-31 10:38:27 +010059
Zesstra90adb4e2018-03-07 21:14:31 +010060 * Wenn man init() ueberschreibt und vergisst, in etwaigen geerbten Programmen
61 das init() zu rufen, resultiert das in schweren Bugs
Zesstra18626972017-01-31 10:38:27 +010062
63BEISPIELE
64---------
Zesstra18626972017-01-31 10:38:27 +010065
Zesstra90adb4e2018-03-07 21:14:31 +010066 D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende
67 N1 und N2 befinden.
68 Betritt ein Spieler X diesen Raum, so werden folgende init()s
69 aufgerufen:
Zesstra18626972017-01-31 10:38:27 +010070
Zesstra90adb4e2018-03-07 21:14:31 +010071 1. D->init(); // this_player() == X
72 2. X->init(); // this_player() == L1
73 3. L1->init(); // this_player() == X
74 4. N1->init(); // this_player() == X
75 5. N2->init(); // this_player() == X
Zesstra18626972017-01-31 10:38:27 +010076
Zesstra90adb4e2018-03-07 21:14:31 +010077 Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das Ganze
78 wie folgt aus:
Zesstra18626972017-01-31 10:38:27 +010079
Zesstra90adb4e2018-03-07 21:14:31 +010080 1. X->init(); // this_player() == L1
Zesstra18626972017-01-31 10:38:27 +010081
82SIEHE AUCH
83----------
Zesstra18626972017-01-31 10:38:27 +010084
Zesstra90adb4e2018-03-07 21:14:31 +010085 :doc:`exit`, :doc:`AddCmd`, :doc:`NotifyInsert`
Zesstra18626972017-01-31 10:38:27 +010086
Zesstra90adb4e2018-03-07 21:14:31 +010087 add_action(E)
88
89Last modified: 07.03.2018, Zesstra
Zesstra18626972017-01-31 10:38:27 +010090