/* -*- LPC -*- */
/*
* $Locker: $
* $Id: shovel.c,v 1.4 1998/03/25 12:39:18 pinkfish Exp $
* $Log: shovel.c,v $
* Revision 1.4 1998/03/25 12:39:18 pinkfish
* Fixe dup the index in a sepaerate thingy problem.
*
* Revision 1.3 1998/03/25 04:59:42 jeremy
* More autodoc updating.
*
* Revision 1.1 1998/03/24 07:20:53 pinkfish
* Initial revision
*
*
*/
/**
* This is a clonable shovel object (a "shovel" in this case being anything
* that can be used for digging, from a garden trowel to a steam shovel).
* The "dig" command is defined with the following syntax:
* <ul>
* <li> "with <direct:object> in <string>"
* <li> "with <direct:object> in <indirect:object>"
* <li> "with <direct:object>"
* <li> "[in] <string> with <direct:object>"
* <li> "[in] <indirect:object> with <direct:object>"
* </ul><br>
* The do_dig() function tries to call a function dig() on this_player()'s
* environment, which should be defined as
* <p><code>
* int dig( object indir, string indir_s )
* </code><p>
* where
* <ul>
* <li> <i>indir</i> is the <indirect:object> matched (if any)
* <li> <i>indir_s</i> is the <string> matched, or the string that
* matched <indirect:object>
* </ul><br>
* Note that the command can match either actual objects or just strings;
* also note that, although it will match room items, the object passed
* won't really be of much use (which is why the string is passed also).
*
* @index dig
*/
inherit "/obj/weapon";
string *patterns = ({
"with <direct:object> in <string>",
"with <direct:object> in <indirect:object>",
"with <direct:object>",
"[in] <string> with <direct:object>",
"[in] <indirect:object> with <direct:object>"
});
/**
* @ignore yes
*/
void init(){
this_player()->add_command("dig", this_object(), patterns);
} /* init() */
/**
* @ignore yes
*/
int do_dig( object *things, string dir_match, string
indir_match, mixed *args, string pattern) {
object *obj, indir;
string indir_s;
if (!objectp(environment(this_player()))) {
return 0;
}
obj=this_player()->query_holding();
if(member_array(this_object(), obj) == -1){
this_player()->add_failed_mess(this_object(), "You must hold the $D to "
"dig with it.\n", ({}));
return 0;
}
if (pattern == patterns[4]) {
if (!objectp(indir = things[0])) {
return 0;
}
indir_s = args[0];
} else if (pattern == patterns[3]) {
indir_s = args[0];
indir = 0;
} else if (pattern == patterns[2]) {
indir_s = 0;
indir = 0;
} else if (pattern == patterns[1]) {
if (!objectp(indir = things[0])) {
return 0;
}
indir_s = args[1];
} else if (pattern == patterns[0]) {
indir_s = args[1];
indir = 0;
} else {
return 0;
}
// This is causing multiple failure messages, so I'll take it out until
// the problem is sorted out.
//this_player()->add_failed_mess(this_object(), "This doesn't appear to "
// "be a good place for digging.\n", ({ }));
return environment(this_player())->dig(indir, indir_s);
} /* do_dig() */
/** @ignore yes */
mapping query_static_auto_load() {
if ( explode( file_name( this_object() ), "#" )[ 0 ] == "/obj/shovel" )
return int_query_static_auto_load();
return ([ ]);
} /* query_static_auto_load() */