int_long()
==========

FUNKTION
--------
::

     varargs string int_long(mixed viewer, mixed viewpoint, int flags)

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

     /std/room/description.c

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

     mixed viewer	- der Betrachter des Raumes
     mixed viewpoint	- 0/Objekt/Array der/die Ausgangspunkt(e) des
			  Betrachtens (und damit nicht sichtbar!)
     int flags		- Modifikatoren fuer die Anzeige
			  (siehe "man make_invlist", wird mit 3 verUNDet!)

BESCHREIBUNG
------------
::

     Es wird die Beschreibung des Rauminneren erstellt. Dabei wird die
     Langbeschreibung des Raumes, die enthaltenen Objekte (exklusive
     aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
     wenn vom Viewer eingeschaltet dargestellt.
     Falls der Raum innerhalb eines anderen Raumes liegt und selbst
     transparent ist, wie zusaetzlich die Kurzbeschreibung des Aussen-
     raumes angezeigt.

     Ist Viewer ein Magier mit eingeschaltetem Magiermodus, so wird der
     Beschreibung der Dateiname des Raumes vorangestellt.

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

     Die Langbeschreibung des Raumes von innen.

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

     Die Trennung von viewer und viewpoint hat durchaus ihren Sinn. So ist
     es zum Beispiel moeglich, einen Raum "mit den Augen eines Anderen" zu
     betrachten. Dabei saehe man sich selbst, wenn man im Raum waere.

BEISPIELE
---------
::

     // in diesem Raum sieht man keine Mitspieler im "schau" oder beim
     // Betreten (vielleicht ist es zu neblig)
     // dazu werden einfach alle Interactives zu den viewpoints addiert
     string int_long(object viewer, mixed viewpoints, int flags) {
      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
      return ::int_long(&viewer,
			viewpoints+
			filter(all_inventory(this_object()),
				     #'interactive),
			&flags);
     }

     string int_short(object viewer, mixed viewpoints) {
      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
      return ::int_short(&viewer,
			 viewpoints+
			 filter(all_inventory(this_object()),
				      #'interactive));
     }

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

     Aehnliches:	int_short()
     Properties:	P_INT_LONG, P_SHORT
			P_HIDE_EXITS, P_SHOW_EXITS
			P_TRANSPARENT
     Kommandokette:	make_invlist(), short()
     Sonstiges:		P_REFERENCE_OBJECT, P_WANTS_TO_LEARN

11. Mai 2004 Gloinson

