#include <lib.h>
inherit LIB_ITEM;
inherit LIB_SMOKE;
inherit LIB_BURN;
private int BurnRate = 5;
int lastpuff;
static void create(){
item::create();
burn::create();
}
static void heart_beat(){
eventDecreaseFuel(1);
if( GetFuelAmount() < 1){
eventBurnOut();
}
}
mixed direct_light_obj(){
mixed tmp = CanBurn(this_player());
if( tmp == 1 ){
return "Light it with what?";
}
if( GetFuelAmount() < 1 )
return "There is no " + GetFuelType() + " in " + GetShort() + ".";
return 1;
}
mixed eventDarken(){
burn::eventDarken();
set_heart_beat(0);
return 1;
}
varargs mixed eventLight(object who, object tool){
if( GetLit() ) return burn::eventLight(who, tool);
burn::eventLight(who, tool);
set_heart_beat(BurnRate);
return 1;
}
int GetBurnRate(){
return BurnRate;
}
static int SetBurnRate(int x){
return (BurnRate = x);
}
int GetRadiantLight(int ambient){
if( !GetLit() ) return 0;
else return item::GetRadiantLight(ambient);
}
string GetShort(){
return item::GetShort() + burn::GetShort();
}
varargs string GetLong(string unused){
string tmp;
tmp = burn::GetLong(unused);
if( tmp != "" ) return item::GetLong(unused) + "\n" + tmp;
else return item::GetLong(unused);
}
int GetLastPuff(){
return lastpuff;
}
mixed eventSmoke(object who, object what){
if(!GetLit()){
write("It is not lit!");
return 1;
}
write("You smoke your "+remove_article(GetShort())+".");
say(who->GetName()+" smokes from "+possessive(who)+" "
+remove_article(GetShort())+".");
lastpuff = time();
eventDecreaseFuel(1);
if( !GetFuelAmount() ) eventBurnOut();
return 1;
}