/* source file -- book object */
/* Original version written by Virtual */
/* Current version written by Vhaeraun */
#define MAX_PG 10
/* inheritance */
inherit "/std/object";
/* global variables */
int cur_pg; /* current page of book or zero if closed */
int max_pg; /* number of pages contained in book */
string page_file; /* path name of pages WITHOUT page number */
string log_file; /* path name where comments are logged */
/* function definitions */
void setup() {
set_name("book");
add_alias("book");
set_long("This is a thick and exclusive looking book bound in "+
"dark blue velvet. In it there are maps over the realm. "+
"It looks very expensive. If you decide to keep it and read it "+
"you might want to open it to be able to look at the maps.\n");
set_weight(10); /* about a pound */
set_value(50); /* about 50 gold pieces */
cur_pg = 0; /* the book is initially closed when loaded */
max_pg = MAX_PG; /* only pages 1 to max_pg exist in the book */
}
string query_log_file() { return log_file; }
void set_log_file(string file_name) { log_file = file_name; }
string query_page_file() { return page_file; }
void set_page_file(string file_name) { page_file = file_name; }
void init() {
::init();
add_action ("open","open"); /* open the book */
add_action ("close","close"); /* close the book */
add_action ("page","page"); /* turn to specified page */
add_action ("next","next"); /* turn to next page */
add_action ("prev","prev"); /* turn to previous page */
add_action ("comment","comment"); /* store comments about book */
}
int open(string str) {
if ( str == "book" && !cur_pg ) { /* is book closed? */
tell_room(environment(this_player()),
"You see "+ capitalize((string)this_player()->query_name())+
" open a book bound in dark blue velvet.\n",this_player());
write("You open the magnificent atlas.\n");
cur_pg = 1; /* open book to page one and... */
cat(page_file + "1"); /* print first page */
return 1;
}
if ( str == "book" && cur_pg ) { /* is book already open? */
tell_room(environment(this_player()),
"You see " + capitalize((string)this_player()->query_name())+
" trying hard to open an already open book and naturaly "+
"he makes a fool out of himself.\n",this_player());
write("The book is already open on page " + cur_pg +".\n");
return 1;
}
return 0;
}
int close(string str) {
if ( str == "book" && cur_pg ) { /* is the book open? */
tell_room(environment(this_player()),
"You see "+ capitalize((string)this_player()->query_name())+
" close a book bound in dark blue velvet.\n",this_player());
write("You close the magnificent atlas.\n");
cur_pg = 0; /* book is now closed */
return 1;
}
if ( str == "book" && !cur_pg ) { /* is the book already closed? */
tell_room(environment(this_player()),
"You see "+ capitalize((string)this_player()->query_name())+
" making a fool out of himself trying to close an already "+
"closed book.\n",this_player());
write("The book is already closed\n");
return 1;
}
return 0;
}
int next() {
int tmp_pg;
if ( !cur_pg ) { /* is the book closed? */
notify_fail("The book is closed. Open the book to turn a page.\n");
return 0;
}
tmp_pg = cur_pg + 1; /* look for next page */
if ( tmp_pg < max_pg ) { /* is next page valid? */
tell_room(environment(this_player()),
capitalize((string)this_player()->query_name())+
" turns a page in a truely magnificent book.\n", this_player());
cur_pg = tmp_pg; /* update current page */
cat(page_file + tmp_pg); /* print page */
return 1;
}
notify_fail("That page does not exist.\n");
return 0;
}
int prev() {
int tmp_pg;
if ( !cur_pg ) { /* is book closed? */
notify_fail("The book is closed. Open the book to turn a page.\n");
return 0;
}
tmp_pg = cur_pg - 1; /* look for previous page */
if ( tmp_pg > 0 ) { /* is previous page valid? */
tell_room(environment(this_player()),
capitalize((string)this_player()->query_name())+
" turns a page in a truely magnificent book.\n", this_player());
cur_pg = tmp_pg; /* update current page */
cat(page_file + tmp_pg); /* print the page */
return 1;
}
notify_fail("That page does not exist.\n");
return 0;
}
int page(string str) {
int tmp_pg;
if (!str || str == "") {
notify_fail("To turn to a page, type 'page <number>'.\n");
return 0;
}
sscanf(str, "%d", tmp_pg); /* convert string to page number */
if ( tmp_pg > 0 && tmp_pg < max_pg ) { /* is page number valid? */
tell_room(environment(this_player()),
capitalize((string)this_player()->query_name())+
" turns a page in a truely magnificent book.\n", this_player());
cur_pg = tmp_pg; /* Updates currentpage */
cat(page_file + tmp_pg); /* print the page */
return 1;
}
notify_fail("That page does not exist.\n");
return 0;
}
int comment(string str) {
if ( !str ) { /* is there a comment? */
notify_fail("To give your comments, type 'comment <your "+
"comment>'.\n");
return 0;
}
write_file(log_file, "\nLogged by "+ this_player()->query_cap_name()+
" on "+ ctime(time()) +" :\n"); /* log name and date then... */
write_file(log_file, str+"\n"); /* log the comment */
write ("Comment saved.\n");
return 1;
}