// This file is part of UNItopia Mudlib.
// ----------------------------------------------------------------
// File:        /room/bsp/bsp4.c
// Description: Einfuehrungskurs - Raum 4
// Author:      Unbekannt.
// Modified by:

#include <message.h>

inherit "/i/room";

void create() {
   set_short("Beispielraum Nr. 4");
   set_long(
      "Du bist im Beispielraum Nr. 4 des Einfuehrungskurses fuer "
      "Goetter. Du kannst den Quellcode mit dem Zauberstab-Kommando "
      "'zmore hier' leicht einsehen. Hier wurde ein Ausgangs-Filter im "
      "Raum installiert und ein Beispiel fuer das Setzen von Call-Out "
      "Funktionen ist auch integriert. Probier mal 'zco' - das listet "
      "alle Call-Outs auf!");
   set_exits( ({"bsp5", "bsp3"}), ({"westen", "sueden"}) );
   add_type("teleport_rein_verboten", 1);
}

int filter_westen(object who) {
//	Diese Funktion wird immer dann aufgerufen, wenn ein Objekt den Raum
//	in Richtung Westen verlassen will. Analog heisst der Ausgangsfilter
//      fuer das Verlassen in noerdlicher Richtung filter_norden() usw...
//	Man beachte: Diese Funktion muss einen Integer zurueckliefern! Und
//	zwar '1' wenn das verlassen verhindert werden soll und eine '0' wenn
//	der Filter keine Wirkung zeigen soll.

   if(find_call_out("meldung") != -1) {
//      find_call_out("meldung") liefert den Dauer bis zum naechsten call_out
//      auf die Funktion 'meldung'. -1 wird geliefert, wenn es keinen call_out
//      gibt. Das folgende also nur ausfuehren, wenn der Call-Out auf die
//      Funktion 'meldung' im Speicher laeuft. Die Meldung kam also noch nicht.

      send_message_to(who,
//      Eine Meldung an who,
          MT_NOISE, MA_COMM,
//      welche man Hoeren kann und Kommunikation ist
          "Der Raum sagt: Warte doch mal auf den Call-Out!\n");
//      und diesen Text besitzt.
	
	return 1;
//	1 -> Objekt aufhalten
   }

   return 0;
//	Null = Objekt nicht aufhalten!
}

void init() {
//	init() wird immer aufgerufen, wenn ein Lebewesen diesen Raum betritt.
//	Naeheres siehe /room/bsp/bsp3.c !

   if(find_call_out("meldung") == -1)
   {
//	Das folgende nur ausfuehren, wenn nicht schon ein Call-Out auf die
//	Funktion 'meldung' im Speicher laeuft. DAS IST WICHTIG! Sonst hat man
//	schnell eine Menge Call-Outs laufen wenn viele Spieler raus- und
//	reinlaufen. Die Funktion find_call_out() liefert die restliche Zeit
//	zurueck, die bis zum Funktionsaufruf von 'meldung' vergeht. Ist kein
//	Call-Out am laufen, liefert die Funktion '-1' zurueck.

      call_out("meldung",8);
//	Installiert einen Call_out, d.h. die Funktion 'meldung' wird nach
//	etwa 8 Sekunden aufgerufen (sofern dann der Raum noch existiert).
//	Sobald die Funktion aufgerufen wurde, entfernt sich der Call-Out
//	wieder.
   }
}

void meldung() {
//	Diese Funktion wird von der Call-Out-Routine aufgerufen, nachdem diese
//	im init() gestartet wurde. Will man die Funktion immer wieder aufrufen
//	muss man am Ende noch einmal call_out("meldung",int zeit) anfuegen.
//	Doch Vorsicht! Um Zeit zu sparen hat es sich als zweckmaessig erwiesen
//	immer vorher abzufragen ob sich ueberhaupt noch ein Spieler in dem
//	betreffenden Raum befindet!

   send_message(MT_NOTIFY, MA_UNKNOWN, "Hier kommt der Call-Out!\n");
//	Mit send_message werden Meldungen an alle Personen im Raum gesendet.
//      Diese Meldung ist eine Statusmeldung (MT_NOTIFY) und hat einen
//      unbekannten Grund (MA_UNKNOWN).
}

