
int_short()
***********


FUNKTION
========

   string int_short(mixed viewer, mixed viewpoint);


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!)


BESCHREIBUNG
============

   Es wird eine kurze  Beschreibung des Rauminneren erstellt. Dabei wird
   die Kurzbeschreibung des Raumes, die enthaltenen Objekte (exklusive
   aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
   wenn vom Viewer eingeschaltet dargestellt.

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


RUeCKGABEWERT
=============

   Die Kurzbeschreibung 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_long()
   Properties:        P_INT_SHORT, P_SHORT
                      P_HIDE_EXITS, P_SHOW_EXITS
   Kommandokette:     make_invlist(), short()
   Sonstiges:         P_REFERENCE_OBJECT, P_WANTS_TO_LEARN

11. Mai 2004 Gloinson
