// Only for use within CWC - Una 07.02.02 inherit "/std/room/furniture/basic"; #define BRIGHTNESS 60 #define FUEL_PER_TICK FUEL_TIME int fuel_left; int is_lit; int has_tealight; mapping vars = (["is lit": 0, "fuel left": 20, "has tealight" : 1 ]); void dest_me(); int do_dowse(); int do_extinguish(); int do_light(); void init(); void init_arg( mixed arg ); void out_of_fuel(); string pretty_plural(string str); mixed query_auto_load(); void setup(); string short( int i ); int do_replace(); void setup() { fuel_left = 3600; is_lit = 0; has_tealight = 0; set_name("lamp"); set_short("stone teahouse lamp"); set_weight( 40 ); set_value( 50000 ); add_adjective( ({ "stone", "teahouse" }) ); add_alias( ({ "teahouse lamp", "stone lamp" }) ); set_long( function() { string str; str = "Shaped like an Agatean teahouse, this lantern creates " "a peaceful ambiance of Auriental tradition in your home as " "it casts a beautiful soft glow through its calligraphed rice " "paper windows. Exquisitely handcrafted in the shape of an " "Agatean teahouse, the front door of the lantern swings open " "to reveal the tealight inside. "; if(has_tealight && is_lit) { fuel_left = find_call_out("out_of_fuel"); return str + "The tealight is burning with a steady yellow " "light."; } if(has_tealight) { return str + "An unlit tealight is sitting in the base."; } if(!fuel_left) { return str + "The tealight has burned itself out."; } else { return str + "There is no tealight in the lamp."; } } ); set_allowed_positions(({"sitting","standing"})); set_allowed_room_verbs((["sitting" : "sits", "standing" : "stands" ])); set_weight(9); set_value(20500); init_dynamic_arg( query_dynamic_auto_load() ); } /* setup() */ void init() { add_command("replace", "tealight in <direct:object:me>"); this_player()->add_command("light", this_object()); this_player()->add_command("extinguish", this_object()); } /* init() */ void dest_me() { set_light( 0 ); ::dest_me(); } /* set_light() */ int do_extinguish() { if ( !has_tealight ) { this_player()->add_failed_mess( this_object(), "There is no " "tealight in $D\n", ({ }) ); return 0; } if ( !is_lit ) { this_player()->add_failed_mess( this_object(), "$D is not " "lit.\n", ({ })); return 0; } this_player()->add_succeeded_mess( this_object(), "$N $V the " "remnants of the tealight in the $De.\n"); fuel_left = remove_call_out( "out_of_fuel" ); is_lit = 0; has_tealight = 1; set_light( 0 ); return 1; } /* do_extinguish() */ int do_light() { if ( is_lit ) { this_player()->add_failed_mess( this_object(), "$D is already " "lit.\n", ({ }) ); return 0; } if( !has_tealight && fuel_left <= 0 ) { return this_player()->add_failed_mess( this_object(), "The " "tealight has burned itself out and needs to be replaced.\n", ({ }) ); return 0; } if( !has_tealight ) { this_player()->add_failed_mess( this_object(), "There is no tealight " "in $D.\n", ({ }) ); return 0; } call_out( "out_of_fuel" , fuel_left ); is_lit = 1; has_tealight = 1; set_light( BRIGHTNESS ); return 1; } /* do_light() */ int do_replace() { int i; object *things; things = all_inventory( this_player() ); for( i = 0; i < sizeof( things ); i++ ){ if( !has_tealight && things[ i ]->query_name() == "tealight" ) { fuel_left = 3600; is_lit = 0; has_tealight = 1; destruct( things[ i ] ); this_player()->add_succeeded_mess( this_object(), "$N $V the " "tealight in the $D.\n", ({ }) ); return 1; } if( has_tealight && things [ i ]->query_name() == "tealight" ) { return this_player()->add_failed_mess( this_object(), "There is " "already a tealight in $D.\n", ({ }) ); return 1; } } return notify_fail( "You do not have a tealight to put in the lamp.\n" ); } mapping query_dynamic_auto_load() { /* if (is_lit) { fuel_left = find_call_out("out_of_fuel"); return ([ "::" : ::query_dynamic_auto_load(), "fuel left" : fuel_left, "is lit" : is_lit, "has tealight" : has_tealight ]); } else if (has_tealight) { return ([ "::" : ::query_dynamic_auto_load(), "fuel left" : fuel_left, "is lit" : is_lit, "has tealight" : has_tealight ]); } */ return ([ "::" : ::query_dynamic_auto_load(), "fuel left" : fuel_left, "is lit" : is_lit, "has tealight" : has_tealight ]); } /* query_dynamic_auto_load() */ void init_dynamic_arg(mapping arg) { if (arg["::"]) ::init_dynamic_arg(arg["::"]); if (arg["fuel left"]) { fuel_left = arg["fuel left"]; } else { fuel_left = 0; } if (arg["is lit"]) { call_out("out_of_fuel", fuel_left); is_lit = 1; set_light(BRIGHTNESS); } if (arg["has tealight"]) { has_tealight = 1; set_light(0); } else { has_tealight = 0; is_lit = 0; } } /* init_dynamic_arg() */ void out_of_fuel() { object env; env = environment(this_object()); is_lit = 0; has_tealight = 0; fuel_left = 0; set_light( 45 ); tell_room(env, "The tealight in the lamp burns out.\n" ); } /* out_of_fuel() */ string pretty_plural(object str) { if ( is_lit ) return ::pretty_plural( str) + " (lit)"; return ::pretty_plural( str); } string short( int i ) { if ( is_lit ) return ::short( 0 ) + " (lit)"; return ::short( 0 ); }