| init() |
| ****** |
| |
| |
| FUNKTION |
| ======== |
| |
| public varargs void init(object origin); |
| |
| |
| DEFINIERT IN |
| ============ |
| |
| /std/room/description.c |
| |
| |
| ARGUMENTE |
| ========= |
| |
| object origin |
| Ursprungsumgebung der Bewegung / letzte Umgebung des Lebewesen |
| (sofern existent) |
| |
| |
| BESCHREIBUNG |
| ============ |
| |
| init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die |
| Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt |
| in die Naehe von Lebewesen gelangt. init() wird dabei in allen |
| Objekten aufgerufen, bei denen es notwendig ist. |
| |
| Der Hauptzweck dieser Funktion besteht darin, den Objekten |
| untereinander ihre jeweiligen Befehle zugaenglich zu machen. |
| Waehrend dies in anderen MudLibs durch eine Reihe von |
| add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies |
| in der MG-MudLib bei Objekten, die /std/thing/commands.c erben (das |
| sind zB. alle Standardobjekte) quasi automatisch (dort werden die |
| Befehle dann per AddCmd() im create() angemeldet, man spart sich |
| die Implementierung von init(). Der andere Weg ist aber natuerlich |
| immer noch moeglich. |
| |
| Der Ablauf der init()-Kette ist wie folgt: |
| |
| 1. Ist das Objekt X, welches ins Zielobjekt D bewegt wurde, ein |
| Lebewesen, so wird in D init() aufgerufen, wobei |
| this_player() auf X gesetzt ist. |
| |
| 2. Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt: |
| |
| * Ist C ein Lebewesen, dann wird init() in X aufgerufen, |
| wobei this_player() auf C gesetzt ist. |
| |
| * Ist X ein Lebewesen, dann wird init() in C aufgerufen, |
| wobei this_player() auf X gesetzt ist. |
| |
| 3. Schliesslich wird in dem Fall, dass D lebendig ist, in X |
| init() aufgerufen, wobei this_player() auf D gesetzt ist. |
| |
| Das Argument <origin> kann genutzt werden, um herauszufinden, wo |
| das Lebewesen nun eigentlich herkam. |
| |
| |
| RUeCKGABEWERT |
| ============= |
| |
| keiner |
| |
| |
| BEMERKUNGEN |
| =========== |
| |
| * Wenn man init() ueberschreibt und vergisst, in etwaigen geerbten |
| Programmen das init() zu rufen, resultiert das in schweren Bugs |
| |
| * Das Argument <origin> gab es frueher nicht und es ist weitgehend |
| optional. Die Standardlib uebergibt es, aber nicht alle |
| (speziell) aeltere Programme uebergeben es weiter an ihre |
| geerbten init(). |
| |
| |
| BEISPIELE |
| ========= |
| |
| D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende |
| N1 und N2 befinden. Betritt ein Spieler X diesen Raum, so werden |
| folgende init()s aufgerufen: |
| |
| 1. D->init(); // this_player() == X |
| |
| 2. X->init(); // this_player() == L1 |
| |
| 3. L1->init(); // this_player() == X |
| |
| 4. N1->init(); // this_player() == X |
| |
| 5. N2->init(); // this_player() == X |
| |
| Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das |
| Ganze wie folgt aus: |
| |
| 1. X->init(); // this_player() == L1 |
| |
| |
| SIEHE AUCH |
| ========== |
| |
| exit(), AddCmd(), NotifyInsert() |
| |
| add_action(E) |
| |
| Last modified: 07.03.2018, Zesstra |