inherit "/lib/std/item";

int has_ball;

void init() {
    ::init();
    add_action("place", "place");
}

void clean_up() { return; }

void create() {
    ::create();
    has_ball=0;
    SetKeyName("pedestal");
    SetId( ({ "pedestal" }) );
    SetShort("a pedestal");
    SetLong(
      "This small (gnome-height) pedestal is made from a dark, mysterious stone. "+
      "There is a small indentation on the flat top, as if a round object were "+
      "meant to be placed there. ");
    SetRead("Made by the Wilsonshire and Sons corintian pillar specialists.");
    SetMass(10000);
    SetValue(0);
}

int place(string str)
{
    string this;
    object ths;

    if (!stringp(str) || sscanf(str,"%s on pedestal", this) != 1) return 0;
    if (has_ball) {
	if (!(ths=present(this,this_player()))) return 0;
	if (!ths->id("crystal ball")) return 0;
	write("The pedestal already has a crystal ball on it. ");
	return 1;}
    if (!(ths=present(this,this_player()))) {
	notify_fail("You are not carrying "+this+". ");
	return 0;}
    if (!ths->id("crystal ball")) {
	notify_fail("That's pointless. ");
	return 0;}
    ths->remove();
    write("You place the crystal ball on the pedestal, and watch it fuse into place. ");
    say("Places a crystal ball on the pedestal. The ball is fused to the pedestal");
    SetShort("a pedestal with crystal ball.");
    SetLong(
      "This small (gnome-height) pedestral is made from a dark, mysterious "+
      "stone.  A crystal ball snugly fits into an indentation on the top. As "+
      "you peer at it, you notice barely-perceptible lines of force streaming "+
      "from the stone to the crystal ball. It seems your lessons in discerning "+
      "magic forces have paid off. ");
    add_action("view", "view");
    has_ball=1;
    return 1;
}

int view(string str)
{
    int i;
    string desc;
    object ob, env, *inv;

    write("You gaze into the crystal ball. ");
    if((int)this_player()->query_mp() < 5) {
	write("Your magic powers are just too weak to help you. ");
	return 1;
    }
    if(!(ob = find_living(str))
#if 0
      || creatorp(ob)
#endif
    ) {
	write("No such person in our reality. ");
	return 1;
    }
    this_player()->add_mp(-5);
    if(!(env = environment(ob))) {
	write(ob->query_cap_name()+" is lost. ");
	return 1;
    }
    write("You find "+ob->query_cap_name()+" in the crystal ball: "); 
    ob=environment(ob);
    desc = (string)ob->GetLong()+"\n";
    inv = all_inventory(ob);
    for(i=0; i<sizeof(inv); i++) {
	if(inv[i]->query_invis()) continue;
	desc += "\n"+(string)inv[i]->GetShort()+" "; }
    write(desc);
    return 1;
}
