init()
======

FUNKTION
--------
::

	void init();

DEFINIERT IN
------------
::

	/std/room/description.c

ARGUMENTE
---------
::

	keine

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() und dem Mud somit
	  Speicher). Der andere Weg ist aber natuerlich immer noch moeglich.

RUeCKGABEWERT
-------------
::

	keiner

BEMERKUNGEN
-----------
::

	Der Ablauf der init()-Kette ist wie folgt:
	o 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.
	o 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.
	o Schliesslich wird in dem Fall, dass D lebendig ist, in X init()
	  aufgerufen, wobei this_player() auf D gesetzt ist.

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:

	  D->init();  // this_player() == X
	  X->init();  // this_player() == L1
	  L1->init(); // this_player() == X
	  N1->init(); // this_player() == X
	  N2->init(); // this_player() == X

	Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das Ganze
	wie folgt aus:

	  X->init();    // this_player() == L1

SIEHE AUCH
----------
::

	exit(), AddCmd(), add_action(),
  NotifyInsert()

Last modified: 04.08.2007, Zesstra

