/**
* This is the shuffle command which will let us shuffle
* things about in our containers.
* @author Sandoz, Feb. 2003.
*/
/** @ignore yes */
int do_shuffle( object *obs, string things ) {
object ob, *inv, *failed;
string str;
if( !ENV(TP) ) {
add_failed_mess("Oops, you seem to be in limbo.\n");
return 0;
}
if( sizeof(obs) > 1 ) {
add_failed_mess("Sorry, you can only shuffle things inside one "
"container at a time.\n");
return 0;
}
ob = obs[0];
if( ENV(ob) != TP ) {
add_failed_mess("$I "+( query_group(ob) ?
"don't" : "doesn't")+" appear to be in your inventory.\n", obs );
return 0;
}
if( ob->query_closed() ) {
add_failed_mess("You ought to open $I before shuffling the things in "+
( query_group(ob) ? "them" : "it")+".\n", obs );
return 0;
}
if( ob->query_liquid() ) {
add_failed_mess("Sorry, you cannot shuffle anything inside $I.\n",
obs );
return 0;
}
switch( sizeof( inv = match_objects_for_existence( things, ob ) ) ) {
case 0 :
add_failed_mess("There appears to be no '"+things+"' inside $I.\n",
obs );
return 0;
case 1 :
add_failed_mess("If you figure out a way to shuffle one thing only, "
"please enlighten me as well.\n", obs );
return 0;
default :
inv -= filter( inv,
(: $1->query_liquid() && $1->query_continuous() :) );
inv->move(TP);
inv = filter( inv, (: ENV($1) != $2 :), ob );
if( !sizeof(inv) ) {
add_failed_mess("Try as you might, you can't get anything out of "
"$I.\n", obs );
return 0;
}
failed = ({ });
foreach( object thing in shuffle(inv) )
if( thing->move(ob) )
failed += ({ thing });
if( sizeof(failed) )
str = " Unfortunately you don't manage to fit "+
query_multiple_short( failed, "the")+" in $I anymore.";
else
str = "";
add_succeeded_mess( ({
"You take out "+query_multiple_short(inv)+" from $I and put them "
"back randomly one by one."+str+"\n",
"$N take$s out "+query_multiple_short(inv)+" from $I and put$s "
"them back randomly one by one.\n"}), obs );
return 1;
}
} /* do_shuffle() */
/** @ignore yes */
mixed query_patterns() {
return ({"<string'things'> {in|inside} <indirect:object:me'container'>",
(: do_shuffle( $1, $4[0] ) :),
});
} /* query_patterns() */