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
