Eine Kuckucksuhr mit Sequenz
![]()
// 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); } } |
| Start » Magierhandbuch » Dokumentation » Programmierbeispiele » Kuckucksuhr mit Sequenz | |
|
| |