/*    /lib/events/lock_with.c
 *    From the Dead Souls Object Library
 *    The indirect object of locks and unlocks (a key)
 *    Created by Descartes of Borg 960121
 */

private int Disabled      = 0;
private int DisableChance = 50;

// abstract methods
string GetDefiniteShort();
// end abstract methods

int GetDisableChance(){
    return DisableChance;
}

int SetDisableChance(int x){
    return (DisableChance = x);
}

int GetDisabled(){
    return Disabled;
}

int SetDisabled(int x){
    return (Disabled = x);
}

mixed array GetSave(){
    return ({ "Disabled", "DisableChance" });
}

mixed eventLockLock(object who, object what){
    return 1;
}

mixed eventUnlockLock(object who, object what){
    if( GetDisableChance() > random(100) ){
        SetDisabled(1);
        who->eventPrint(capitalize(GetDefiniteShort()) + " gets twisted "
          "slightly out of shape as you try to use it.");
        return 1;
    }
    return 1;
}

mixed indirect_lock_obj_with_obj(object target, object key, string id){
    if( environment() != this_player() ){
        return "#You don't have " + GetDefiniteShort() + "!";
    }
    if( GetDisabled() ){
        return capitalize(GetDefiniteShort()) + " is broken.";
    }
    return 1;
}    

mixed indirect_unlock_obj_with_obj(object target, object key, string id){
    if( environment() != this_player() ){
        return "#You don't have " + GetDefiniteShort() + "!";
    }
    if( GetDisabled() ){
        return capitalize(GetDefiniteShort()) + " is broken.";
    }
    return 1;
}
