blob: 813c8f34e7a835a70ce0e79ed39c351f84233d97 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002init()
Zesstra953f9972017-02-18 15:37:36 +01003******
MG Mud User88f12472016-06-24 23:31:02 +02004
MG Mud User88f12472016-06-24 23:31:02 +02005
Zesstra953f9972017-02-18 15:37:36 +01006FUNKTION
7========
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstrabfab6ac2018-08-29 22:36:57 +02009 public varargs void init(object origin);
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /std/room/description.c
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018ARGUMENTE
19=========
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstrabfab6ac2018-08-29 22:36:57 +020021 object origin
22 Ursprungsumgebung der Bewegung / letzte Umgebung des Lebewesen
23 (sofern existent)
MG Mud User88f12472016-06-24 23:31:02 +020024
MG Mud User88f12472016-06-24 23:31:02 +020025
Zesstra953f9972017-02-18 15:37:36 +010026BESCHREIBUNG
27============
MG Mud User88f12472016-06-24 23:31:02 +020028
Zesstra953f9972017-02-18 15:37:36 +010029 init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die
30 Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt
31 in die Naehe von Lebewesen gelangt. init() wird dabei in allen
32 Objekten aufgerufen, bei denen es notwendig ist.
33
34 Der Hauptzweck dieser Funktion besteht darin, den Objekten
35 untereinander ihre jeweiligen Befehle zugaenglich zu machen.
36 Waehrend dies in anderen MudLibs durch eine Reihe von
Zesstrabfab6ac2018-08-29 22:36:57 +020037 add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies
38 in der MG-MudLib bei Objekten, die /std/thing/commands.c erben (das
39 sind zB. alle Standardobjekte) quasi automatisch (dort werden die
40 Befehle dann per AddCmd() im create() angemeldet, man spart sich
41 die Implementierung von init(). Der andere Weg ist aber natuerlich
42 immer noch moeglich.
43
44 Der Ablauf der init()-Kette ist wie folgt:
45
46 1. Ist das Objekt X, welches ins Zielobjekt D bewegt wurde,
47 ein Lebewesen, so wird in D init() aufgerufen, wobei
48 this_player() auf X gesetzt ist.
49
50 2. Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt:
51
52 * Ist C ein Lebewesen, dann wird init() in X aufgerufen,
53 wobei this_player() auf C gesetzt ist.
54
55 * Ist X ein Lebewesen, dann wird init() in C aufgerufen,
56 wobei this_player() auf X gesetzt ist.
57
58 3. Schliesslich wird in dem Fall, dass D lebendig ist, in X
59 init() aufgerufen, wobei this_player() auf D gesetzt ist.
60
61 Das Argument <origin> kann genutzt werden, um herauszufinden, wo
62 das Lebewesen nun eigentlich herkam.
Zesstra953f9972017-02-18 15:37:36 +010063
64
65RUeCKGABEWERT
66=============
67
68 keiner
69
70
71BEMERKUNGEN
72===========
73
Zesstrabfab6ac2018-08-29 22:36:57 +020074 * Wenn man init() ueberschreibt und vergisst, in etwaigen
75 geerbten Programmen das init() zu rufen, resultiert das in
76 schweren Bugs
77
78 * Das Argument <origin> gab es frueher nicht und es ist
79 weitgehend optional. Die Standardlib uebergibt es, aber nicht
80 alle (speziell) aeltere Programme uebergeben es weiter an ihre
81 geerbten init().
Zesstra953f9972017-02-18 15:37:36 +010082
83
84BEISPIELE
85=========
86
87 D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende
Zesstrabfab6ac2018-08-29 22:36:57 +020088 N1 und N2 befinden. Betritt ein Spieler X diesen Raum, so werden
89 folgende init()s aufgerufen:
Zesstra953f9972017-02-18 15:37:36 +010090
Zesstrabfab6ac2018-08-29 22:36:57 +020091 1. D->init(); // this_player() == X
Zesstra953f9972017-02-18 15:37:36 +010092
Zesstrabfab6ac2018-08-29 22:36:57 +020093 2. X->init(); // this_player() == L1
Zesstra953f9972017-02-18 15:37:36 +010094
Zesstrabfab6ac2018-08-29 22:36:57 +020095 3. L1->init(); // this_player() == X
96
97 4. N1->init(); // this_player() == X
98
99 5. N2->init(); // this_player() == X
100
101 Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das
102 Ganze wie folgt aus:
103
104 1. X->init(); // this_player() == L1
Zesstra953f9972017-02-18 15:37:36 +0100105
106
107SIEHE AUCH
108==========
109
Zesstrabfab6ac2018-08-29 22:36:57 +0200110 *exit()*, *AddCmd()*, *NotifyInsert()*
Zesstra953f9972017-02-18 15:37:36 +0100111
Zesstrabfab6ac2018-08-29 22:36:57 +0200112 add_action(E)
113
114Last modified: 07.03.2018, Zesstra