blob: f9d0cad0d4a7d5aad07a83e25ff3c129f0e5d225 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001init()
2
3FUNKTION:
4 void init();
5
6DEFINIERT IN:
7 /std/room/description.c
8
9ARGUMENTE:
10 keine
11
12BESCHREIBUNG:
13 init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die
14 Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt
15 in die Naehe von Lebewesen gelangt. init() wird dabei in allen
16 Objekten aufgerufen, bei denen es notwendig ist.
17
18 Der Hauptzweck dieser Funktion besteht darin, den Objekten
19 untereinander ihre jeweiligen Befehle zugaenglich zu machen.
20 Waehrend dies in anderen MudLibs durch eine Reihe von
21 add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies in
22 der MG-MudLib bei Objekten, die /std/thing/commands.c erben
23 (das sind zB. alle Standardobjekte) quasi automatisch
24 (dort werden die Befehle dann per AddCmd() im create() angemeldet,
25 man spart sich die Implementierung von init() und dem Mud somit
26 Speicher). Der andere Weg ist aber natuerlich immer noch moeglich.
27
28RUeCKGABEWERT:
29 keiner
30
31BEMERKUNGEN:
32 Der Ablauf der init()-Kette ist wie folgt:
33 o Ist das Objekt X, welches ins Zielobjekt D bewegt wurde, ein
34 Lebewesen, so wird in D init() aufgerufen, wobei this_player() auf
35 X gesetzt ist.
36 o Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt:
37 + Ist C ein Lebewesen, dann wird init() in X aufgerufen, wobei
38 this_player() auf C gesetzt ist.
39 + Ist X ein Lebewesen, dann wird init() in C aufgerufen, wobei
40 this_player() auf X gesetzt ist.
41 o Schliesslich wird in dem Fall, dass D lebendig ist, in X init()
42 aufgerufen, wobei this_player() auf D gesetzt ist.
43
44BEISPIELE:
45 D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende
46 N1 und N2 befinden.
47 Betritt ein Spieler X diesen Raum, so werden folgende init()s
48 aufgerufen:
49
50 D->init(); // this_player() == X
51 X->init(); // this_player() == L1
52 L1->init(); // this_player() == X
53 N1->init(); // this_player() == X
54 N2->init(); // this_player() == X
55
56 Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das Ganze
57 wie folgt aus:
58
59 X->init(); // this_player() == L1
60
61SIEHE AUCH:
62 exit(), AddCmd(), add_action(),
63 NotifyInsert()
64----------------------------------------------------------------------------
65Last modified: 04.08.2007, Zesstra