blob: b9d8784d2d164a46436a99d2fcdfb6c5e727bda2 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// haustuer.c -- Beschreibung, Oeffnen und Schliessen
2//
3// (c) 1995 Wargon@MorgenGrauen
4//
5// $Id: haustuer.c,v 1.1.1.1 2000/08/20 20:22:42 mud Exp $
6//
7
8#define NEED_PROTOTYPES
9#include "../haus.h"
10#include <properties.h>
11#include <thing/properties.h>
12#include <thing/description.h>
13#include <thing/commands.h>
14
15static int validHouse = 0;
16static string owner;
17
18void create()
19{
20 Set( H_DOOR, "Die Haustuer ist %s.\n" );
21 Set( H_DOORSTAT, 0);
22 Set( H_DOORLSTAT, ({ "geoeffnet", "geschlossen", 0, "abgeschlossen" }));
23
24 Set( H_DOOR, SAVE, F_MODE);
25 Set( H_DOORSTAT, SAVE, F_MODE);
26 Set( H_DOORLSTAT, SAVE, F_MODE);
27
28 AddCmd( ({"schliess", "schliesse"}), "schliesse");
29 AddCmd("oeffne","oeffne");
30
31 owner = getuid(this_object());
32}
33
34varargs string long(int mode)
35{
36 return sprintf(Query(H_DOOR), Query(H_DOORLSTAT)[Query(H_DOORSTAT)]);
37}
38
39static string SetTuerOwner(string o)
40{
41 validHouse=1;
42 Set( H_DOORSTAT, D_CLOSED | D_LOCKED);
43 return owner=o;
44}
45
46int oeffne(string str)
47{
48 int doorstat;
49
50 notify_fail("Was willst Du oeffnen?\n");
51 doorstat = Query(H_DOORSTAT);
52
53 if (!id(str) && str != "tuer" && str != "haustuer")
54 return 0;
55
56 if (!(doorstat & D_CLOSED)) {
57 notify_fail(capitalize(name(WER,1))+" ist gar nicht geschlossen!\n");
58 return 0;
59 }
60 if (doorstat & D_LOCKED) {
61 notify_fail(capitalize(name(WER,1))+" ist abgeschlossen.\n");
62 return 0;
63 }
64
65 doorstat &= ~D_CLOSED;
66 Set(H_DOORSTAT, doorstat & ~D_CLOSED);
67
68 write("Du oeffnest "+name(WEN,1)+" von "+capitalize(owner)+".\n");
69 tell_room(environment(this_object()),
70 sprintf("%s oeffnet %s von %s.\n",
71 this_player()->name(WER),
72 name(WEN,1),
73 capitalize(owner) ),
74 ({this_player()}));
75 if (validHouse) {
76 tell_room(find_object(RAUMNAME(owner,0))||this_object(),
77 this_player()->name(WER)+" oeffnet "+name(WEN)+".\n",
78 ({this_player()}));
79 Save();
80 }
81 return 1;
82}
83
84private int close_door()
85{
86 if (Query(H_DOORSTAT) & D_CLOSED) {
87 notify_fail(capitalize(name(WER,1))+" ist doch schon zu!\n");
88 return 0;
89 }
90 Set(H_DOORSTAT, Query(H_DOORSTAT) | D_CLOSED);
91
92 write("Du schliesst "+name(WEN,1)+" von "+capitalize(owner)+".\n");
93 tell_room(environment(this_object()),
94 sprintf( "%s schliesst %s von %s.\n",
95 capitalize(this_player()->name(WER)),
96 name(WEN,1), capitalize(owner)),
97 ({this_player()}));
98 if (validHouse) {
99 tell_room(find_object(RAUMNAME(owner,0))||this_object(),
100 capitalize(this_player()->name(WER))+" schliesst "+name(WEN)+".\n",
101 ({this_player()}));
102 Save();
103 }
104 return 1;
105}
106
107private int lock_door()
108{
109 object tp, home;
110 string nam;
111 int doorstat;
112
113 tp = this_player();
114 nam = capitalize(tp->name(WER));
115
116 if (validHouse) {
117 call_other(RAUMNAME(owner,0), "???");
118 home = find_object(RAUMNAME(owner,0));
119
120 if (!home->allowed_check(this_player())) {
121 notify_fail("Du darfst "+name(WEN,1)+" von "+capitalize(owner)+" aber nicht abschliessen.\n");
122 return 0;
123 }
124 }
125 if ((doorstat = Query(H_DOORSTAT)) & D_LOCKED) {
126 notify_fail("Die Tuer ist abgeschlossen.\n");
127 return 0;
128 }
129 doorstat |= (D_LOCKED|D_CLOSED);
130 write("Du schliesst "+name(WEN)+" ab.\n");
131 Set(H_DOORSTAT, doorstat);
132 tell_room(environment(this_object()),
133 sprintf( "%s schliesst %s ab.\n",
134 nam,
135 (getuid(tp)==owner ?
136 (tp->QueryPossPronoun(this_object(), WEN)+" "+name(RAW)) :
137 name(WEN,1) )),
138 ({tp}));
139 if (validHouse) {
140 tell_room(home, nam+" schliesst "+name(WEN)+" ab.\n",({tp}));
141 Save();
142 }
143 return 1;
144}
145
146private int unlock_door()
147{
148 object tp, home;
149 string nam;
150 int doorstat;
151
152 tp = this_player();
153 nam = capitalize(tp->name(WER));
154
155 if (validHouse) {
156 call_other(RAUMNAME(owner,0), "???");
157 home = find_object(RAUMNAME(owner,0));
158
159 if (!home->allowed_check(this_player())) {
160 notify_fail("Du darfst "+name(WEN,1)+" von "+capitalize(owner)+" aber nicht aufschliessen.\n");
161 return 0;
162 }
163 }
164
165 if (!((doorstat = Query(H_DOORSTAT)) & D_LOCKED)) {
166 notify_fail("Die Tuer ist nicht abgeschlossen.\n");
167 return 0;
168 }
169
170 Set(H_DOORSTAT, doorstat & ~D_LOCKED);
171 write("Du schliesst "+name(WEN)+" auf.\n");
172 tell_room(environment(this_object()),
173 sprintf("%s schliesst %s auf.\n",
174 nam,
175 (getuid(tp)==owner ?
176 (tp->QueryPossPronoun(this_object(), WEN)+" "+name(RAW)) :
177 name(WEN,1) )),
178 ({tp}));
179 if(validHouse) {
180 tell_room(home,nam+" schliesst "+name(WEN)+" auf.\n",({tp}));
181 Save();
182 }
183 return 1;
184}
185
186int schliesse(string str)
187{
188 string was, wen, *s;
189
190 notify_fail("Was willst Du schliessen ?\n");
191 if (!str||str=="")
192 return 0;
193 s = old_explode(str, " ");
194 if ((was = s[<1]) == "auf" || was == "ab")
195 s = s[0..<2];
196 else
197 was = 0;
198
199 wen=implode(s, " ");
200 if (!id(wen) && wen != "tuer" && wen != "haustuer")
201 return 0;
202 if (!was || was=="")
203 return close_door();
204 switch (was)
205 {
206 case "auf": return unlock_door();
207 case "ab": return lock_door();
208 }
209 return 0;
210}
211
212// $Log: haustuer.c,v $
213// Revision 1.1.1.1 2000/08/20 20:22:42 mud
214// Ins CVS eingecheckt
215//