MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | #pragma strong_types,rtt_checks |
| 2 | |
| 3 | inherit "/std/room"; |
| 4 | inherit "/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 | |
| 12 | protected 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 | |
| 25 | void 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. |
| 45 | void exit(object liv) { |
| 46 | if (objectp(liv) && !IS_DEPUTY(liv)) |
| 47 | liv->HUnregisterFromHook(H_HOOK_MOVE,this_object()); |
| 48 | } |
| 49 | |
| 50 | int 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 | |
| 64 | int 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 | |
| 90 | public 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 | |
| 98 | public 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... |
| 118 | status 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 | } |
| 126 | status 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 | |
| 136 | status 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 | |
| 146 | mixed 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. |
| 184 | varargs 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 | |