varargs mixed CanInstall(object who, object where, object what){ object env; if(!who || !environment(who)) return "#That's unpossable!"; foreach(object thingy in ({ where, what })){ if(thingy){ env = environment(thingy); if((env != who && env != environment(who)) || (thingy == what && env != who)){ string thingname = remove_article(thingy->GetShort()); return "#You don't have the "+thingname+"."; } } } return 1; } varargs mixed CanUninstall(object who, object where, object what){ object env; if(who) env = environment(who); if(!who || !env) return "#That's inposserble!"; if(!what || !environment(what)) return "#That's not here."; if(!where){ object env1 = environment(what); object env2 = environment(env1); if(env1 != who && env1 != env && env2 != who && env2 != env){ return "#That's not accessible."; } else { return 1; } } if(environment(what) != where) return "#That's not in there."; if(environment(where) != who && environment(where) != env){ return "#That's not in reach."; } return 1; } varargs mixed eventInstall(object what, object where){ return 1; } varargs mixed eventUninstall(object what, object where){ return 1; } int direct_install_obj(object what){ return CanInstall(this_player(), 0, what); } int direct_uninstall_obj(object what){ return CanUninstall(this_player(), 0, what); } int direct_install_obj_word_obj(object thingus, mixed word, object target){ return CanInstall(this_player(), target, thingus); } int indirect_install_obj_word_obj(object target, mixed word, object thingus){ return CanInstall(this_player(), target, thingus); } int direct_uninstall_obj_word_obj(object thingus, mixed word, object target){ return CanUninstall(this_player(), target, thingus); } int indirect_uninstall_obj_word_obj(object target, mixed word, object thingus){ return CanUninstall(this_player(), thingus, target); }