blob: 1331223dd0f1c143f8f93d72ee16a0ece0c95e5e [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#pragma strong_types,rtt_checks
2
3inherit "/std/room";
4inherit "/std/hook_consumer";
5
6#define OFFICE "/d/wueste/catweazle/room/office"
7
8#include <properties.h>
9#include <wizlevels.h>
10#include <hook.h>
11
12protected void create()
13{
14 ::create();
15 SetProp(P_LIGHT, 1 );
16 SetProp(P_INT_SHORT,"Eine Gefaengniszelle");
17 SetProp(P_INT_LONG, break_string(
18 "Die Zelle ist absolut eintoenig und hat keine Fenster. Lange hier drin"
19 "zu sitzen ist bestimmt nicht angenehm. Wenn du hier heraus willst, "
20 "kannst Du wohl nur den Sheriff, seinen Stellvertreter oder einen "
21 "Erzmagier darum bitten.",78));
22 SetProp(P_INDOORS,1);
23}
24
25void init()
26{
27 ::init();
28 if (!query_once_interactive(this_player()))
29 return;
30 if ( IS_DEPUTY(this_player()) ) // EM+ sind sowieso Deputies
31 return;
32 add_action("bla","",1);
33 input_to("murks",0);
34
35 // Move-Hook anhaengen
36 int ret = this_player()->HRegisterToHook(H_HOOK_MOVE, this_object(),
37 H_HOOK_LIBPRIO(1),H_HOOK_SURVEYOR,
38 -1);
39 if ( ret <=0 )
40 raise_error("Fehler: Move-Hook konnte nicht registriert werden. "
41 "HRegisterToHook-Ergebnis: " + ret + "\n");
42}
43
44// Move-Hook austragen.
45void exit(object liv) {
46 if (objectp(liv) && !IS_DEPUTY(liv))
47 liv->HUnregisterFromHook(H_HOOK_MOVE,this_object());
48}
49
50int bla()
51{
52 string v;
53
54 v=query_verb();
55 input_to("murks",0);
56 // sagen und schlafen erlaubt.
57 if (stringp(v) && (v=="sag"||v=="sage"||v[0]=='\''
58 ||v=="schlafe"||v=="schlaf"))
59 return 0;
60 write("Nix da.\n");
61 return 1;
62}
63
64int murks(string str)
65{
66 if (!this_player() || environment(this_player())!=this_object())
67 return 0;
68
69 input_to("murks",0);
70
71 if (!str||str=="") return 1;
72 // Einschlafen erlaubt.
73 if (str == "schlafe ein") {
74 this_player()->command("schlafe ein");
75 return 1;
76 }
77 if (str[0]=='\'') str="sag "+str[1..];
78 if(str[0..3]=="sag "||str[0..4]=="sage ")
79 {
80 str=implode(old_explode(str," ")[1..]," ");
81 write(break_string(str, 78, "Du sagst: "));
82 tell_room(this_object(),break_string(str,78,
83 capitalize(this_player()->name())+" sagt: "),({this_player()}));
84 return 1;
85 }
86 write("Nix da.\n");
87 return 1;
88}
89
90public varargs int remove(int silent) {
91 // keine Zerstoerung, wenn Spieler drin sind.
92 if (sizeof(filter(all_inventory(),#'query_once_interactive)))
93 return 0;
94
95 return ::remove(1);
96}
97
98public string NotifyDestruct(object caller) {
99
100 if (previous_object() != master()
101 || caller == this_object())
102 return 0;
103
104 // wenn keiner hier ist, ists egal.
105 if (!sizeof(filter(all_inventory(),#'query_once_interactive)))
106 return 0;
107
108 // Direkter Destruct mit Anwesenden nur fuer EM+
109 if (!process_call() && this_interactive()
110 && IS_ARCH(this_interactive()))
111 return 0;
112
113 return "Direkte Zerstoerung des Jails nur fuer EM+ erlaubt.\n";
114}
115
116
117// keine anderen Move-Hooks erlaubt ausser diesem...
118status HookRegistrationCallback(object registringObject, int hookid, object
119 hookSource, int registringObjectsPriority, int registringObjectsType)
120{
121 if (hookid==H_HOOK_MOVE)
122 return 0;
123
124 return 1;
125}
126status HookCancelAllowanceCallback(object cancellingObject, int hookid, object
127 hookSource, int cancellingObjectsPriority, mixed hookData)
128{
129 if (hookid==H_HOOK_MOVE && cancellingObject != this_object()
130 && present(hookSource,this_object()))
131 return 0;
132
133 return 1;
134}
135
136status HookModificationAllowanceCallback(object modifyingObject, int hookid,
137 object hookSource, int modifyingObjectsPriority, mixed hookData)
138{
139 if (hookid==H_HOOK_MOVE && modifyingObject != this_object()
140 && present(hookSource,this_object()))
141 return 0;
142
143 return 1;
144}
145
146mixed HookCallback(object hookSource, int hookid, mixed hookData)
147{
148 // nur move hooks sind interessant hier.
149 if (hookid != H_HOOK_MOVE)
150 return ({H_NO_MOD, hookData});
151
152 // das duerfte eigentlich nicht vorkommen, da der Hook im exit() geloescht
153 // wird...
154 if (environment(hookSource) != this_object()) {
155 hookSource->HUnregisterFromHook(H_HOOK_MOVE,this_object());
156 return ({H_NO_MOD, hookData});
157 }
158
159 // Bewegungen in den Netztotenraum sind ok.
160 if (!interactive(hookSource)
161 && pointerp(hookData) && sizeof(hookData) >= 1)
162 {
163 if ((objectp(hookData[0])
164 && object_name(hookData[0]) == "/room/netztot")
165 || (stringp(hookData[0]) && hookData[0]=="/room/netztot")
166 )
167 {
168 return ({H_NO_MOD, hookData});
169 }
170 }
171
172 // Deputy (oder hoeher), kein process_call(). Sonst wird die Bewegung
173 // abgebrochen.
174 if (!this_interactive() || !IS_DEPUTY(this_interactive()))
175 {
176 return ({H_CANCELLED, hookData});
177 }
178
179 return ({H_NO_MOD, hookData});
180}
181
182// wenn hier jemand durch Zerstoerung des Objektes rauskommen will, geht das
183// schief.
184varargs void NotifyRemove(object ob) {
185 if (objectp(ob) && query_once_interactive(ob) && !IS_DEPUTY(ob))
186 {
187 ob->SetProp(P_START_HOME,"/room/jail");
188 ob->save_me(0);
189 }
190}
191