84 lines
2.9 KiB
C
84 lines
2.9 KiB
C
#include <lib.h>
|
|
#include ROOMS_H
|
|
inherit LIB_ITEM;
|
|
inherit LIB_PRESS;
|
|
|
|
int check_environs();
|
|
int vanish_count = 50;
|
|
static void create() {
|
|
item::create();
|
|
SetKeyName("omni");
|
|
SetId(({"omni","Omni","device"}));
|
|
SetShort("an omni");
|
|
SetLong("This is a small, round metal device, copper in color, "+
|
|
"and similar in appearance to a pocket watch. There is a blinking red light "+
|
|
"next to the tiny metal button at its top.");
|
|
SetMass(10);
|
|
SetDollarCost(300);
|
|
AddItem("button", "A button on the omni.");
|
|
}
|
|
void init() {
|
|
::init();
|
|
check_environs();
|
|
}
|
|
mixed CanPress(object who, string target) {
|
|
if(!present(this_object()->GetKeyName(),who ) && target == "button"){
|
|
return "You do not have the Omni!";
|
|
}
|
|
if(this_object()->GetId() == target){
|
|
return "You cannot push that.";
|
|
}
|
|
return 1;
|
|
}
|
|
mixed eventPress(object who, string where) {
|
|
object *rooms = objects( (: inherits(LIB_ROOM, $1) :) );
|
|
object target;
|
|
int success = 0;
|
|
rooms = filter(rooms, (: member_array(base_name($1), ({ ROOM_START,
|
|
ROOM_FURNACE, ROOM_VOID, ROOM_POD, ROOM_DEATH, ROOM_WIZ,
|
|
ROOM_ARCH, ROOM_NETWORK, ROOM_ROUTER, LIB_FURNACE,
|
|
ROOM_FREEZER }) ) == -1 && strsrch(base_name($1),"/realms/") &&
|
|
!inherits(LIB_FURNACE,$1) &&
|
|
!($1->GetVirtual() && !grepp(base_name($1),",")) &&
|
|
last_string_element(base_name($1),"/") != "death" :) );
|
|
say(who->GetName()+" turns "+dbz_colors("multicolored")+" and disappears!");
|
|
write("You feel momentarily disoriented and find yourself elsewhere!");
|
|
while(!success){
|
|
target = rooms[random(sizeof(rooms)-1)];
|
|
success = who->eventMove(target);
|
|
}
|
|
who->eventDescribeEnvironment();
|
|
tell_room(target, "With a multicolored flash, "+who->GetName()+
|
|
" appears!",who);
|
|
return 1;
|
|
}
|
|
|
|
void heart_beat(){
|
|
object env = environment();
|
|
object *holders;
|
|
if(!env) return;
|
|
holders = filter(containers(this_object()),
|
|
(: interactive($1) :) );
|
|
if(interactive(env)) vanish_count--;
|
|
else if(sizeof(holders) && random(100) > 80) vanish_count--;
|
|
if(vanish_count < 0){
|
|
tell_object(env,"The omni glows brightly and disappears!");
|
|
this_object()->eventDestruct();
|
|
}
|
|
if(vanish_count == 5){
|
|
tell_object(env,"The omni begins to glow a dull red.");
|
|
this_object()->SetLong("This is a small, round metal device, copper in color, "+
|
|
"and similar in appearance to a pocket watch. There is a blinking red light "+
|
|
"next to the tiny metal button at its top. It is glowing a dull red.");
|
|
this_object()->SetShort("an omni (glowing)");
|
|
}
|
|
}
|
|
|
|
int check_environs(){
|
|
if( interactive(environment()) ){
|
|
set_heart_beat(10);
|
|
return 1;
|
|
}
|
|
return 1;
|
|
}
|