notstrom | e48f2dc | 2019-08-23 11:01:47 +0200 | [diff] [blame] | 1 | inherit "/std/room"; |
| 2 | |
| 3 | #include __PATH__(1)"defs.h" |
| 4 | |
| 5 | int cmd_knopf(); |
| 6 | |
| 7 | int schoki_da = 1; // 1 wenn Schoki vorhanden ist, 0 wenn nicht |
| 8 | |
| 9 | protected 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 | |
| 33 | void 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 | |
| 43 | int 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 | |