blob: ea127e424726d7de8ee0a6b675e9513d9ff2ee69 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/*
2Kurze Uebersicht der Termini:
3
4P_HAUS_ERLAUBT Propertie, die das Bauen eines Hauses im Raum er-
5 laubt oder verbietet. Default auf 0
6 Syntax: xcall $h->SetProp(P_HAUS_ERLAUBT,x)
7
8Save() Muss nach Aenderungen am Haus aufgerufen werden.
9 Syntax: xcall /d/seher/haeuser/tillyhaus->Save()
10
11Okay, also ein Seher moechte, dass sein Haus 1) unsichtbar ist, 2) mit
12einem anderen Kommando betreten werden soll und 3) nicht auf die id
13<haus> hoert sondern auf eine andere:
14
15Zu 1): Ganz einfach, man tippe
16
17 'xcall /d/seher/haeuser/tillyhaus->SetProp(P_SHORT,0)' und
18 'xcall /d/seher/haeuser/tillyhaus->Save()'
19
20Zu 2) und 3): Das ist nicht so einfach, sondern muss ueber den Raum, in
21 dem das Haus steht, gemacht werden. Deswegen folgend nun
22 ein Beispiel zu Funktionen in so einem Raum.
23
24
25Folgende Dinge stehen natuerlich schon im Raum, sonst liesse er sich
26nicht laden :-)
27*/
28
29#pragma strong_types, save_types, rtt_checks
30
31inherit "/std/room";
32
33#include <properties.h>
34#include <language.h>
35#include <moving.h>
36
37/*
38 Fuer properties und sonstige Definitionen zum Seherhaus.
39*/
40#include "/d/seher/haeuser/haus.h"
41
42/*
43 Aus Gruenden der Uebersichtlichkeit ziehen viele Magier vor, den Hauskrams
44 in eine separate Funktion zusammenzufassen.
45*/
46private void haus_create();
47
48/*
49Es folgt nun das normale create() eines Raumes
50*/
51void create(){
52 ::create();
53 /* ... div. Konfiguration des Raum ... */
54
55 /*
56 Das extra-create() muss natuerlich aufgerufen werden
57 */
58 haus_create();
59}
60
61/*
62Hier kommen wir nun zu der Fkt, die alles am Seherhaus verwaltet
63*/
64private void haus_create()
65{
66 object ob = find_object(HAUSNAME("tilly")); // findet Haus von Tilly
67
68 /*
69 Wenn das Haus im Raum steht. Hat den Vorteil, dass bei einem Verlegen
70 des Hauses, Cmd's usw nicht mehr verfuegbar sind -> Keine evtl Bugs :)
71 */
72 if(objectp(ob))
73 {
74 /*
75 Der Spieler wollte es ja nicht anders
76 */
77 ob->RemoveCmd(({"betret","betritt","betrete"}));
78 ob->RemoveId("haus");
79 ob->RemoveId("haus von tilly");
80 ob->AddId("steinhaufen");
81
82 AddDetail(({"haufen","steinhaufen"}),"Da ist doch ein kleiner Spalt? "
83 +"Vielleicht kannst Du auf den Steinhaufen klettern?\n");
84
85 AddCmd(({"kletter","klettere"}),"kletter_cmd");
86 }
87}
88
89public int kletter_cmd(string str)
90{
91 object ob = find_object(HAUSNAME("tilly"));
92
93 _notify_fail("Wo moechtest Du hinklettern?\n");
94
95 if(!str) return 0;
96
97 if(str=="auf haufen" || str=="auf steinhaufen")
98 {
99 if(objectp(ob))
100 {
101 /*
102 Das ist die Meldung, die ein Spieler bekommt, wenn das Seherhaus
103 abgeschlossen ist und er versucht, es zu 'betreten'.
104 */
105 notify_fail("Du kletterst auf den Haufen, doch der Spalt ist zu "
106 "schmal fuer Dich.\n");
107
108 if(!(ob->QueryProp(H_DOORSTAT) & D_CLOSED))
109 {
110 tell_object(this_player(),
111 "Du kletterst auf den Steinhaufen, rutschst den Spalt runter "
112 "und findest Dich urploetzlich in einer schummrigen Hoehle.\n");
113 tell_room(this_object(),this_player()->name()+" klettert auf einen "
114 "Steinhaufen und ist ploetzlich verschwunden.",({this_player()}));
115 tell_room(RAUMNAME("tilly",0),this_player()->name()+
116 " faellt fluchend herein.\n");
117 this_player()->move(RAUMNAME("tilly",0),M_GO|M_SILENT,0);
118 return 1;
119 }
120 }
121 }
122 return 0;
123}
124
125/*
126Natuerlich gibt es noch viel mehr Moeglichkeiten rund um Seherhaeuser,
127doch sollte dies erstmal reichen. Zu beachten ist bei solcher Vorgehens-
128weise, dass ein 'schliesse|oeffne haus' evtl zu Fehlermeldungen fuehrt.
129Dem Spieler sei nahegelegt, es doch mit 'oeffne haustuer' zu versuchen.
130
131HAUSNAME und RAUMNAME (u.a.) sind Defines aus dem haus.h. Man sollte sich
132dieses File anschauen und die dortigen Defines uebernehmen. Dann bugt auch
133nichts, falls mal etwas an den Haeusern umgestellt wird.
134
135Tilly, 20. Mai 2001, 00:10:24h
136*/