Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/room/jail.c b/room/jail.c
new file mode 100644
index 0000000..1331223
--- /dev/null
+++ b/room/jail.c
@@ -0,0 +1,191 @@
+#pragma strong_types,rtt_checks
+
+inherit "/std/room";
+inherit "/std/hook_consumer";
+
+#define OFFICE "/d/wueste/catweazle/room/office"
+
+#include <properties.h>
+#include <wizlevels.h>
+#include <hook.h>
+
+protected void create()
+{
+ ::create();
+ SetProp(P_LIGHT, 1 );
+ SetProp(P_INT_SHORT,"Eine Gefaengniszelle");
+ SetProp(P_INT_LONG, break_string(
+ "Die Zelle ist absolut eintoenig und hat keine Fenster. Lange hier drin"
+ "zu sitzen ist bestimmt nicht angenehm. Wenn du hier heraus willst, "
+ "kannst Du wohl nur den Sheriff, seinen Stellvertreter oder einen "
+ "Erzmagier darum bitten.",78));
+ SetProp(P_INDOORS,1);
+}
+
+void init()
+{
+ ::init();
+ if (!query_once_interactive(this_player()))
+ return;
+ if ( IS_DEPUTY(this_player()) ) // EM+ sind sowieso Deputies
+ return;
+ add_action("bla","",1);
+ input_to("murks",0);
+
+ // Move-Hook anhaengen
+ int ret = this_player()->HRegisterToHook(H_HOOK_MOVE, this_object(),
+ H_HOOK_LIBPRIO(1),H_HOOK_SURVEYOR,
+ -1);
+ if ( ret <=0 )
+ raise_error("Fehler: Move-Hook konnte nicht registriert werden. "
+ "HRegisterToHook-Ergebnis: " + ret + "\n");
+}
+
+// Move-Hook austragen.
+void exit(object liv) {
+ if (objectp(liv) && !IS_DEPUTY(liv))
+ liv->HUnregisterFromHook(H_HOOK_MOVE,this_object());
+}
+
+int bla()
+{
+ string v;
+
+ v=query_verb();
+ input_to("murks",0);
+ // sagen und schlafen erlaubt.
+ if (stringp(v) && (v=="sag"||v=="sage"||v[0]=='\''
+ ||v=="schlafe"||v=="schlaf"))
+ return 0;
+ write("Nix da.\n");
+ return 1;
+}
+
+int murks(string str)
+{
+ if (!this_player() || environment(this_player())!=this_object())
+ return 0;
+
+ input_to("murks",0);
+
+ if (!str||str=="") return 1;
+ // Einschlafen erlaubt.
+ if (str == "schlafe ein") {
+ this_player()->command("schlafe ein");
+ return 1;
+ }
+ if (str[0]=='\'') str="sag "+str[1..];
+ if(str[0..3]=="sag "||str[0..4]=="sage ")
+ {
+ str=implode(old_explode(str," ")[1..]," ");
+ write(break_string(str, 78, "Du sagst: "));
+ tell_room(this_object(),break_string(str,78,
+ capitalize(this_player()->name())+" sagt: "),({this_player()}));
+ return 1;
+ }
+ write("Nix da.\n");
+ return 1;
+}
+
+public varargs int remove(int silent) {
+ // keine Zerstoerung, wenn Spieler drin sind.
+ if (sizeof(filter(all_inventory(),#'query_once_interactive)))
+ return 0;
+
+ return ::remove(1);
+}
+
+public string NotifyDestruct(object caller) {
+
+ if (previous_object() != master()
+ || caller == this_object())
+ return 0;
+
+ // wenn keiner hier ist, ists egal.
+ if (!sizeof(filter(all_inventory(),#'query_once_interactive)))
+ return 0;
+
+ // Direkter Destruct mit Anwesenden nur fuer EM+
+ if (!process_call() && this_interactive()
+ && IS_ARCH(this_interactive()))
+ return 0;
+
+ return "Direkte Zerstoerung des Jails nur fuer EM+ erlaubt.\n";
+}
+
+
+// keine anderen Move-Hooks erlaubt ausser diesem...
+status HookRegistrationCallback(object registringObject, int hookid, object
+ hookSource, int registringObjectsPriority, int registringObjectsType)
+{
+ if (hookid==H_HOOK_MOVE)
+ return 0;
+
+ return 1;
+}
+status HookCancelAllowanceCallback(object cancellingObject, int hookid, object
+ hookSource, int cancellingObjectsPriority, mixed hookData)
+{
+ if (hookid==H_HOOK_MOVE && cancellingObject != this_object()
+ && present(hookSource,this_object()))
+ return 0;
+
+ return 1;
+}
+
+status HookModificationAllowanceCallback(object modifyingObject, int hookid,
+ object hookSource, int modifyingObjectsPriority, mixed hookData)
+{
+ if (hookid==H_HOOK_MOVE && modifyingObject != this_object()
+ && present(hookSource,this_object()))
+ return 0;
+
+ return 1;
+}
+
+mixed HookCallback(object hookSource, int hookid, mixed hookData)
+{
+ // nur move hooks sind interessant hier.
+ if (hookid != H_HOOK_MOVE)
+ return ({H_NO_MOD, hookData});
+
+ // das duerfte eigentlich nicht vorkommen, da der Hook im exit() geloescht
+ // wird...
+ if (environment(hookSource) != this_object()) {
+ hookSource->HUnregisterFromHook(H_HOOK_MOVE,this_object());
+ return ({H_NO_MOD, hookData});
+ }
+
+ // Bewegungen in den Netztotenraum sind ok.
+ if (!interactive(hookSource)
+ && pointerp(hookData) && sizeof(hookData) >= 1)
+ {
+ if ((objectp(hookData[0])
+ && object_name(hookData[0]) == "/room/netztot")
+ || (stringp(hookData[0]) && hookData[0]=="/room/netztot")
+ )
+ {
+ return ({H_NO_MOD, hookData});
+ }
+ }
+
+ // Deputy (oder hoeher), kein process_call(). Sonst wird die Bewegung
+ // abgebrochen.
+ if (!this_interactive() || !IS_DEPUTY(this_interactive()))
+ {
+ return ({H_CANCELLED, hookData});
+ }
+
+ return ({H_NO_MOD, hookData});
+}
+
+// wenn hier jemand durch Zerstoerung des Objektes rauskommen will, geht das
+// schief.
+varargs void NotifyRemove(object ob) {
+ if (objectp(ob) && query_once_interactive(ob) && !IS_DEPUTY(ob))
+ {
+ ob->SetProp(P_START_HOME,"/room/jail");
+ ob->save_me(0);
+ }
+}
+