/* /std/door.c
* from Nightmare 3.3
* an inheritable door object to go in rooms
* created by Rust 940923
*/
#include <std.h>
inherit OBJECT;
int __Open, __Locked;
string __KeyID;
void create() {
Object::create();
__Open = 0;
__Locked = 0;
__KeyID = "skeleton";
}
void init() {
Object::init();
add_action("cmd_open", "open");
add_action("cmd_close", "close");
add_action("cmd_lock", "lock");
add_action("cmd_unlock", "unlock");
add_action("open", "A_open");
add_action("close", "A_close");
add_action("lock", "A_lock");
add_action("unlock", "A_unlock");
}
void set_key(string key) { __KeyID = key; }
string query_key() { return __KeyID; }
void set_locked(int state) { __Locked = state; }
int query_locked() { return __Locked; }
void set_open(int state) { __Open = state; }
int query_open() { return __Open; }
static
varargs
int
open( string with )
{
if( __Open )
write( "You open the "+query_short()+".\n" );
say( this_player()->query_cap_name() + " opens the "+query_short()+".\n" );
return 1;
if( __Locked )
{
if( with == __KeyID )
{
write( "You unlock and open the "+query_short()+".\n" );
say( this_player()->query_cap_name() + " unlocks and opens the "+query_short()
+".\n" );
__Open = 1;
__Locked = 0;
return 1;
}
notify_fail( "The key doesn't fit the lock.\n" );
return 0;
}
__Open = 1;
return 1;
}
static
int
close()
{
if( !__Open )
return (void)notify_fail("It's already closed, ninny!\n");
__Open = 0;
write( "You close the "+query_short()+".\n" );
say( this_player()->query_cap_name()+" closes the "+query_short()+".\n" );
return 1;
}
static
int
lock( string with )
{
if( __Locked )
return (void)notify_fail("It's already closed, ninny!\n");
if( with != __KeyID )
return (void)notify_fail("The key doesn't fit the lock.\n");
__Locked = 1;
write( "You lock the "+query_short()+".\n" );
say( this_player()->query_cap_name()+" locks the "+query_short()+".\n" );
return 1;
}
static
int
unlock( string with )
{
if( !__Locked )
return (void)notify_fail("It's already unlocked.\n");
if( __KeyID != with )
return (void)notify_fail("The key doesn't fit the lock.\n");
write("You unlock the "+query_short()+".\n");
say( this_player()->query_cap_name()+" unlocks the "+query_short()+".\n" );
__Locked = 0;
return 1;
}
static
int
A_open( string arg )
{
string key;
if( sscanf( arg, "%s with %s", arg, key) == 2 )
{
if( !id( arg ) )
return 0;
return open( key );
}
if( !id( arg ) )
return 0;
return open();
}
static
int
A_close( string arg )
{
if( !id(arg) )
return 0;
return close();
}
static
int
A_lock( string arg )
{
string key;
if( sscanf( arg, "%s with %s", arg, key ) != 2 )
return 0;
if( !id(arg) )
return 0;
return lock( key );
}
static
int
A_unlock( string arg )
{
string key;
if( sscanf( arg, "%s with %s", arg, key ) != 2 )
return 0;
if( !id(arg) )
return 0;
return unlock( key );
}