/*    /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;
}
