#include <lib.h>

mixed direct_boobytrap_obj_with_obj() {
    return 1;
}

mixed indirect_boobytrap_obj_with_obj() {
    return 1;
}

mixed direct_disarm_obj() {
    if(sizeof(this_object()->FoundTraps())) return 1;
    return 0;
}

varargs mixed eventDisarm(mixed arg){
    int disarm_score = 0;
    int failure = 0;
    int wisdom_score = this_player()->GetStat("wisdom")["level"];
    mapping Traps = this_object()->FoundTraps();
    object trap = keys(Traps)[0];
    write("You begin the disarming attempt.");
    say(this_player()->GetCapName()+" begins the disarming attempt.");

    disarm_score += this_player()->GetStat("luck")["level"];
    disarm_score += this_player()->GetStat("intelligence")["level"];
    disarm_score += this_player()->GetStat("coordination")["level"];

    if(disarm_score > Traps[trap]["level"]) return trap->eventDisarm(this_player());

    failure = (Traps[trap]["level"] - disarm_score);

    if( failure > this_player()->GetStat("luck")["level"]){
        return trap->SpringTrap(this_player());
    }

    if(failure < wisdom_score){
        write("You fail to disarm the trap.");
    }

    if(failure > (wisdom_score + 100)){
        write("You successfully disarm the trap!");
    }
    return 1;
}
