/*    /lib/comp/seal.c
 *    from the Dead Souls Object Library
 *    Composite component of a closeable and lockable thing
 *    Created by Descartes of Borg 961221
 *    Version: @(#) seal.c 1.2@(#)
 *    Last modified: 96/12/23
 */

#include <lib.h>

inherit LIB_CLOSE;
inherit LIB_LOCK;

//varargs static mixed AddSave(mixed args...) {
//    return ({});
//}

mixed CanLock(object who, string id) {
    mixed tmp = lock::CanLock(who);

    if( tmp != 1 ) {
	return tmp;
    }
    if( !GetClosed() ) {
	return "You cannot lock it while it is open.";
    }
    return 1;
}

varargs mixed CanOpen(object who, string id) {
    if( GetLocked() ) {
	id = "It is locked!";
	return id;
    }
    else return close::CanOpen(who);
}

varargs mixed eventOpen(object who, object tool) {
    if( tool && GetLocked() ) {
	mixed tmp =  eventPick(who, tool);

	if( tmp != 1 || GetLocked() ) {
	    return tmp;
	}
    }
    if( GetLocked() ) {
	send_messages(({ "attempt", "find" }), "$agent_name $agent_verb to "
	  "open $target_name, but $agent_nominative $agent_verb "
	  "it locked.", who, this_object(), environment(who));
	return 1;
    }
    return close::eventOpen(who, tool);
}

void create() {
    //string *c_save, *l_save, *a_save;

    //c_save = close::GetSave();
    //l_save = lock::GetSave();
    //a_save = c_save + l_save;

    //AddSave( a_save );

}
