#include <lib.h> #include <vendor_types.h> inherit LIB_ITEM; private int charge,rechargeable, drainable,drainrate,fullcharge; private string powertype,celltype; int Spent(){ string *tmp; if(rechargeable == 1) return 1; if(!charge || charge <= 0){ charge = 0; SetShort("a spent power cell"); tmp = GetAdjectives(); tmp += ({"spent", "empty", "drained", "used"}); SetAdjectives(tmp); } return 1; } void create(){ ::create(); AddSave( ({ "charge" }) ); SetKeyName("cell"); SetId(({"battery"})); SetAdjectives(({"power","generic"})); SetShort("a generic power cell"); SetLong("This is a generic power cell."); SetMass(1); SetBaseCost(4); SetVendorType(VT_TREASURE); rechargeable=0; drainable = 1; drainrate = 1; Spent(); } void init(){ ::init(); if(living(environment(this_object())) ) this_object()->eventUse(0); if( charge < 200 ) SetBaseCost(0); Spent(); } int SetPowerType(string str) {powertype=str; return 1; } int SetCellType(string str) {celltype=str; return 1; } int SetCharge(int i) {charge = i; fullcharge = i; return 1; } int GetCharge() { return charge; } string GetPowerType() { return powertype; } string GetCellType() { return celltype; } int SetRechargeable(int i) { rechargeable = i; return i;} int GetRechargeable() { return rechargeable;} int SetDrainable(int i) { drainable = i; return i; } int GetDrainable() { return drainable; } int SetDrainRate(int i) { drainrate = i; return i; } int GetDrainRate() { return drainrate; } int ModCharge(int i) { if(!charge) charge = 0; if(i) charge += i; return charge; } int eventDrain(int i){ if( drainable != 1 ) return 0; if(!charge) charge = 0; if(charge && charge > 0) charge -= i; if(charge && charge < 0) Spent(); if(!charge) Spent(); if( charge < 200 ) SetBaseCost(0); return charge; } int eventCharge(int i){ if(!charge) charge =0; if(i) charge += i; return charge; } int eventUse(int i){ if(i == 0) { set_heart_beat(0); return 1; } if(!drainable) drainable = 1; if(drainable && drainable == 0) drainrate = 0; else if(!drainable) drainable = 1; if( !i || !intp(i) ) i = drainrate; set_heart_beat(i); } void heart_beat(){ eventDrain(GetDrainRate() || 1); }