blob: 0882c13c2c6865706b3a5240f4d09e2c56f9e144 [file] [log] [blame]
notstrom72ff8992018-11-04 20:34:21 +01001inherit "/std/room";
2
3#include __PATH__(1)"defs.h"
4
5int guckstu();
6
7
8protected void create() {
9 ::create();
10
11 SetProp(P_INT_SHORT, "Eine schummrige Huette");
12 SetProp(P_INT_LONG, BSLF(
13 "Viel ist hier in der Huette immer noch nicht los. Aber Du siehst "
14 "in der Wand einen Knopf und einen Spiegel."));
15
16 SetProp(P_LIGHT, 1);
17 SetProp(P_INDOORS, 1);
18 SetProp(P_LIGHT_TYPE, LT_GLOWING);
19
20
21 AddDetail("knopf", BSLF(
notstromc7988b52018-11-04 20:36:40 +010022 "Es ist ein, aeh, Druckknopf."));
notstrom72ff8992018-11-04 20:34:21 +010023 AddDetail("spiegel", BSLF(
24 "Du kannst hineinblicken."));
25
26
27 /* Bitte nicht erschrecken, jetzt wirds eklig. Aber Du kannst fuer den
28 Anfang ein wenig mit den Beispielen herumspielen, ich habe versucht,
29 die haeufigsten Faelle, wie man Commands benutzt, abzudecken.
30 Die Erklaerungen habe ich teilweise stark vereinfacht, damit es nicht
31 zu kompliziert wird.
32 Ausfuehrlich steht das alles in "man addcmd" und "man addcmd_bsp",
33 aber diese Hilfeseiten sind sehr lang und vermutlich fuer den Anfang
34 eher verwirrend. Ausserdem gibt es in /doc/beispiele etwas zu AddCmd. */
35
36
37 // 1. Beispiel: Ein Kommando, das nur eine Meldung ausgibt.
38
39 /* Diese erste Zeile nimmst Du am Besten erst einmal so als gegeben hin,
40 in die sieben Abgruende von AddCmd() steigen wir spaeter noch herab. */
41 AddCmd("drueck|druecke&knopf|druckknopf&\n\bimpossible", 0,
42 /* Der dritte Parameter ist ein String, in dem alles weitere aneinander-
43 gefuegt steht, getrennt durch "|" und "^".
44 Zuerst steht die Nachfrage, falls statt "knopf" bzw. "druckknopf" ein
45 falsches Wort eingegeben wurde oder es ganz fehlt: */
46 "Was willst Du @verben?|"
47 // Dann die Ausgabe an den Spieler:
48 "Du drueckst den Knopf. Ein lautes Klingeln ertoent, das sofort "
notstrom7390ca82018-11-04 21:14:24 +010049 "verstummt, als Du den Knopf loslaesst.^"
notstrom62f5d972018-11-08 18:22:04 +010050 /* Dann die Ausgabe an alle anderen im Raum. Beachte, dass der gesamte
51 String durch replace_personal() gejagt wird, die zugehoerige Manpage
52 klaert Dich auf, welche Ausdruecke erkannt und ersetzt werden. */
notstrom72ff8992018-11-04 20:34:21 +010053 "@WER1 klingelt Sturm.^");
54
55
56 // 2. Beispiel: Ein Kommando, wo etwas dynamisch passiert.
57
58 /* Hier steht als zweiter Parameter eine Closure, die gerufen wird. Man
59 kann da alles moegliche machen, der Rueckgabewert entscheidet, ob
60 der Aufruf erfolgreich (!=0) war, oder ob sich das Kommando gar nicht
61 angesprochen fuehlt und die Syntax an anderen Objekten im Raum
62 getestet wird (==0). */
63 AddCmd("blick|blicke&spiegel", #'guckstu,
64 /* Hier auch wieder die Nachfrage, falls "spiegel" nicht oder falsch
65 eingegeben wurde. Die restlichen Ausgaben muss guckstu() erledigen: */
66 "Wo hinein moechtest Du blicken?");
67}
68
69/* Normalerweise sollte man seine Funktionen etwas sinnvoller benennen, aber
70 naja, ist schon spaet ... */
71int guckstu() {
72 tell_object(TP, BSLF(
notstrom26861be2018-11-04 20:45:33 +010073 "\nHILFE! Ein schreckliches Monster schaut Dich an:\n\n"+
notstrome5e8a012018-11-04 20:37:37 +010074 TP->long()));
notstrom72ff8992018-11-04 20:34:21 +010075 tell_room(TO, BSLF(
notstrom85228822018-11-04 20:52:42 +010076 TP->Name()+" schaut entsetzt in den Spiegel."),
77 /* Die Meldung geht an alle ausser this_player(), also denjenigen, der
notstrom7390ca82018-11-04 21:14:24 +010078 den Funktionsaufruf von guckstu() ausgeloest hat: */
notstrom85228822018-11-04 20:52:42 +010079 ({TP}));
notstrom72ff8992018-11-04 20:34:21 +010080 return 1;
notstrom5e8086a2018-11-04 20:49:08 +010081}
notstrom72ff8992018-11-04 20:34:21 +010082