inherit "inherit/property";
mapping dest_dir=([]);
mapping items=([]);
string short_desc,long_desc;
int query_room() { return 1; }
string short()
{
return short_desc+
"["+(map_array(indices(dest_dir),lambda(string x) { return x[0..0]; })*",")+"]";
}
int id(string s) { return !!items[s]; }
mapping query_items() { return items; }
void add_item(mixed name,mixed desc)
{
if(listp(name)) name=indices(name);
if(pointerp(name))
return map_array(name,add_item,desc);
items[name]=desc;
}
void set_short(string s) { short_desc=s; }
void set_long(string s) { long_desc=s; }
void query_long_desc() { return long_desc; }
string query_long(string item)
{
mixed ret;
if(item)
{
ret=items[item];
if(stringp(ret)) return ret;
}
switch(m_sizeof(dest_dir))
{
case 0:
return long_desc+"\n There are no obvious exits.\n";
case 1:
return long_desc+"\n The only obvious exit is "+m_indices(dest_dir)[0]+".\n";
default:
return long_desc+"\n Obvous exits are: "+implode_nicely(m_indices(dest_dir))+".\n";
}
}
void long(string item)
{
string s;
s=query_long(item);
if(s) write(sprintf("%-=78s\n",s));
}
string expand_dir(string d)
{
switch(d)
{
case "n":
case "north": return "north";
case "s":
case "south": return "south";
case "e":
case "east": return "east";
case "w":
case "west": return "west";
case "northwest":
case "nw": return "northwest";
case "northeast":
case "ne": return "northeast";
case "southeast":
case "se": return "southeast";
case "southwest":
case "sw": return "southwest";
case "u":
case "up": return "up";
case "d":
case "down": return "down";
default:
return d;
}
}
string short_dir(string d)
{
switch(d)
{
case "n":
case "north": return "n";
case "s":
case "south": return "s";
case "e":
case "east": return "e";
case "w":
case "west": return "w";
case "northwest":
case "nw": return "nw";
case "northeast":
case "ne": return "ne";
case "southeast":
case "se": return "se";
case "southwest":
case "sw": return "se";
case "u":
case "up": return "u";
case "d":
case "down": return "d";
default:
return d;
}
}
int do_move()
{
int dest,dir;
dest=dest_dir[dir=expand_dir(query_verb())];
this_player()->move_player(dir,dest);
this_player()->look();
return 1;
}
void init()
{
string tmp;
foreach(m_indices(dest_dir),tmp)
{
add_action(tmp,do_move);
add_action(short_dir(tmp),do_move);
}
}
void add_exit(string dir,string where)
{
if(where[0]!='/')
{
int e;
string file=file_name(this_object());
e=strlen(file);
while(file[--e]!='/');
where=combine_path(where,file[0..e]);
}
dest_dir[dir]=where;
}
/* door action */
/*
([
"open_msg":"",
"close_msg":"",
"other_close_msg":"",
"other_open_msg":"",
"auto_open_msg":"",
"lock_id":"",
])
*/