blob: ad2423d6e087623e713e5518518c6dcf7d2eea8e [file] [log] [blame]
notstrome48f2dc2019-08-23 11:01:47 +02001inherit "/std/room";
2
3#include __PATH__(1)"defs.h"
4
5int cmd_knopf();
6
7int schoki_da = 1; // 1 wenn Schoki vorhanden ist, 0 wenn nicht
8
9protected void create() {
10 ::create();
11
12 SetProp(P_INT_SHORT, "Eine Huette mit verstecktem Gegenstand");
13 SetProp(P_INT_LONG, BSLF(
14 "Diese Huette sieht auf den ersten Blick recht leer aus."));
15
16 SetProp(P_LIGHT, 1);
17 SetProp(P_INDOORS, 1);
18 SetProp(P_LIGHT_TYPE, LT_GLOWING);
19
20 AddDetail("blick", BSLF(
21 "Dein Blick faellt auf die kahle Wand, hier ist echt nichts los."));
22 AddDetail("wand", BSLF(
23 "An der Wand ist nichts zu finden, nur ein kleiner Knopf ist da "
24 "angebracht."));
25 AddDetail("knopf", BSLF(
26 "Der Knopf ist so klein und niedlich, Du moechtest ihn doch bestimmt "
27 "gern mal druecken, oder?"));
28
29 AddCmd("drueck|druecke&knopf", #'cmd_knopf,
30 "Wen oder was willst Du druecken?^");
31}
32
33void reset() {
34 ::reset();
35 if (!schoki_da) {
36 // Einmal pro Reset gibts neue Schoki:
37 tell_room(TO, BSLF(
38 "Der Knopf an der Wand knirscht leise."));
39 schoki_da = 1;
40 }
41}
42
43int cmd_knopf() {
44 if (!schoki_da) {
45 // Diesen Reset wurde die Schoki schon abgeholt:
46 tell_object(TP, BSLF(
47 "Du drueckst den Knopf, aber nichts passiert. Gedulde Dich ein wenig "
48 "und probiere es spaeter nochmal."));
49 tell_room(TO, BSLF(
50 TPNC+" macht sich an der Wand zu schaffen. Nichts passiert."), ({TP}));
51 return 1;
52 }
53
54 /* Das Objekt wird geclont ... */
55 object ob = clone_object(__PATH__(1)"obj/schoki");
56 if (!objectp(ob)) {
57 /* ... aber es gab dabei einen Fehler, das Objekt konnte nicht erzeugt
58 werden: */
59 tell_object(TP, BSLF(
60 "Da ist wohl etwas schiefgegangen, Du hoerst von weiter oben nur "
61 "ein resigniertes Jammern."));
62 tell_room(TO, BSLF(
63 TPNC+" macht sich an der Wand zu schaffen. Von oben hoerst Du "
64 "Gejammer."), ({TP}));
65 } else if (ob->move(TP, M_GET) == MOVE_OK) {
66 /* Beim Bewegen eines Gegenstandes in den Spieler ist eine Pruefung auf
67 den Erfolg des Aufrufes Pflicht. Fuer moegliche Gruende, dass move()
68 fehlschlaegt, lies Dir bitte die Manpage zu move() durch.
69
70 Das Objekt wurde erfolgreich erzeugt, und es wurde erfolgreich in den
71 Spieler bewegt, der die Aktion ausgeloest hat: */
72 tell_object(TP, BSLF(
73 "Eine Klappe oeffnet sich an der Decke, und etwas faellt von oben "
74 "herab. Geschickt faengst Du es auf."));
75 tell_room(TO, BSLF(
76 "Etwas faellt von oben herab und wird geschickt von "+TPN+
77 " aufgefangen."), ({TP}));
78 schoki_da = 0;
79 } else {
80 /* Das Objekt wurde erfolgreich erzeugt, aber es konnte nicht in den
81 Spieler bewegt werden. Da das Objekt in diesem Fall sehr einfach
82 gebaut ist und keine Sonderbehandlung dafuer beinhaltet, bewegt
83 zu werden, ist der Spieler offensichtlich ueberladen. Wir muessen
84 also in diesem Fall nicht pruefen, welchen Fehlerwert move()
85 zurueckgeliefert hat. */
86 tell_object(TP, BSLF(
87 "Eine klappe oeffnet sich an der Decke, und etwas faellt von oben "
88 "herab. Du bist aber schon zu vollgeladen, um es noch halten zu "
89 "koennen. Es faellt zu Boden."));
90 tell_room(TO, BSLF(
91 "Etwas faellt von oben herab, aber "+TPN+" stellt sich zu dusslig "
92 "an. Schnell, hebe es auf, bevor "+TP->QueryPronoun(WER)+" sich "
93 "besinnt!"), ({TP}));
94 schoki_da = 0;
95 /* Beim Bewegen des Objektes in den Raum kann auch etwas schiefgehen,
96 aber ueblicherweise passiert das nur in seltenen Ausnahmefaellen.
97 Normalerweise prueft man den Rueckgabewert von move() beim Bewegen
98 von Gegenstaenden oder Spielern in einen Raum nicht, denn wenn das
99 nicht klappt, WILL man Debug-Output auf den entsprechenden Magier-
100 Ebenen und im Fehlerteufel haben: */
101 ob->move(TO, M_PUT);
102 }
103 return 1;
104}
105