/*
* A guide for new home owners.
*/
inherit "/std/book";
#include <room/newspaper.h>
#define AUTO_LOAD_TAG "newspaper"
private string _paper;
private int _edition;
void setup() {
set_name("newspaper");
set_short("newspaper");
add_alias("paper");
add_plural("papers");
set_long("A bunch of nice newspapers.\n");
set_main_plural("newspapers");
set_weight(10);
set_value(10);
set_ignore_saved_pages(1);
}
int query_binding_force() {
return 100;
}
void setup_paper() {
class article* articles;
class advert* adverts;
class advert data;
string* bits;
int i;
int j;
string header;
string index;
string fluff;
int page;
mixed* stuff;
object ob;
if (_paper && _edition) {
bits = explode(_paper, " ");
if (bits[0] != "The") {
set_short("copy of the " + _paper);
add_adjective( ({ "the" }) );
set_main_plural("copies of the " + _paper);
} else {
set_short("copy of " + _paper);
set_main_plural("copies of " + _paper);
add_plural_adjective("copies");
}
bits = map(bits, (: lower_case($1) :));
add_adjective( ({ "copy", "of" }) );
add_adjective(bits[0..<2]);
add_alias(lower_case(bits[<1]));
//if (bits[0] == "the") {
add_property("determinate", "a ");
//} else {
//add_property("determinate", "The ");
//}
page = query_open_page();
articles = NEWSPAPER_HANDLER->query_edition_articles(_paper, _edition);
set_no_pages(sizeof(articles) + 1);
index = "Edition #" + _edition + " of " + _paper + ".\n%^BOLD%^" +
NEWSPAPER_HANDLER->query_paper_headline(_paper, _edition) +
"%^RESET%^\n\n";
index += sprintf("%2d .... %70-=s\n", 1, "Contents");
for (i = 0; i < sizeof(articles); i++) {
set_open_page(i + 2);
ob = query_current_page();
ob->set_value(0);
if (articles[i]->colour) {
index += "%^" + articles[i]->colour + "%^";
}
switch (articles[i]->type) {
case NEWSPAPER_ARTICLE_TYPE_ADVERTS :
header = "%^BOLD%^%^CYAN%^'Adverts'%^RESET%^\n\n";
adverts = NEWSPAPER_HANDLER->query_edition_adverts(_paper, _edition);
stuff = unique_array(adverts, (: $1->category :) );
foreach (adverts in stuff) {
header += "\n$I$0=" + adverts[0]->category + "\n$I$3= ";
foreach (data in adverts) {
header += data->text + "\n-- " + data->author + "\n\n";
}
}
index += sprintf("%2d .... %70-=s\n", i + 2, articles[i]->title);
break;
case NEWSPAPER_ARTICLE_TYPE_SECTION :
header = "%^BOLD%^" + articles[i]->title + "'%^RESET%^\n\n";
for (j = i + 1; j < sizeof(articles); j++) {
if (articles[j]->type == NEWSPAPER_ARTICLE_TYPE_SECTION) {
break;
}
header += sprintf("%2d .... %70-=s\n", i + 2, articles[j]->title);
}
index += sprintf("%2d -=== %65|=s ===-\n", i + 2, articles[i]->title);
break;
case NEWSPAPER_ARTICLE_TYPE_HTML :
case NEWSPAPER_ARTICLE_TYPE_PLAIN :
header = "%^BOLD%^%^CYAN%^'" + articles[i]->title + "'%^RESET%^ at " +
ctime(articles[i]->date_written)[0..10] + "\n" +
"by " + articles[i]->shown_name;
header += NEWSPAPER_HANDLER->query_article_text_plain(articles[i]);
index += sprintf("%2d .... %70-=s\n", i + 2, articles[i]->title);
break;
}
if (articles[i]->colour) {
index += "%^RESET%^";
}
set_read_mess( header, NEWSPAPER_HANDLER->query_language_for( _paper ),
0 );
}
set_open_page(1);
set_read_mess( index, NEWSPAPER_HANDLER->query_language_for( _paper ), 0);
ob = query_current_page();
ob->set_value(0);
fluff = NEWSPAPER_HANDLER->query_paper_long(_paper);
if (fluff[<1] != '\n') {
fluff += "\n";
}
set_long(fluff + "Edition " + _edition + " of " + _paper + ".\n");
set_open_page(page);
}
} /* setup_paper() */
void set_paper(string paper) {
_paper = paper;
set_long(NEWSPAPER_HANDLER->query_paper_long(_paper));
setup_paper();
} /* set_paper() */
void set_edition(int edition) {
_edition = edition;
setup_paper();
} /* set_edition() */
mapping query_dynamic_auto_load() {
mapping map;
map = ::query_dynamic_auto_load();
add_auto_load_value(map, AUTO_LOAD_TAG, "paper", _paper);
add_auto_load_value(map, AUTO_LOAD_TAG, "edition", _edition);
return map;
} /* query_dynamic_auto_load() */
void init_dynamic_arg(mapping map, object player) {
::init_dynamic_arg(map);
set_paper(query_auto_load_value(map, AUTO_LOAD_TAG, "paper"));
set_edition(query_auto_load_value(map, AUTO_LOAD_TAG, "edition"));
} /* init_dynamic_arg() */