/*
Basic lantern inherit to use till the new improved and nifty one is
made by someone else.
*/
#include <fuel_handler.h>
inherit "/std/object";
#define BRIGHTNESS 60
#define FUEL_PER_TICK FUEL_TIME
#define MAX_FUEL 3600
/*
Global variables.
*/
int fuel_left;
int is_lit;
void create(){
::create();
}
string short( int i ) {
if ( is_lit )
return ::short( 0 ) + " (lit)";
return ::short( 0 );
}
int do_extinguish() {
if ( !is_lit ) {
this_player()->add_failed_mess(this_object(), "$D is not lit.\n", ({ }));
return 0;
}
FUEL_HANDLER->remove_burner( this_object() );
is_lit = 0;
set_light( 0 );
return 1;
} /* dest_me() */
int do_dowse() {
return do_extinguish();
} /* do_dowse() */
int do_light() {
if ( is_lit ) {
this_player()->add_failed_mess( this_object(), "$D is already lit.\n",
({ }) );
return 0;
}
if ( fuel_left <= 0 ) {
this_player()->add_failed_mess( this_object(), "$D is out of fuel.\n",
({ }) );
return 0;
}
FUEL_HANDLER->add_burner( this_object() );
is_lit = 1;
set_light( BRIGHTNESS );
return 1;
}
void init() {
this_player()->add_command("light", this_object());
this_player()->add_command("extinguish", this_object());
this_player()->add_command("dowse", this_object());
}
void out_of_fuel() {
object env;
is_lit = 0;
fuel_left = 0;
env = environment( this_object() );
FUEL_HANDLER->remove_burner( this_object() );
set_light( 0 );
if ( interactive( env ) ) {
write( poss_short() +" burns out.\n" );
tell_room( environment(env), poss_short() +" burns out.\n", env );
} else
say( poss_short() +" burns out.\n" );
} /* out_of_fuel() */
void consume_fuel() {
fuel_left -= FUEL_PER_TICK;
switch ( fuel_left ) {
case -10000 .. 0:
out_of_fuel();
break;
default:
/* do nothing */
}
} /* consume_fuel() */
string pretty_plural( object thing) {
if ( is_lit )
return ::pretty_plural(thing) + " (lit)";
return ::pretty_plural(thing);
} /* pretty_plural() */
void dest_me() {
set_light( 0 );
FUEL_HANDLER->remove_burner( this_object() );
::dest_me();
} /* dest_me() */
mixed *stats() {
return ::stats() + ({
({ "fuel" , fuel_left, }),
({ "is lit", is_lit, }),
});
} /* stats() */
mapping query_dynamic_auto_load() {
return ([ "::" : ::query_dynamic_auto_load(),
"fuel left" : fuel_left,
"is lit" : is_lit,
]);
} /* query_dynamic_auto_load() */
void init_dynamic_arg( mapping arg ) {
fuel_left = arg["fuel left"];
if ( arg[ "is lit" ] ) {
FUEL_HANDLER->add_burner( this_object() );
is_lit = 1;
set_light(BRIGHTNESS);
}
::init_dynamic_arg( arg["::"] );
} /* init_dynamic_arg() */
int query_fuel_left() {
return fuel_left;
} /* query_fuel_left() */
void set_fuel_left( int i ) {
if ( i > MAX_FUEL ) {
i = MAX_FUEL;
}
fuel_left = i;
} /* set_fuel_left() */
/**
* This method returns the maximum amount of fuel for the object.
*/
int query_max_fuel() {
return MAX_FUEL;
} /* query_max_fuel() */