#include <dirs.h>
#include <tasks.h>
inherit COMMAND_BASE;
mixed cmd( object *indirect_obs, string *args) {
string verb, word, *bits, *exits;
object ob;
if ( !creatorp(TP) )
return 0;
if ( this_player()->query_property( "dead" ) )
return notify_fail( "You're dead. You can't shove anything.\n" );
if ( !living( indirect_obs[ 0 ] ) )
return notify_fail( "You can't shove "+
(string)indirect_obs[ 0 ]->the_short() +
"; try dragging it.\n" );
verb = args[ 1 ];
bits = explode( args[ 1 ], " " );
if ( sizeof( bits ) > 1 )
word = implode( bits[ 1 .. ], " " );
else
word = "";
if ( LENGTHEN[ verb ] )
verb = LENGTHEN[ verb ];
exits = (string *)environment( this_player() )->query_exits();
if ( !exits )
return notify_fail( "There don't seem to be any exits here.\n" );
/*
* Put this here, because the same message is needed, but "verb"
* may change.
*/
notify_fail( "There is no exit \""+ verb +"\".\n" );
if ( member_array( verb, exits ) != -1 ) {
if ( environment( this_player() )->query_relative( verb ) )
return 0;
} else {
verb = (string)this_player()->reorient_rel( verb );
if ( member_array( verb, exits ) == -1 )
return 0;
verb = (string)indirect_obs[ 0 ]->find_rel( verb );
}
foreach(ob in indirect_obs) {
if(this_player() == ob)
continue;
if(!ob->exit_command( verb ) )
return notify_fail( "Ack! Something went wrong!\n" );
}
return 1;
} /* cmd() */
mixed *query_patterns() {
return ({ "<indirect:living> <word'direction'> [stealthily]",
(: cmd($1, $4) :),
});
} /* query_patterns() */