blob: 1edbabd313305adf206d14b80bf2e9d9bae7500c [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>
MG Mud User88f12472016-06-24 23:31:02 +020034
35/*
36 Fuer properties und sonstige Definitionen zum Seherhaus.
37*/
38#include "/d/seher/haeuser/haus.h"
39
40/*
41 Aus Gruenden der Uebersichtlichkeit ziehen viele Magier vor, den Hauskrams
42 in eine separate Funktion zusammenzufassen.
43*/
44private void haus_create();
45
46/*
47Es folgt nun das normale create() eines Raumes
48*/
heull001546a2be2017-09-13 21:48:42 +020049protected void create()
50{
MG Mud User88f12472016-06-24 23:31:02 +020051 ::create();
52 /* ... div. Konfiguration des Raum ... */
53
54 /*
55 Das extra-create() muss natuerlich aufgerufen werden
56 */
57 haus_create();
58}
59
60/*
61Hier kommen wir nun zu der Fkt, die alles am Seherhaus verwaltet
62*/
63private void haus_create()
64{
65 object ob = find_object(HAUSNAME("tilly")); // findet Haus von Tilly
66
67 /*
68 Wenn das Haus im Raum steht. Hat den Vorteil, dass bei einem Verlegen
69 des Hauses, Cmd's usw nicht mehr verfuegbar sind -> Keine evtl Bugs :)
70 */
heull001546a2be2017-09-13 21:48:42 +020071 if(objectp(ob) && environment(ob)==this_object())
MG Mud User88f12472016-06-24 23:31:02 +020072 {
73 /*
74 Der Spieler wollte es ja nicht anders
75 */
76 ob->RemoveCmd(({"betret","betritt","betrete"}));
77 ob->RemoveId("haus");
78 ob->RemoveId("haus von tilly");
79 ob->AddId("steinhaufen");
80
81 AddDetail(({"haufen","steinhaufen"}),"Da ist doch ein kleiner Spalt? "
82 +"Vielleicht kannst Du auf den Steinhaufen klettern?\n");
83
84 AddCmd(({"kletter","klettere"}),"kletter_cmd");
85 }
86}
87
88public int kletter_cmd(string str)
89{
90 object ob = find_object(HAUSNAME("tilly"));
91
92 _notify_fail("Wo moechtest Du hinklettern?\n");
93
94 if(!str) return 0;
95
96 if(str=="auf haufen" || str=="auf steinhaufen")
97 {
98 if(objectp(ob))
99 {
100 /*
101 Das ist die Meldung, die ein Spieler bekommt, wenn das Seherhaus
102 abgeschlossen ist und er versucht, es zu 'betreten'.
103 */
104 notify_fail("Du kletterst auf den Haufen, doch der Spalt ist zu "
105 "schmal fuer Dich.\n");
106
107 if(!(ob->QueryProp(H_DOORSTAT) & D_CLOSED))
108 {
109 tell_object(this_player(),
110 "Du kletterst auf den Steinhaufen, rutschst den Spalt runter "
111 "und findest Dich urploetzlich in einer schummrigen Hoehle.\n");
112 tell_room(this_object(),this_player()->name()+" klettert auf einen "
113 "Steinhaufen und ist ploetzlich verschwunden.",({this_player()}));
114 tell_room(RAUMNAME("tilly",0),this_player()->name()+
115 " faellt fluchend herein.\n");
116 this_player()->move(RAUMNAME("tilly",0),M_GO|M_SILENT,0);
117 return 1;
118 }
119 }
120 }
121 return 0;
122}
123
124/*
125Natuerlich gibt es noch viel mehr Moeglichkeiten rund um Seherhaeuser,
126doch sollte dies erstmal reichen. Zu beachten ist bei solcher Vorgehens-
127weise, dass ein 'schliesse|oeffne haus' evtl zu Fehlermeldungen fuehrt.
128Dem Spieler sei nahegelegt, es doch mit 'oeffne haustuer' zu versuchen.
129
130HAUSNAME und RAUMNAME (u.a.) sind Defines aus dem haus.h. Man sollte sich
131dieses File anschauen und die dortigen Defines uebernehmen. Dann bugt auch
132nichts, falls mal etwas an den Haeusern umgestellt wird.
133
134Tilly, 20. Mai 2001, 00:10:24h
135*/