/**
* This method allows you to recover items from the room.
* @author Pinkfish
* @started Mon Feb 7 01:04:04 PST 2000
* @changed Sun Jul 16 23:43:49 PST 2000 Taffyd
* Added MAX_RECOVER.
*/
#include <obj_parser.h>
inherit "/cmds/base";
#include <move_failures.h>
#include <cmds/bury.h>
#include <playtesters.h>
#include <player.h>
/**
* This is the maximum number of items that can be
* recovered.
*/
#define MAX_RECOVER 20
int cmd_recover(string name) {
object* obs;
object* fail;
object* ok_me;
object* ok_here;
object cont;
object ob;
class obj_match omatch;
#ifdef PT
if (!PLAYTESTER_HAND->query_playtester(this_player()->query_name()) &&
!this_player()->query_creator()) {
add_failed_mess("This command is in play testing at the moment.\n");
return 0;
}
#endif
if (this_player()->query_property("dead")) {
add_failed_mess("You're a disembodied spirit, how do you expect to "
"recover anything at all?\n");
return 0;
}
cont = BURY_EFFECT->query_buried_container(environment(this_player()));
if (!cont) {
add_failed_mess("There is nothing buried here.\n");
return 0;
}
omatch = (class obj_match)match_objects_in_environments(name, cont);
if (omatch->result != OBJ_PARSER_SUCCESS) {
add_failed_mess(match_objects_failed_mess(omatch));
return 0;
}
obs = omatch->objects;
if ( sizeof( obs ) > MAX_RECOVER ) {
add_failed_mess( "You can only recover " +
query_num( MAX_RECOVER ) + " items at a time.\n" );
return 0;
}
fail = ({ });
ok_me = ({ });
ok_here = ({ });
if (sizeof(obs)) {
//
// Recover them...
//
foreach (ob in obs) {
#ifndef __DISTRIBUTION_LIB__
if(interactive(this_player()) &&
PLAYER_MULTIPLAYER_HANDLER->check_multiplayers("recover",
this_player(),
ob)) {
fail += ({ ob });
} else
#endif
if (ob->move(this_player()) == MOVE_OK) {
ok_me += ({ ob });
} else if (ob->move(environment(this_player())) == MOVE_OK) {
ok_here += ({ ob });
} else {
fail += ({ ob });
}
}
if (!sizeof(ok_me) && !sizeof(ok_here)) {
add_failed_mess("Unable to recover $I.\n", fail);
return 0;
}
if (sizeof(ok_me)) {
add_succeeded_mess("$N $V $I.\n", ok_me);
}
if (sizeof(ok_here)) {
add_succeeded_mess("$N $V $I and leave$s " +
(sizeof(ok_here) > 1?"them":"it") +
" here.\n", ok_here);
}
return 1;
} else {
ok_me = all_inventory(cont);
if (sizeof(ok_me)) {
add_failed_mess("Unable to recover " + name + ", available objects "
"are " + query_multiple_short(ok_me) +
".\n");
} else {
add_failed_mess("Unable to recover " + name + ".\n");
}
return 0;
}
} /* cmd_recover() */
mixed* query_patterns() {
return ({ "<string'buried object'>", (: cmd_recover($4[0]) :) });
} /* query_patterns() */