/* * This is a generic torch. * It will have some good initialisations by default. * The torch can't be sold when it is lighted. */ string amount_of_fuel; string name; status is_lighted; int weight; long() { write(short() + "\n"); } reset(arg) { if (arg) return; amount_of_fuel = 2000; name = "torch"; is_lighted = 0; weight = 1; } set_weight(w) { weight = w; } query_weight() { return weight; } short() { if (is_lighted) return name + " (lighted)"; return name; } set_name(n) { name = n; } set_fuel(f) { amount_of_fuel = f; } init() { add_action("light", "light"); add_action("extinguish", "extinguish"); } light(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; } 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()); } id(str) { return str == name; } query_value() { return amount_of_fuel/100; } get() { return 1; } extinguish(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; }