// Added <read all>, and updated set_properties, set_short, set_long
// Nialson, Apr 19, 1994
#include <std.h>
#include <daemons.h>
#include <dirs.h>
inherit ROOM;
void init() {
::init();
add_action("help", "help");
add_action("read", "read");
add_action("cmd_law", "law");
}
void create() {
::create();
set_properties( (["light" : 2,
"indoors" : 1,
"no attack" : 1,
"no steal" : 1,
"no castle" : 1]) );
set_short("Praxis Library");
set_long(
"Welcome to the Praxis Library of adventuring!\n"
"The community of the Nightmare reality comes here to learn. "
"Type <read books> to see what books are on the shelves. "
"Type <read [title]> to read a particular book.");
set_items(
(["library" : "The laws of reality are explained in here.",
"shelf" : "It has books on it.",
"shelves" : "Books fill them.",
"book" : "One of many.",
"books" : "They are everywhere on the shelves."]) );
set_exits(
(["west" : "/domains/Praxis/east_road1"]) );
}
varargs void display_policy( mapping policy, int as_law )
{
int then;
if( as_law )
{
then = policy["Time"];
printf( "As of %s, %d %s, %d NM; at the urging of %s\n\n\t\t\%s\n\n%s",
day( then ), date( then ), month( then ), year( then ),
capitalize( policy["Proposer"] ), policy["Title"], policy["Text"] );
return;
}
printf(
"Title: %s\nProposer: %s\n\n%s",
policy["Title"],
capitalize( policy["Proposer"] ),
policy["Text"],
);
if( sizeof( policy["Aye"] ) )
write( wrap( "In favour: " + implode( policy["Aye"], ", " ) ) );
if( sizeof( policy["Nay"] ) )
write( wrap( "Against: " + implode( policy["Nay"], ", " ) ) );
if( sizeof( policy["Abs"] ) )
write( wrap( "Abstentions: " + implode( policy["Abs"], ", " ) ) );
}
int cmd_law( string arg )
{
mapping policy;
if( arg )
{
if( undefinedp( policy = (mapping)POLITICS_D-> query_policy( arg )
) )
write( "There is no law: " + arg + "\n" );
else
display_policy( policy, 1 );
} else {
printf( "The book of law contains the following:\n %s\n",
wrap( implode( keys( POLITICS_D-> query_policies() ), "\n " ) ) );
}
return 1;
}
int read(string str) {
string *dir;
string *tmp;
string tmp_str;
int i,j,k;
if(!str) {
notify_fail("Read what?\n");
return 0;
}
if(str == "volume" || str == "book") {
notify_fail("Which "+str+"?\n");
return 0;
}
if(str == "volumes" || str == "books") {
message("info", "The books available for reading are:",this_player());
dir = get_dir(DIR_LIBRARY + "/");
for(i=0; i<sizeof(dir); i++) dir[i] = replace_string(dir[i], "_", " ");
message("info", replace_string(format_page(dir, 3), "\n", " "),
this_player());
message("info", "Type <read [book name]> to read a particular book.", this_player());
message("info", "Type <read all> to read all of them.", this_player());
return 1;
}
if(str == "all") {
dir = get_dir(DIR_LIBRARY + "/");
for(i=0; i<sizeof(dir); i++) {
if(!creatorp(this_player()))
message("info", "--==** Book: "+
replace_string(dir[i], "_", " ")+" **==--", this_player());
this_player()->more(DIR_LIBRARY + "/"+dir[i]);
}
return 1;
}
str = replace_string(str, " ", "_");
if(file_size(DIR_LIBRARY + "/"+str) == -1) {
notify_fail("There is no book here by that title.\n");
return 0;
}
this_player()->more(DIR_LIBRARY + "/"+str);
return 1;
}
int help(string str) {
if(!str) return 0;
if(str != "library") {
notify_fail("You help "+str+".\n");
return 0;
}
write("You can read what is in the library.\nType <read books>.\n");
return 1;
}