/* Do not remove the headers from this file! see /USAGE for more info. */
/*
** simple_ob.c -- an object that interacts with verbs very simply
**
** This object is used for more complex interactions (compared to the
** items that are managed by a FAKE_ITEM_MGR). This object can respond
** with different messages when the user attempts to interact with it
** with verbs. A message can be returned for each different verb.
**
** Adjectives are specified for the object using the "pseudo" verb "adjs".
** The long description is set from the response given for the "look" verb
** (if a response is provided). Otherwise, the standard default is used
** (which is something like, "You see nothing special about the ...")
**
** Note that this object is attached to the parent, so it won't actually
** show up in the parent's inventory; the parent should direct the user
** to this object through some aspect of its description.
**
** This object is typically never used directly, but instead via the
** M_ITEMS module (normally inherited by locations the user might visit
** such as a ROOM or a NON_ROOM).
**
** 970114, Deathblade: trimmed and commented
** ???, Rust: created
*/
inherit BASE_OBJ;
private nosave mapping msgs = ([]);
varargs void create(mapping long, string array ids, object dest)
{
if (!clonep()) return;
::create();
set_attached(1);
msgs = long;
if(msgs["look"])
set_long(msgs["look"][<1] == '\n' ? msgs["look"] :
msgs["look"]+"\n");
if(msgs["adjs"])
{
if ( arrayp(msgs["adjs"]) )
add_adj(msgs["adjs"]...);
else
add_adj(msgs["adjs"]);
map_delete(msgs, "adjs");
}
set_id(ids...);
parse_refresh();
move_object(previous_object());
}
// respond to all interaction with self as a direct object of the verb
mixed direct_verb_rule(string verb, string rule, mixed args)
{
string s = msgs[verb];
if(s)
return s[<1] == '\n' ? s : s+"\n";
/* can't use that verb on us... */
return 0;
}
// some special cases because of /std/object/vsupport.c
mixed direct_get_obj(object ob) {
if (msgs["get"])
return msgs["get"];
else
return ::direct_get_obj(ob);
}
mixed direct_pull_obj(object ob) {
if (msgs["pull"])
return msgs["pull"];
else
return ::direct_pull_obj(ob);
}
mixed direct_press_obj(object ob) {
if (msgs["press"])
return msgs["press"];
else
return ::direct_press_obj(ob);
}
mixed direct_search_obj(object ob) {
if (msgs["search"])
return msgs["search"];
else
return ::direct_search_obj(ob);
}