#include "path.h"
inherit "/std/room";
#define LOGGER "/obj/handlers/meeting_log"
object floor;
string chair;
int last_say;
int log_souls;
void setup() {
set_short("Meeting room");
set_long(
"Heaven: Meeting room.\n\n"
" This room is the definition of comfort. Along the oak-paneled walls "
"on every side are book shelves stretching all the way to the high ceiling. "
"One corner has a table adorned with various liquor decanters. The center "
"of the room is filled with all types of large, soft chairs. Each has a "
"foot stool and a small table beside it. Cowering in another corner you see "
"a young scribe rapidly taking notes.\n");
add_exit("south","/w/common","door");
set_light(45);
add_item("wall","These are oak paneled walls, dummy. What more would you "
"have me say about them?\n");
add_item(({"book","book shelf","book shelves"}),"The shelves are all "
"filled with ancient leather-bound volumes. Their collection "
"must have taken quite some time.\n");
add_item("table","All the tables are made of hard woods and are ornately "
"crafted.\n");
add_item("ceiling","This room must be two stories high. You have trouble "
"seeing any details of the ceiling.\n");
add_item("liquor decanters","Made of a fine crystal, these decanters "
"hold any sort of alcohol you might want.\n");
add_item("chair","The chair looks extremely comfortable.\n");
add_item("foot stool","The stool is just what you need to fully relax "
"during a meeting.\n");
add_item("scribe","Being a very young man, this scribe obviously feels "
"dwarfed by the immense characters of your party. Dutifully "
"he takes down the minutes of the meeting.\n");
}
void reset() {
if (floor)
return ;
floor = clone_object("/std/object");
floor->set_name("floor");
floor->set_short("The floor");
floor->set_long(
"This is the floor of the meeting. It gives you the right to speak "+
"during the meeting. Please give this to the next person to speak "+
"after you have finished.\n");
floor->move(this_object());
}
void init() {
string str;
::init();
add_action("log_mode","logmode");
/* So I just banged my gavel.
* You did what?
* I banged my gavel and did the "order in the court thing"
*/
if
("/secure/master"->high_programmer((str=(string)this_player()->query_name()))
|| str == chair) {
add_action("appoint", "appoint");
add_action("bang", "bang");
add_action("recover", "recover"); /* recovers the floor in case of
* loss */
}
}
int appoint(string str) {
object ob;
if (chair && (string)this_player()->query_name() != chair) {
notify_fail("The chair has already been apointed.\n");
return 0;
}
if (!(ob = find_player(str))) {
notify_fail("Sorry, cannot find "+str+" to be the chair.\n");
return 0;
}
chair = str;
say(this_player()->query_cap_name()+" just appointed "+str+" as the "+
"chair of the meeting.\n", ob);
write("Ok, "+str+" is now the chair of the meeting.\n");
tell_object(ob, this_player()->query_cap_name()+
" just appointed you the chair of the meeting.\n");
if (environment(ob) != this_object())
ob->move(this_object());
return 1;
}
int bang(string str) {
if ((string)this_player()->query_name() != chair) {
notify_fail("Only the chair can bang the gavel.\n");
return 0;
}
tell_room(this_object(),
this_player()->query_cap_name()+" bangs the gavel loudly. STOP "+
"STOP!\n");
return 1;
}
int recover() {
if (!floor)
reset();
floor->move(this_player());
write("Floor recovered.\n");
say(this_player()->query_cap_name()+" has recovered the floor.\n");
return 1;
}
int log_mode(string str) {
log_souls = !log_souls;
if(log_souls)
tell_object(this_player(),"Souls will be logged.\n");
else
tell_object(this_player(),"Souls will not be logged.\n");
return 1;
}
/* this will divide up separate conversation. */
void check_expired() {
if( (time() - last_say) > (600) )
LOGGER->log_it("* * * * *\n");
last_say = time();
}
void event_person_say(object ob, string start, string rest) {
check_expired();
LOGGER->log_it(start+rest+"\n");
}
void event_say(object ob, string rest) {
check_expired();
LOGGER->log_it(rest);
}
void event_soul(object ob, string rest) {
if(log_souls) {
check_expired();
LOGGER->log_it(rest);
}
}
void dest_me() {
if (floor)
floor->dest_me();
::dest_me();
}