/*
* This is a generic torch.
* It will have some good initialisations by default.
* The torch can't be sold when it is lighted.
*/
int amount_of_fuel;
string name;
status is_lighted;
int weight;
string short() {
if (is_lighted)
return name + " (lighted)";
return name;
}
void long() {
write(short() + "\n");
}
void reset(int arg) {
if (arg)
return;
amount_of_fuel = 2000; name = "torch"; is_lighted = 0; weight = 1;
}
void set_weight(int w) { weight = w; }
int query_weight() { return weight; }
void set_name(string n) { name = n; }
void set_fuel(int f) { amount_of_fuel = f; }
void init() {
add_action("light", "light");
add_action("extinguish", "extinguish");
}
int light(string str) {
if (!str || str != name)
return 0;
if (is_lighted) {
write("It is already lighted.\n");
return 1;
}
is_lighted = 1;
call_out("out_of_fuel", amount_of_fuel * 2);
if (set_light(1) == 1) {
write("You can see again.\n");
say(this_player()->query_name() +
"lights a " + name + "\n");
} else
write("Ok.\n");
amount_of_fuel = 0;
return 1;
}
void out_of_fuel() {
object ob;
if (set_light(-1) == 0)
say("There is darkness as a " + name + " goes dark.\n");
else
say("The " + name + " goes dark.\n");
ob = environment(this_object());
if (living(ob))
ob->add_weight(-weight);
destruct(this_object());
}
int id(string str) {
return str == name;
}
int query_value() {
return amount_of_fuel/100;
}
int get() { return 1; }
int extinguish(string str) {
int i;
if (str && !id(str))
return 0;
if (!is_lighted)
return 0;
i = remove_call_out("out_of_fuel");
if (i == -1) {
write("Error.\n");
return 1;
}
amount_of_fuel = i/2;
is_lighted = 0;
if (set_light(-1) == 0) {
write("It turns dark.\n");
say(this_player()->query_name() +
" extinguishes the only light source.\n");
} else {
write("Ok.\n");
}
return 1;
}