/*
* This file defines a general purpose armour. See below for configuration
* functions: set_xx.
*/
/*
* If you are going to copy this file, in the purpose of changing
* it a little to your own need, beware:
*
* First try one of the following:
*
* 1. Do clone_object(), and then configure it. This object is specially
* prepared for configuration.
*
* 2. If you still is not pleased with that, create a new empty
* object, and make an inheritance of this objet on the first line.
* This will automatically copy all variables and functions from the
* original object. Then, add the functions you want to change. The
* original function can still be accessed with '::' prepended on the name.
*
* The maintainer of this LPmud might become sad with you if you fail
* to do any of the above. Ask other wizards if you are doubtful.
*
* The reason of this, is that the above saves a lot of memory.
*/
string name, alias, short_desc, long_desc;
string type;
int worn, ac, value, weight;
object worn_by;
object next;
string info;
void reset(int arg)
{
if(arg)
return;
type = "armour";
}
void link(object ob)
{
next = ob;
}
object remove_link(string str)
{
object ob;
if (str == name) {
ob = next;
next = 0;
return ob;
}
if (next)
next = next->remove_link(str);
return this_object();
}
void init() {
add_action("wear", "wear");
add_action("remove", "remove");
}
string rec_short()
{
if(next)
return name + ", " + next->rec_short();
return name;
}
string short() {
if (!short_desc)
return 0;
if (worn)
return short_desc + " (worn)";
return short_desc;
}
long(string str) {
write(long_desc);
}
int id(string str)
{
return str == name || str == alias || str == type;
}
object test_type(string str)
{
if(str == type)
return this_object();
if(next)
return next->test_type(str);
return 0;
}
int tot_ac()
{
if(next)
return ac + next->tot_ac();
return ac;
}
string query_type() { return type; }
int query_value() { return value; }
int query_worn() { return worn; }
string query_name() { return name; }
int armour_class() { return ac; }
int wear(string str)
{
object ob;
if (!id(str))
return 0;
if (environment() != this_player()) {
write("You must get it first!\n");
return 1;
}
if (worn) {
write("You already wear it!\n");
return 1;
}
next = 0;
ob = this_player()->wear(this_object());
if(!ob) {
worn_by = this_player();
worn = 1;
return 1;
}
write("You already have an armour of class " + type + ".\n");
write("Worn armour " + ob->short() + ".\n");
return 1;
}
int get() { return 1; }
int drop(int silently) {
if (worn) {
worn_by->stop_wearing(name);
worn = 0;
worn_by = 0;
if (!silently)
tell_object(environment(this_object()),"You drop your worn armour.\n");
}
return 0;
}
int remove(string str) {
if (!id(str))
return 0;
if (!worn) {
return 0;
}
worn_by->stop_wearing(name);
worn_by = 0;
worn = 0;
return 1;
}
int query_weight() { return weight; }
void set_id(string n) { name = n; }
void set_name(string n) { name = n; }
void set_short(string s) { short_desc = s; long_desc = s + ".\n"; }
void set_value(int v) { value = v; }
void set_weight(int w) { weight = w; }
void set_ac(int a) { ac = a; }
void set_alias(string a) { alias = a; }
void set_long(string l) { long_desc = l; }
void set_type(string t) {
type = t;
}
void set_arm_light(int l) { set_light(l); }
void set_info(string i) {
info = i;
}
string query_info() {
return info;
}