string amount_of_fuel;
string name;
string long_lit_desc;
string long_unlit_desc;
status is_lit;
int weight;
long() {
if (is_lit) write(long_lit_desc);
else write(long_unlit_desc);
}
reset(arg) {
if (arg)
return;
amount_of_fuel = 0; name = 0; is_lit = 0; weight = 0;
}
set_weight(w) { weight = w; }
query_weight() { return weight; }
short() {
if (is_lit)
return name + " (lit)";
if (amount_of_fuel == 0)
return name + " (burnt out)";
return name;
}
set_name(n) {
name = n;
long_lit_desc = "A " + name + " (lit)\n";
long_unlit_desc = "A " + name + "\n";
}
set_fuel(f) { amount_of_fuel = f; }
init() {
add_action("light"); add_verb("light");
add_action("extinguish"); add_verb("extinguish");
}
light(str) {
if (!str || str != name)
return 0;
if (amount_of_fuel == 0) {
write("End of fuel.\n");
return 1;
}
if (is_lit) {
write("It is already lit.\n");
return 1;
}
is_lit = 1;
write("Ok.\n");
set_light(1);
set_heart_beat(1);
return 1;
}
extinguish(str) {
if (!str || str != name)
return 0;
if(!is_lit) {
write("It is not lit!\n");
return 1;
}
is_lit = 0;
write("Ok.\n");
set_light(-1);
set_heart_beat(0);
return 1;
}
heart_beat() {
object ob;
if (!is_lit)
return;
amount_of_fuel -= 1;
if (amount_of_fuel > 0)
return;
say(name + " goes dark.\n");
set_heart_beat(0);
is_lit = 0;
set_light(-1);
ob = environment();
if (call_other(ob, "query_level"))
call_other(ob, "add_weight", -weight);
destruct(this_object());
}
id(str) {
return str == name;
}
query_value() {
return amount_of_fuel/100 + 1;
}
get() { return 1; }
set_long_lit(str) { long_lit_desc = str; }
set_long_unlit(str) { long_unlit_desc = str; }