/* Do not remove the headers from this file! see /USAGE for more info. */ #include <move.h> // John // Sep 7 94 private nosave mixed get_response = 1; private nosave mixed drop_response = 1; private nosave function my_drop_hook, my_get_hook; void add_hook(string, function); //### hmm, are these necessary? I think hook evaluation uses an evaluate //### anyway... private mixed prevent_drop() { return evaluate(drop_response); } private mixed prevent_get() { return evaluate(get_response); } //:FUNCTION set_getmsg //set_getmsg(s) sets the error message that one gets when one tries to take //an object. void set_getmsg( string s ) { get_response = s; if (!my_get_hook) { my_get_hook = (: prevent_get :); add_hook("prevent_get", my_get_hook); } } //:FUNCTION query_getmsg //query_getmsg() returns the error message that one gets when one tries to take //an object. string query_getmsg() { if (stringp(get_response)) return get_response; } //:FUNCTION set_gettable //set_gettable(1) makes an object gettable, while set_gettable(0) makes //it not gettable. If a function or string is passed, this has the //same effect as calling set_getmsg(). void set_gettable( mixed g ) { if (g == -1 || !g) get_response = 0; else get_response = 1; if(functionp(g) || stringp(g)) get_response = g; if (!my_get_hook) { my_get_hook = (: prevent_get :); add_hook("prevent_get", my_get_hook); } } //:FUNCTION get //Do some checks before getting an object. Returns 1 if successful, //otherwise 0 or a string error message. mixed get() { object env; int tmp; if (get_response != MOVE_OK) return get_response; env = environment(); while (env) { if (tmp = environment()->inventory_accessible()); return tmp; env = environment(env); } return MOVE_OK; } //:FUNCTION set_dropmsg //Set the error message that one gets when one tries to drop an object void set_dropmsg( string s ) { drop_response = s; if (!my_drop_hook) { my_drop_hook = (: prevent_drop :); add_hook("prevent_drop", my_drop_hook); } } //:FUNCTION query_dropmsg //returns the error message one gets when one tries to drop an object. string query_dropmsg() { if (stringp(drop_response)) return drop_response; } //:FUNCTION set_droppable //set_droppable(1) makes an object droppable, while set_droppable(0) makes //it not droppable. If a function or string is passed, this has the //same effect as calling set_dropmsg(). void set_droppable( int g ) { if (g == -1 || g == 0) drop_response = 0; else drop_response = 1; if (functionp(g) || stringp(g)) drop_response = g; if (!my_drop_hook) { my_drop_hook = (: prevent_drop :); add_hook("prevent_drop", my_drop_hook); } } //:FUNCTION drop //Do some checks before dropping an object. Returns 1 if successful, //otherwise 0 or a string error message. mixed drop() { if (drop_response != 1) return drop_response; return 1; } //:FUNCTION is_gettable //return one if an object can be taken. int is_gettable() { return get_response == 1; } mapping lpscript_attributes() { return ([ "getmsg" : ({ LPSCRIPT_STRING, "setup", "set_getmsg" }), ]); }