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
