
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
