/* Do not remove the headers from this file! see /USAGE for more info. */
#include <log.h>
inherit CONTAINER;
inherit __DIR__ "living/grammar";
inherit __DIR__ "living/messages";
inherit __DIR__ "living/misc";
inherit __DIR__ "living/effects";
/* This is a pure 'living' object, not what is traditionally meant
* by a living object on LPmuds. Note that find_living() won't
* necessarily find it b/c the driver may not even know it's
* alive. (Why the driver keeps track of livings is beyond me ...)
* [ed note: it doesn't any more; find_living() doesn't exist]
* This is an object than can hold things and do actions. If you
* want it to be able to fight, inherit MONSTER instead.
*/
private string name;
void mudlib_setup()
{
::mudlib_setup();
/* We always should have an 'in' relation in living objects. */
/* This takes care of capacity too */
add_relation("on",100);
set_default_relation("on");
set_def_msgs("living-default");
}
string query_name() { return name; }
void set_name(string n)
{
if (name)
remove_id(lower_case(n));
name = n;
LOG_D->log(LOG_SETNAME, sprintf("%O used set_name() on %O (%s)\n", this_user(), this_object(),query_name()));
add_id_no_plural(lower_case(n));
}
string in_room_desc() { return query_in_room_desc(); }
string introduce_contents(){ return capitalize(query_subjective()) + " is carrying:\n"; }
string invis_name() { return "someone"; }
int is_living() { return 1; }
// This returns an action, so that spells can modify the perspective. i.e:
// You sense: Beek is dead. Other than that, things are going well for him.
string diagnose() { return "$N $vare in perfect health.\n"; }
/* verb interaction */
mixed direct_cross_obj(object ob) {
return "I don't think " + ob->the_short() + " would appreciate that.\n";
}
// Default behavior. Livings that want to behave differently should
// override this.
mixed indirect_give_obj_to_liv(object ob, object liv) {
return capitalize(liv->the_short()) + " politely refuses.\n";
}
mixed direct_get_obj(object ob) {
if (ob == this_body())
return "#You find your presence uplifting.\n";
return "#I can't do everything. If you want to pick up another player, try using your social skills.\n";
}
mixed direct_whisper_liv_str() { return 1; }
mixed direct_whisper_str_to_liv() { return 1; }
mixed direct_whisper_to_liv_str() { return 1; }
mapping lpscript_attributes()
{
return ([
"name" : ({ LPSCRIPT_STRING, "setup", "set_name" }),
"proper_name" : ({ LPSCRIPT_STRING, "setup", "set_proper_name" }),
"gender" : ({ LPSCRIPT_GENDER }),
]);
}
string look_in( string relation )
{
// only trap "in", since you may want something to be behind/on/under a living
if( relation == "in" )
return "With your X-Ray vision?";
else return ::look_in( relation );
}
string query_possessive() { return grammar::query_possessive(); }