// knock.c
// Lets a player knock on a door, which is heard on the other side.
// Mobydick, 1-21-93.
// Pallando put in the check for !str because the error annoyed him. 8-)
#include <mudlib.h>
inherit DAEMON ;
int cmd_knock (string str) {
string dir ;
object env ;
mapping doors, exits ;
notify_fail("Knock on what?\n");
if(!str || str == "" || (str != "on door" && str != "door" &&
str != "on the door" &&
sscanf(str, "on the %s door", dir) != 1 &&
sscanf(str, "on %s door", dir) != 1))
return 0 ;
env = environment(this_player()) ;
if (!env) {
notify_fail ("The void has no doors.\n") ;
return 0 ;
}
doors = env->query("doors") ;
if (!doors) {
notify_fail ("There are no doors here.\n") ;
return 0 ;
}
if(!dir) {
if(sizeof(keys(doors)) > 1) {
notify_fail("Which door do you wish to knock on?\n");
return 0; }
dir = keys(doors)[0];
}
if (!doors[dir]) {
notify_fail ("There is no "+dir+" door.\n") ;
return 0 ;
}
write ("You knock on the "+dir+" door.\n") ;
say (this_player()->query("cap_name")+" knocks on the "+dir+" door.\n") ;
exits = env->query("exits") ;
find_object_or_load(exits[dir]) ;
tell_room (exits[dir], "You hear a knocking sound.\n") ;
return 1 ;
}
string help()
{
return( ""+
"Syntax: knock on <direction> door\n\n"+
"This command makes a sound heard on the other side of the\n"+
" door in direction <direction>\n"+
"" );
}