From the NannyMUD documentation
2000-12-16
board - Information on the std board system.
This file contains a very short description of the /std/boards and the
system around them.
First some simple rules on what is allowed and what is not:
1. It is not allowed to create a postoffice that is accessible
by mortals (other than the one that exist in the village).
If you prefer to read boards with a reader that does not
support reading from afar you might like to make a room
that is not accessible by mortals a postoffice (e.g.
your workroom). This is done easilly (assuming your
workroom supports propertys), just add the line
add_property("postoffice");
in reset-function in your workroom.
2. If you want a private board in your workroom have a look
in the file /std/board/examples/private_board.c
3. If you want a board for another reason e.g. for a club
or guild or something have a look at files in
/std/board/*board.c and /std/board/examples/*.c
Make sure to give the set_name(...) begining with lowercase.
4. If your not satisfied with the boardreader you have do
on of the following:
* Try to change to another boardreader located in
/std/board/reader/
Currently there are five readers available, but
only two are supported by admin (advanced and
compat).
* If it is just a minor change send a mail to the admin in charge
and ask if it can be inserted in the reader you currently use.
* Write a reader of your own that works exactly the way you want.
You probably want to inherit /std/board/reader/reader_base.c
(if you don't use reader_base.c you will at least need to
implement some of its features if mortals are going to be
able to use the reader.)
You are NOT allowed to make a copy of an existing
boardreader and change a little code in it, however
it is allowed to inherit another reader if the creator of
that reader approves.
Some reasons for not copying and change an existing reader:
1. This will make more almost identical readers loaded
in memory, thus consuming unnessecary memory.
2. It will be harder to maintain the readers.
3. It will be almost identical to the existing readers.
4. Admin will not be happy when you waste CPU, memory
and work in ways that creates unnessecary bugs.
* Be brave and use "patch" from the wizmod to do everything
(for brave people that don't want fancy GUI's).
If you really want to use patch or code a reader on your own
and don't have access to /admin you probably want to talk to
the admin to get the design specifications. Beware, the design
is written in Swedish only.
It might also be possible to inherit (NOT copy) another reader,
if you want to do this _always_ talk to the admin first since the
readers are not intended to be used for further inheritance.
Both readers that admin supports inherit reader_base.c, but
some of the other readers (rather old ones) inherit other readers
(since the coders was to lazy to code a few extra lines).
Coding tricks:
Example of easiest way to make a public board:
(put code in reset(0) in room to contain the board and make sure
that room is loaded when the MUD boots).
ob=clone_object("/std/board/mortalboard"); // The basic board thing.
ob->set_name("monks public");
ob->set_long("This board can be used for non-monks to express their "+
"opinion about monks.\n");
ob->set_location("/guilds/monks/rooms/board_room");
ob->init_board(); // Makes the board do what it needs.
Example of easiest way to make a guild/club board:
(put code in reset(0) in room to contain the board and make sure
that room is loaded when the MUD boots).
ob=clone_object("/std/board/guildboard");
ob->set_name("monks private");
ob->set_long("This is a board used for monks to discussions.\n");
ob->set_guild_mark_name("monks_board"); // Use a unique namn of the guildmark.
ob->set_location("/guilds/monks/rooms/corridor3"); // Filename of board position.
ob->init_board(); // Makes the board do what it needs.
Coding you own board reader:
If you are about to add/change commands from advanced reader you
should look at the following functions:
overloadable_reader_help(string)
overloadable_check_commandloop(string, string)
_signal_short(object) // reader can redefine how short for board should
look like for the player. The object is the board_object.
_signal_callback_long(object) // same as callback_short but for long.
Example of cool tricks made by various wizards with the boards:
// A redefinition of short function to show number of unread notes.
// Example from knights guilds
get_short() {
// This prolly deserves the price for ugliest hack, but anyway
int unread;
object reader;
mixed ge;
reader = present("konfreader", this_player());
if(reader)
reader -> __exit();
ge = this_player() -> getenv("BOARDS");
if(ge && mappingp(ge)) {
ge = ge[query_name()];
if(ge) {
ge=ge["read"];
if(ge)
return "The Guild Head board, containing "+
sizeof(m_indices(note_headers))+
" notes, "+sizeof(unread_notes(ge))+" unread";
}
}
return "The Guild Head board, containing "+
sizeof(m_indices(note_headers))+" notes";
}