// Petrarch
// Merentha Lib 1.0
// room.c
#include <std.h>
#include "room.h"
inherit CONTAINER;
mapping __Smells=([]), __Sounds=([]), __Exits=([]), __Items=([]);
string *__InvisExits=({});
int is_room() { return 1; }
void create() {
::create();
}
void init() {
::init();
add_action("cmd_go", ({"go", "enter"}));
}
varargs int cmd_go(string str) {
if(!str) return 0;
if(!__Exits || sizeof(__Exits)==0) return 0;
if(member_array(str, keys(__Exits))==-1) return 0;
if(!file_exists(__Exits[str]) && !file_exists(__Exits[str]+".c"))
message("movement", "As you attempt to move there a massive force pushes you back.\nThe world does not exist past this point.", this_player());
else
this_player()->move_player(__Exits[str]);
return 1;
}
string get_long_exits() {
string *exits=keys(__Exits);
string ret="";
int j,i;
exits-=__InvisExits;
i=sizeof(exits);
if (i==0) return 0;
if (i==1) ret="is one";
else ret="are "+formal_number(i);
ret="There "+ret+" visible exits:%^BOLD%^%^GREEN%^";
j=i;
while(i--) {
if(i==0) {
if(j>1) ret+=" and "+exits[i]+".";
else ret+=" "+exits[i];
} else {
if(i+1!=j) ret+=", "+exits[i];
else ret+=" "+exits[i];
}
}
return ret;
}
string describe_room(int verbose) {
string desc="";
string exits;
if(this_player())
if(admin_p(this_player())) desc+=file_name(this_object())+"\n";
if(verbose) {
desc+=query_long()+"\n";
if(__Smells["default"]) desc+="%^ORANGE%^"+__Smells["default"]+"%^RESET%^\n";
if(__Sounds["default"]) desc+="%^CYAN%^"+__Sounds["default"]+"%^RESET%^\n";
} else {
desc+=query_short()+"\n";
}
desc+="%^BOLD%^%^RED%^"+get_living_contents();
desc+="%^MAGENTA%^\n"+get_nonliving_contents();
if(exits=get_long_exits()) desc+="%^RESET%^%^GREEN%^"+exits;
return desc;
}
void set_smells(mapping args) { __Smells=args; }
void set_smell(string item, string smell) { __Smells[item]=smell; }
void add_smell(string item, string smell) { set_smell(item, smell); }
void remove_smell(string item) { map_delete(__Smells, item); }
mapping query_smells() { return __Smells; }
string query_smell(string item) {
if(!item) item="default";
return __Smells[item];
}
void set_sounds(mapping args) { __Sounds=args; }
void set_sound(string item, string sound) { __Sounds[item]=sound; }
void add_sound(string item, string sound) { set_sound(item, sound); }
void remove_sound(string item) { map_delete(__Sounds, item); }
mapping query_sounds() { return __Sounds; }
string query_sound(string item) {
if(!item) item="default";
return __Sounds[item];
}
void set_exits(mapping args) { __Exits=args; }
void add_exit(string dir, string dest) { __Exits[dir]=dest; }
void remove_exit(string dir) { map_delete(__Exits, dir); }
string query_exit(string dir) { return __Exits[dir]; }
string *query_exits() { return keys(__Exits); }
void set_exit_invis(string dir) { __InvisExits+=({dir}); }
void set_exit_vis(string dir) { __InvisExits-=({dir}); }
void set_items(mapping args) { __Items=args; }
void add_item(string item, string desc) { __Items[item]=desc; }
void remove_item(string item) { map_delete(__Items, item); }
string query_item(string item) {
if (!item) return 0;
if (__Items[item]) return __Items[item];
if (__Items[item+"s"]) return __Items[item+"s"];
if (__Items[item+"es"]) return __Items[item+"es"];
if (__Items[item[0..<2]]) return __Items[item[0..<2]];
if (__Items[item[0..<3]]) return __Items[item[0..<3]];
}