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"; }