#include <lib.h>
#include <boobytraps.h>
inherit LIB_SHADOW;
inherit LIB_CLOSE;
inherit LIB_GET;
inherit LIB_DROP;
inherit LIB_LOCK;
inherit LIB_STEAL;
int traptype = 0;
int traplevel = 0;
int autoresets = 0;
string shadow_object = "";
string trap_description = "";
int SetTrapType(int i){
traptype = i;
return traptype;
}
int GetTrapType(){
return traptype;
}
int SetTrapLevel(int i){
traplevel = i;
return traplevel;
}
int GetTrapLevel(){
return traplevel;
}
string SetTrapDescription(string str){
trap_description = str;
return trap_description;
}
string GetTrapDescription(){
return trap_description;
}
int SetAutoResets(int i){
autoresets = i;
return autoresets;
}
int GetAutoResets(){
return autoresets;
}
void create(){
parse_init();
}
int eventShadow(object ob){
return shadow::eventShadow(ob);
}
varargs mixed SpringTrap(mixed arg1, mixed arg2){
if(!autoresets){
eventUnshadow();
}
else autoresets--;
return 1;
}
varargs mixed eventDisarm(mixed args...){
write("You successfully disarm the trap!");
eventUnshadow();
return 1;
}
varargs mixed CanOpen(object who, object tool){
object ob = GetShadowedObject();
if(!ob) return 0;
if(ob->GetDoor()) ob = ob->GetDoor();
return ob->CanOpen(who, tool);
}
varargs mixed eventOpen(object who, object tool){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventOpen(who, tool);
if(traptype & BOOBYTRAP_OPEN) SpringTrap(who, tool);
return ret;
}
varargs mixed CanClose(object who, string id){
object ob = GetShadowedObject();
if(!ob) return 0;
if(ob->GetDoor()) ob = ob->GetDoor();
return ob->CanClose(who, id);
}
mixed eventClose(object who){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventClose(who);
if(traptype & BOOBYTRAP_CLOSE) SpringTrap(who);
return ret;
}
mixed direct_get_obj(object target){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->direct_get_obj(target);
}
mixed direct_get_obj_out_of_obj(object target, object src){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->direct_get_obj_out_of_obj(target, src);
}
mixed direct_get_obj_from_obj(object target, object src){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->direct_get_obj_out_of_obj(target, src);
}
mixed direct_get_obj_obj(object target, object src){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->direct_get_obj_out_of_obj(target, src);
}
mixed GetPreventGet(){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->GetPreventGet();
}
mixed CanGet(object who){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->CanGet(who);
}
mixed eventGet(object who){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventGet(who);
if(traptype & BOOBYTRAP_GET) SpringTrap(who);
return ret;
}
mixed direct_drop_obj(object target){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->direct_drop_obj(target);
}
int GetDestructOnDrop(){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->GetDestructOnDrop();
}
mixed GetPreventDrop(){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->GetPreventDrop();
}
mixed CanDrop(object who){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->CanDrop(who);
}
mixed eventDrop(object who){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventDrop(who);
if(traptype & BOOBYTRAP_DROP) SpringTrap(who);
return ret;
}
mixed CanLock(object who, string id){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->CanLock(who, id);
}
varargs mixed eventLock(object who, mixed arg1, mixed arg2){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventLock(who,arg1,arg2);
if(traptype & BOOBYTRAP_LOCK) SpringTrap(who);
return ret;
}
varargs mixed CanUnlock(object who, string id, object key){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->CanUnlock(who, id, key);
}
varargs mixed eventUnlock(object who, mixed arg1, mixed arg2){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventUnlock(who, arg1, arg2);
if(traptype & BOOBYTRAP_UNLOCK) SpringTrap(who);
return ret;
}
mixed CanSteal(object who){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->CanSteal(who);
}
mixed eventSteal(object who){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventSteal(who);
if(traptype & BOOBYTRAP_STEAL) SpringTrap(who);
return ret;
}
mixed CanPick(object who, string id){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->CanPick(who, id);
}
varargs mixed eventPick(object who, string str, object tool){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventPick(who, str, tool);
if(traptype & BOOBYTRAP_PICK) SpringTrap(who);
return ret;
}
mixed direct_pick_str_on_obj(string str, object target, string str2,
string id){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->direct_pick_str_on_obj(str,target,str2,id);
}
mixed direct_pick_str_on_obj_with_obj(string str, object target, object tool,
string str2, string targ_id){
object ob = GetShadowedObject();
if(!ob) return 0;
return ob->direct_pick_str_on_obj_with_obj(str,target,tool,str2,targ_id);
}
string GetShort(){
object ob = GetShadowedObject();
if(!ob) return "";
return ob->GetShort();
}
string GetKeyName(){
object ob = GetShadowedObject();
if(!ob) return "";
return ob->GetKeyName();
}
mixed eventEquip(object who, string array limbs){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventEquip(who, limbs);
if(function_exists("GetWear",ob)){
if(traptype & BOOBYTRAP_WEAR) SpringTrap(who);
}
else if(traptype & BOOBYTRAP_WIELD) SpringTrap(who);
return ret;
}
mixed eventUnequip(object who){
object ob = GetShadowedObject();
mixed ret;
if(!ob) return 0;
ret = ob->eventUnequip(who);
if(function_exists("GetWear",ob)){
if(traptype & BOOBYTRAP_REMOVE) SpringTrap(who);
}
else if(traptype & BOOBYTRAP_UNWIELD) SpringTrap(who);
return ret;
}