/**
* This is a study command that gives one a brief overview of the
* statistics of an object.
* @author Sandoz, June 2002.
*/
#include <weapon.h>
#define CONVERT(x) CAP(TP->convert_message(x))
inherit COMMAND_BASE;
/** @ignore yes */
private mixed do_study( object ob ) {
// WEAPONS.
if( ob->query_weapon() ) {
int i;
mixed attacks;
string *types, *names;
names = ob->query_attack_names();
attacks = ob->query_attack_data();
types = ({ });
for( i = 0; i < sizeof(attacks); i += W_ARRAY_SIZE )
if( member_array( attacks[i+W_TYPE], types ) == -1 )
types += ({ attacks[i+W_TYPE] });
return CONVERT( ob->one_short() )+" is a "+
query_num(ob->query_no_limbs())+"-handed weapon that can be "
"used to "+query_multiple_short(names)+" and does "+
query_multiple_short(types)+" damage.";
}
// ARMOUR AND CLOTHES.
if( ob->query_armour() || ob->query_clothing() ) {
mixed tmp;
string ret;
int arm;
if( stringp( tmp = ob->query_type() ) )
tmp = ({ tmp });
tmp = implode( map( tmp,
(: CLOTHING_H->query_zone_names($1) :) ), (: $1 + $2 :) );
arm = ob->query_armour();
ret = CONVERT( ob->one_short() )+" is a piece of "+( arm ? "armour" :
"clothing")+" that is "+( arm ? "protecting" : "covering")+" "+
( !sizeof(tmp) ? "no areas" : "the "+query_multiple_short(
sort_array( uniq_array( tmp ), 1 ) ) );
if( ob->query_scabbard() ) {
ret += ", and can be used to sheath "+ob->query_scabbard_mess(1);
} else if( sizeof( tmp = ob->query_pockets() ) ) {
mixed types;
int i;
types = ([ ]);
for( i = 0; i < sizeof( tmp ); i += 2 )
types[ tmp[ i ] ]++;
types = map( keys(types), (: query_num($2[$1]) + " " + $1 + " pocket"+
( $2[$1] > 1 ? "s" : "" ) :), types );
ret += ", and has "+query_multiple_short(types);
}
return ret+".";
}
// SCABBARDS.
if( ob->query_scabbard() )
return CONVERT( ob->one_short() )+" is a scabbard that can be used "
"to sheath "+ob->query_scabbard_mess(1)+".";
// UNKNOWN.
return ob;
} /* do_study() */
/** @ignore yes */
int cmd( object *obs ) {
string *failed;
mixed info;
int i;
info = map( obs, (: do_study($1) :) );
failed = filter( info, (: objectp($1) :) );
info -= failed;
if( i = sizeof(failed) )
info += ({ CONVERT( query_multiple_short(failed) )+" "+( i == 1 ?
"is" : "are")+" of undeterminable type and cannot be studied."});
TP->more_string( implode( info, "\n")+"\n", "Study");
tell_room( ENV(TP), TP->the_short()+" studies "+
query_multiple_short(obs)+".\n", TP );
return 1;
} /* cmd() */
/** @ignore yes */
mixed query_patterns() { return ({"<indirect:object:me>", (: cmd($1) :) }); }