// Ein Raum, in dem eine Sequenz ablaeuft, sobald ein Spieler
// an der Kette zieht. Die Sequenz kann zur gleichen Zeit nur 1mal laufen
// und geht an alle im Raum. Sie bricht ab, sobald der Ausloeser den Raum
// verlaesst.
// 09.04.2003 by Sunrise@Wunderland
inherit "room";
#include <properties.h>
int ziehen(); // diese Funktion wird durch das Kommando aufgerufen und
// startet die Sequenz
void sequenz(object zieher, int zaehler);
void create()
{
::create();
SetProp(P_LIGHT, 1);
SetProp(P_INT_SHORT, "Vor einem Haeuschen");
SetProp(P_INT_LONG, "Ein eigenartiges Haeuschen haengt hier an einer "
"ueberdimensionalen Wand. Es hat ein spitzes Dach und eine viereckige "
"Tuer aus Holz. Aus dem Boden des Haeuschens haengen zwei lange Ketten "
"herab, die mit zapfenaehnlichen Gewichten bestueckt sind.");
AddDetail(({"kette", "ketten"}),
"Dich juckt es regelrecht in den Fingern, einmal daran zu ziehen.");
AddCmd("zieh|ziehe&kette|ketten", #'ziehen, "Woran willst Du ziehen?");
}
int ziehen()
{
if (find_call_out("sequenz") != -1)
{
write("An der Kette wurde doch gerade eben schon gezogen.\n");
return 1;
}
write("Du ziehst an der Kette und wartest gespannt.\n");
say(this_player()->name(WER, NAME_DEF|NAME_CAP)+
" zieht an der Kette und wartet gespannt.\n");
// starte die Sequenz in 2 Sekunden, mit dem this_player()
// als Zieher und Zaehler 0
call_out("sequenz", 2, this_player(), 0);
return 1;
}
void sequenz(object zieher, int zaehler)
{
string text;
// Wir wollen eine 5stufige Sequenz ausgeben mit verschiedenen Texten
// fuer Zieher und Zuschauer. Diese ordnen wir in 2 Arrays.
// Spaeter werten wir die Texte mit parse_mess aus.
// Auf die Eintraege von Arrays kann man bequem ueber den Index zugreifen.
// Zu beachten ist dabei, dass der Index mit 0 anfaengt. Hier wurde er zur
// Verdeutlichung als Kommentar an die jeweiligen Array-Felder geschrieben.
// zieher_texte[4] ist also "Krabumm"
string *zieher_texte = ({
// 0
"Knarrr. Ploetzlich oeffnet sich die Holztuer des Haeuschens und ein "
"missgelaunter hoelzerner Vogel stuermt daraus hervor.",
// 1
"Klack, klack, klack, rennt er einmal rund um sein Haeuschen, haelt dann "
"auf der Spitze des Daches und schaut Dich empoert an.",
// 2
"'&&WER&&, was soll denn das? Wieso laesst Du mich nicht in Ruhe schlafen?' "
"kraechzt der Vogel empoert. Irgendwie schaemst Du Dich ...",
// 3
"Dann rennt er noch eine Runde um sein Haus und verschwindet mit einem "
"missgelaunten Blick auf Dich wieder hinter seiner Tuer.",
// 4
"Krabumm."});
string *zuschauer_texte = ({
// 0
"Knarrr. Ploetzlich oeffnet sich die Holztuer des Haeuschens und ein "
"missgelaunter hoelzerner Vogel stuermt daraus hervor.",
// 1
"Klack, klack, klack, rennt er einmal rund um sein Haeuschen, haelt dann "
"auf der Spitze des Daches und schaut &&WEN&& empoert an.",
// 2
"Dann schimpft und zetert er, dass &&WER&& ganz rot vor Scham wird.",
// 3
"Nach einer weiteren Runde rund um sein Haus, verschwindet mit einem "
"missgelaunten Blick auf &&WEN&& wieder hinter seiner Tuer.",
// 4
"Krabumm."});
// wenn der Spieler inzwischen ausgeloggt ist (ende) oder nicht mehr im
// Raum ist beenden wir das gleich
// Und geben evtl. noch einen Text fuer die anderen aus.
if (!objectp(zieher) || environment(zieher) != this_object())
{
tell_room(this_object(), "Du wischst Dir verbluefft ueber die Augen.\n"
"Hast Du getraeumt?");
return;
}
// parse_mess ersetzt &&WEN&& etc. durch den Namen des Ziehers
text = parse_mess(zieher_texte[zaehler], zieher);
tell_object(zieher, break_string(text));
text = parse_mess(zuschauer_texte[zaehler], zieher);
tell_room(this_object(), break_string(text), ({zieher}));
// Wenn der Zaehler < 4 ist, erhoehen wir den Zaehler um 1
// und rufen die Funktion erneut auf - mit einem Delay von 6 Sekunden
if (zaehler < 4)
{
zaehler ++;
call_out("sequenz", 6, zieher, zaehler);
}
}
|