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
