#include <properties.h>
#include <language.h>

inherit "/obj/tools/MGtool";
inherit "/std/secure_thing";

protected void create()
{
  if(!clonep(this_object()))
    return;
  secure_thing::create();
  MGtool::create();
  SetProp(P_NAME,"Ankh");
  SetProp(P_GENDER,NEUTER);
  SetProp(P_IDS,({"ankh","xxtool"}));
}

string _query_short()
{
  ::_query_short();
  return "Ein Ankh am Halsband.\n";
}

string _query_long()
{
  ::_query_long();
  return
    "Ein Halsband, an dem ein Ankh haengt.\n"
    +	"Ein Ankh sieht ungefaehr so aus wie ein Kreuz aber eben nicht ganz.\n";
}

string name( int d1, int d2 )
{
  return ::name(d1,d2);
}

int id( string str )
{
  ::id(str);
  return member( ({"ankh","xxtool"}),str ) != -1;
}

