/* Wirble, Jan. 2001 */
/*
* $Id: crawl.c,v 1.1 2001/03/09 01:50:53 pinkfish Exp $
*/
/**
* This command allows a player to crawl when his legs are broken or pass
* through low exits, for example.
* @see /std/effects/other/crawling.c
* @see /std/shadows/other/crawling.c
* @author Wirble
* @started Jan. 2001
*/
#define EFFECTPATH "/std/effects/other/"
#define PT "/obj/handlers/playtesters"
inherit "/cmds/base";
int is_in_water( object room );
/** @ignore */
varargs int cmd( string str ) {
if( str == "stop" ) {
if( !this_player()->query_crawling() ) {
this_player()->add_failed_mess( this_object(),
"You should be crawling first in order"
" to stop doing it, don't you "
"think?\n",
({ }) );
return 0;
};
this_player()->stop_crawling();
return 1;
};
if( !str ) {
if( this_player()->query_property( "dead" ) ) {
this_player()->add_failed_mess( this_object(),
"You appear to be dead. There is no "
"necessity to torture your morphogenic"
" arms, you know?\n",
({ }) );
return 0;
} else if( this_player()->query_crawling() ) {
this_player()->add_failed_mess( this_object(),
"You are already crawling.\n",
({ }) );
return 0;
} else if( is_in_water( environment( this_player() ) ) ) {
this_player()->add_failed_mess( this_object(),
"You are in water at the moment, so "
"crawling is impossible.\n",
({ }) );
return 0;
} else {
this_player()->add_effect( EFFECTPATH + "crawling" );
return 1;
};
};
} /* int cmd() */
/* This is necessary to make 'syntax crawl' work correctly.
* So please don't hit me for this not being in the shadow :) */
/** @ignore */
mixed* query_patterns() {
return ({
"", (: cmd() :),
"stop", (: cmd( "stop" ) :)
});
} /* mixed* query_patterns() */
/** @ignore */
int is_in_water( object room ) {
if( inherits( "/std/water_inside.c", room ) ||
inherits("/std/water_outside.c", room ) ||
inherits("/std/uwater.c", room ) ) {
return 1;
} else
return 0;
} /* int is_in_water() */