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