/* -*- LPC -*- */
/*
* $Locker: $
* $Id: identify.c,v 1.11 2003/07/15 08:00:19 pinkfish Exp $
*
*/
#define EFFECT "/std/effects/object/identity_hold"
inherit "/cmds/base";
mixed cmd(object *indirect_obs, string new_name)
{
string word;
object thing;
object *things;
int *ees;
int keep;
if (!new_name) {
things = filter(indirect_obs, (: $1->query_identifier() :));
if (!sizeof(things)) {
if (sizeof(indirect_obs) > 1) {
write("You do not have any of those objects identified.\n");
} else {
write("You do not have " + indirect_obs[0]->the_short() +
" identified.\n");
}
} else foreach (thing in things) {
write("You have " + thing->the_short() + " identified as \"" +
thing->query_full_identifier() + "\".\n");
}
} else if (sizeof(indirect_obs) == 1) {
// Create the effect and set it up...
word = lower_case(new_name);
if (word == "none") {
// Remove the effect.
ees = indirect_obs[0]->effects_matching(EFFECT->query_classification());
if (!sizeof(ees)) {
add_failed_mess("No identities to remove.");
return 0;
}
keep = indirect_obs[0]->query_keep();
indirect_obs[0]->delete_effect(ees[0]);
if (keep) {
thing->add_effect( EFFECT, ([ "keep" : 1 ]) );
}
// Readd it if the keep is needed.
write("You remove the description from " +
indirect_obs[0]->the_short() + ".\n");
} else {
indirect_obs[0]->add_effect(EFFECT, ([ "identity" : word ]));
write(indirect_obs[0]->the_short() + " may now be identified as \"" +
word + "\".\n");
}
} else {
write("You may only identify one thing at a time.\n");
}
return 1;
} /* cmd() */
mixed *query_patterns() {
return ({ "<indirect:object:me'object'> as <string'some new name'>",
(: cmd($1, $4[1]) :),
"<indirect:object:me'object(s)'>",
(: cmd($1, 0) :) });
} /* query_patterns() */