blob: 1e0e6e336dde72a7a3b9f3ec6c0926354d21bf0a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001init()
Zesstra953f9972017-02-18 15:37:36 +01002******
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstrabfab6ac2018-08-29 22:36:57 +02008 public varargs void init(object origin);
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 /std/room/description.c
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017ARGUMENTE
18=========
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstrabfab6ac2018-08-29 22:36:57 +020020 object origin
21 Ursprungsumgebung der Bewegung / letzte Umgebung des Lebewesen
22 (sofern existent)
MG Mud User88f12472016-06-24 23:31:02 +020023
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstra953f9972017-02-18 15:37:36 +010025BESCHREIBUNG
26============
MG Mud User88f12472016-06-24 23:31:02 +020027
Zesstra953f9972017-02-18 15:37:36 +010028 init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die
29 Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt
30 in die Naehe von Lebewesen gelangt. init() wird dabei in allen
31 Objekten aufgerufen, bei denen es notwendig ist.
32
33 Der Hauptzweck dieser Funktion besteht darin, den Objekten
34 untereinander ihre jeweiligen Befehle zugaenglich zu machen.
35 Waehrend dies in anderen MudLibs durch eine Reihe von
Zesstrabfab6ac2018-08-29 22:36:57 +020036 add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies
37 in der MG-MudLib bei Objekten, die /std/thing/commands.c erben (das
38 sind zB. alle Standardobjekte) quasi automatisch (dort werden die
39 Befehle dann per AddCmd() im create() angemeldet, man spart sich
40 die Implementierung von init(). Der andere Weg ist aber natuerlich
41 immer noch moeglich.
42
43 Der Ablauf der init()-Kette ist wie folgt:
44
Zesstrae959e722025-07-09 22:11:16 +020045 1. Ist das Objekt X, welches ins Zielobjekt D bewegt wurde, ein
46 Lebewesen, so wird in D init() aufgerufen, wobei
Zesstrabfab6ac2018-08-29 22:36:57 +020047 this_player() auf X gesetzt ist.
48
49 2. Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt:
50
51 * Ist C ein Lebewesen, dann wird init() in X aufgerufen,
52 wobei this_player() auf C gesetzt ist.
53
54 * Ist X ein Lebewesen, dann wird init() in C aufgerufen,
55 wobei this_player() auf X gesetzt ist.
56
57 3. Schliesslich wird in dem Fall, dass D lebendig ist, in X
58 init() aufgerufen, wobei this_player() auf D gesetzt ist.
59
60 Das Argument <origin> kann genutzt werden, um herauszufinden, wo
61 das Lebewesen nun eigentlich herkam.
Zesstra953f9972017-02-18 15:37:36 +010062
63
64RUeCKGABEWERT
65=============
66
67 keiner
68
69
70BEMERKUNGEN
71===========
72
Zesstrae959e722025-07-09 22:11:16 +020073 * Wenn man init() ueberschreibt und vergisst, in etwaigen geerbten
74 Programmen das init() zu rufen, resultiert das in schweren Bugs
Zesstrabfab6ac2018-08-29 22:36:57 +020075
Zesstrae959e722025-07-09 22:11:16 +020076 * Das Argument <origin> gab es frueher nicht und es ist weitgehend
77 optional. Die Standardlib uebergibt es, aber nicht alle
78 (speziell) aeltere Programme uebergeben es weiter an ihre
Zesstrabfab6ac2018-08-29 22:36:57 +020079 geerbten init().
Zesstra953f9972017-02-18 15:37:36 +010080
81
82BEISPIELE
83=========
84
85 D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende
Zesstrabfab6ac2018-08-29 22:36:57 +020086 N1 und N2 befinden. Betritt ein Spieler X diesen Raum, so werden
87 folgende init()s aufgerufen:
Zesstra953f9972017-02-18 15:37:36 +010088
Zesstrabfab6ac2018-08-29 22:36:57 +020089 1. D->init(); // this_player() == X
Zesstra953f9972017-02-18 15:37:36 +010090
Zesstrabfab6ac2018-08-29 22:36:57 +020091 2. X->init(); // this_player() == L1
Zesstra953f9972017-02-18 15:37:36 +010092
Zesstrabfab6ac2018-08-29 22:36:57 +020093 3. L1->init(); // this_player() == X
94
95 4. N1->init(); // this_player() == X
96
97 5. N2->init(); // this_player() == X
98
99 Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das
100 Ganze wie folgt aus:
101
102 1. X->init(); // this_player() == L1
Zesstra953f9972017-02-18 15:37:36 +0100103
104
105SIEHE AUCH
106==========
107
Zesstra6cadc1b2018-11-15 22:27:32 +0100108 exit(), AddCmd(), NotifyInsert()
Zesstra953f9972017-02-18 15:37:36 +0100109
Zesstrabfab6ac2018-08-29 22:36:57 +0200110 add_action(E)
111
112Last modified: 07.03.2018, Zesstra