146 lines
3.2 KiB
C
146 lines
3.2 KiB
C
#include <lib.h>
|
|
|
|
inherit LIB_ITEM;
|
|
inherit LIB_CLOSE;
|
|
inherit LIB_LIGHT;
|
|
inherit LIB_CAPTURE;
|
|
|
|
int BugDies = 0;
|
|
|
|
static void create() {
|
|
AddSave(({ "BugDies" }));
|
|
item::create();
|
|
close::create();
|
|
capture::create();
|
|
light::create();
|
|
SetKeyName("jar");
|
|
SetId( ({ "jar" }) );
|
|
SetShort("a jar");
|
|
SetLong("A jar with lid. The lid has holes poked in "
|
|
"the top. It would be perfect to catch bugs in.");
|
|
SetDestroyOnSell(1);
|
|
SetMass(100);
|
|
SetValue(30);
|
|
SetClosed(1);
|
|
SetMaxCapture(1);
|
|
if( BugDies > 1 ) {
|
|
set_heart_beat(2);
|
|
}
|
|
}
|
|
|
|
static void heart_beat() {
|
|
BugDies -= 2;
|
|
if( BugDies < 1 ) {
|
|
eventDarken();
|
|
}
|
|
}
|
|
|
|
int direct_light_obj() { // They cannot use the light command
|
|
return 0;
|
|
}
|
|
|
|
mixed CanCapture(object who, object target) {
|
|
if( !target->id("lightning bug") ) {
|
|
return "The jar has a fit as you try to capture something other "
|
|
"than a lightning bug!";
|
|
}
|
|
if( GetLit() ) {
|
|
return "You already have a lightning bug in there!";
|
|
}
|
|
if( GetClosed() ) {
|
|
return "The jar must be open!";
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
mixed eventCapture(object who, object target) {
|
|
mixed tmp = capture::eventCapture(who, "lightning bug");
|
|
|
|
if( tmp != 1 ) {
|
|
return tmp;
|
|
}
|
|
target->eventDestruct();
|
|
who->eventPrint("You capture a lightning bug in your jar!");
|
|
environment(who)->eventPrint(who->GetName() + " captures a lightning bug "
|
|
"with " + possessive(who) + " jar.", who);
|
|
SetLit(1);
|
|
BugDies = 360;
|
|
set_heart_beat(2);
|
|
}
|
|
|
|
mixed eventDarken() {
|
|
object env = environment();
|
|
|
|
if( env ) {
|
|
env->eventPrint("The %^YELLOW%^lighning bug%^RESET%^ dies.");
|
|
}
|
|
if( living(env) && (env = environment(env)) ) {
|
|
env->eventPrint(possessive_noun(environment()->GetName()) +
|
|
" lightning bug dies and " + possessive(environment()) +
|
|
" jar goes dark.", environment());
|
|
}
|
|
capture::eventFree("lightning bug");
|
|
SetLit(0);
|
|
return 1;
|
|
}
|
|
|
|
mixed eventFree(object who, string target) {
|
|
mixed tmp = capture::eventFree(target);
|
|
object bug;
|
|
|
|
if( tmp != 1 ) {
|
|
return tmp;
|
|
}
|
|
if( GetClosed() ) {
|
|
eventOpen(who, "jar");
|
|
}
|
|
SetLit(0);
|
|
environment(who)->eventPrint("A lightning bug flies free of the jar!");
|
|
bug = new("/realms/ariel/wonder/monsters/lbug");
|
|
bug->eventMove(environment(who));
|
|
return 1;
|
|
}
|
|
|
|
varargs mixed eventOpen(object who, string id, object tool) {
|
|
mixed tmp = close::eventOpen(who, id, tool);
|
|
|
|
if( tmp != 1 ) {
|
|
return tmp;
|
|
}
|
|
if( sizeof(GetCaptured()) ) {
|
|
eventFree(who, "lightning bug");
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
string GetShort() {
|
|
string tmp = item::GetShort();
|
|
|
|
if( GetLit() ) {
|
|
tmp += "\nIt is holding a lightning bug.";
|
|
}
|
|
if( GetClosed() ) {
|
|
tmp += "\nIt is closed.";
|
|
}
|
|
else {
|
|
tmp += "\nIt is open.";
|
|
}
|
|
return tmp;
|
|
}
|
|
|
|
string GetLong(string str) {
|
|
string tmp = item::GetLong();
|
|
|
|
if( GetLit() ) {
|
|
tmp += "\nIt is glowing.";
|
|
}
|
|
if( GetClosed() ) {
|
|
tmp += "\nIt is closed.";
|
|
}
|
|
else {
|
|
tmp += "\nIt is open.";
|
|
}
|
|
return tmp;
|
|
|
|
}
|