77 lines
2.3 KiB
C
77 lines
2.3 KiB
C
#include <lib.h>
|
|
#include <vendor_types.h>
|
|
inherit LIB_PIPE;
|
|
|
|
void create(){
|
|
::create();
|
|
SetKeyName("magic pipe");
|
|
SetId( ({"sigpipe","magical pipe","pipe of insight"}) );
|
|
SetAdjectives( ({"magic","magical","kalinash's", "sig", "smoking"}) );
|
|
SetShort("a magic pipe");
|
|
SetLong("This is a handsome pipe for smoking, made of ivory. There "
|
|
"is some sort of inscription written on it.");
|
|
SetMass(5);
|
|
SetBaseCost("silver", 300);
|
|
SetVendorType(VT_TREASURE);
|
|
SetRadiantLight(1);
|
|
SetMaxFuel(300);
|
|
SetItems( ([
|
|
"inscription" : "An inscription on the pipe you can read.",
|
|
]) );
|
|
SetRead( ([
|
|
"default" : "Try: read inscription on pipe",
|
|
"inscription" : "Kalinash's Pipe of Insight",
|
|
]) );
|
|
SetLanguage("common");
|
|
SetFuelAmount(50);
|
|
SetRefuelable(1);
|
|
SetFuelType("smokable material");
|
|
}
|
|
|
|
void init(){
|
|
::init();
|
|
}
|
|
|
|
varargs mixed eventLight(object who, object tool){
|
|
SetBaseCost("silver", 1);
|
|
return ::eventLight(who, tool);
|
|
}
|
|
|
|
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())+".");
|
|
if((((time() - GetLastPuff()) > 10) && random(100) < 25) ||
|
|
creatorp(this_player())){
|
|
object bonus = new(LIB_BONUS);
|
|
object *kbonuses = filter(all_inventory(this_player()),
|
|
(: stringp($1->GetBonusName()) &&
|
|
$1->GetBonusName() == "kpipe_bonus" :) );
|
|
if(sizeof(kbonuses) > 9) return bonus->eventDestruct();
|
|
bonus->SetBonusName("kpipe_bonus");
|
|
bonus->SetStats( ([
|
|
"intelligence" : 1,
|
|
"wisdom" : 1,
|
|
"strength" : -1,
|
|
"durability" : -1,
|
|
]) );
|
|
bonus->SetBonusDuration(300);
|
|
if(bonus->eventMove(who)){
|
|
write("You feel you have a slightly better understanding"+
|
|
" of the world.");
|
|
}
|
|
}
|
|
lastpuff = time();
|
|
eventDecreaseFuel(1);
|
|
if( !GetFuelAmount() ) eventBurnOut();
|
|
return 1;
|
|
}
|
|
|
|
int eventBreak(){
|
|
return 0;
|
|
}
|