inherit "std/object"; #define BRIGHTNESS 50 int amount_of_fuel; status is_lighted; void setup() { amount_of_fuel = 2000; set_name("torch"); set_main_plural("torches"); set_short("Torch"); set_long("A small torch.\n"); is_lighted = 0; set_weight(50); set_value(50); } /* setup() */ string short(int i) { if (is_lighted) return ::short(0) + " (lit)"; return ::short(0); } /* short() */ string pretty_plural() { if (is_lighted) return ::pretty_plural() + " (lit)"; return ::pretty_plural(); } /* pretty_plural() */ void set_fuel(int f) { amount_of_fuel = f; } void init() { this_player()->add_command("light", this_object()); this_player()->add_command("extinguish", this_object()); this_player()->add_command("dowse", this_object()); } /* init() */ int do_light() { if (is_lighted) { /* write(capitalize(short(0))+" is already lit.\n"); */ return 0; } if (amount_of_fuel <= 0) { write(capitalize(short(0))+" is burnt out.\n"); return 0; } is_lighted = 1; call_out("out_of_fuel", amount_of_fuel * 2); amount_of_fuel = 0; set_light(BRIGHTNESS); return 1; } /* do_light() */ void out_of_fuel() { /* perhaps we can something clever here with events. */ is_lighted = 0; set_light(0); say("The " + short(0) + " goes out.\n"); write("The " + short(0) + " goes out.\n"); set_long("The remains of a torch. It doesn't look like it has anything "+ "left to burn on it.\n"); } /* out_of_fuel() */ int do_extinguish(object *indir, string s1, string s2, string prep) { int i; if (!is_lighted) { write(capitalize(short(0))+" is not lit.\n"); return 0; } i = remove_call_out("out_of_fuel"); amount_of_fuel = i/2; is_lighted = 0; set_light(0); return 1; } /* do_extenguish() */ void dest_me() { set_light(0); ::dest_me(); } /* dest_me() */ mixed query_dynamic_auto_load() { return ([ "::" : ::query_dynamic_auto_load(), "amount of fuel" : amount_of_fuel, "is lit" : is_lighted, ]); } /* query_dynamic_auto_load() */ void init_dynamic_arg(mapping arg) { amount_of_fuel = arg["amount of fuel"]; if (arg["is lit"]) do_light(); } /* init_dynamic_arg() */