/** * This inheritable allows objects or rooms to have help attached to them. * @author Pinkfish */ #include <room.h> #include <nroff.h> mixed query_property( string name ); void add_property( string name, mixed value ); /** * This method sets up the help for the room. All the help file names are * relative to /doc/room unless a complete path is specified. * @param help_file the help file name */ void add_help_file( string help_file ) { string *help; if( help = query_property(ROOM_HELP_FILE_PROPERTY) ) { if( member_array( help_file, help ) == -1 ) help += ({ help_file }); } else { help = ({ help_file }); } add_property(ROOM_HELP_FILE_PROPERTY, help ); } /* add_help_file() */ /** * This method removes the specified help file from the current ones. * @param help_file the help file name to remove */ void remove_help_file( string help_file ) { string* help; if( help = query_property(ROOM_HELP_FILE_PROPERTY) ) { help -= ({ help_file }); add_property(ROOM_HELP_FILE_PROPERTY, help ); } } /* remove_help_file() */ /** * This method returns the help files for the current room. * @return the array of help files */ string *query_help_files() { return query_property(ROOM_HELP_FILE_PROPERTY); } /* query_help_files() */ /** * This method is used to get the directory for the help files. * This should be overridden in higher up objects that use this object. */ string query_help_file_directory() { return "/doc/unknown/"; } /* * Make a string from a nroff input... */ private string nroff_file( string name, int html ) { string nroff_fn, str; if( name[0] != '/') name = query_help_file_directory() + name; nroff_fn = NROFF_DIR + replace( name, "/", "."); if( html ) str = NROFF_HAND->html_file( nroff_fn, 1 ); else str = NROFF_HAND->cat_file( nroff_fn, 1 ); if( !str ) { NROFF_HAND->create_nroff( name, nroff_fn ); if( html ) str = NROFF_HAND->html_file( nroff_fn, 0 ); else str = NROFF_HAND->cat_file( nroff_fn, 0 ); } return str; } /* nroff_file() */ /** * This method returns the help data as a function pointer. * The function pointer needs to be evaluated to create the actual text. * @return the function pointer for the help text */ mixed help_function() { string *help; // So that we can override this function in objects if needed. // Useful to cut down the size of save files. // - Sandoz. help = TO->query_help_files(); if( sizeof(help) ) { string str, *ret = ({ }); foreach( str in help ) ret += ({ ({ replace_string( str, "_", " "), (: nroff_file($(str), 0 ) :) }) }); return ret; } return 0; } /* help_function() */ /** * This method returns the help as a string. * @return the help as a string */ string help_string() { string *help; // See the comments in help_function(). help = TO->query_help_files(); if( sizeof(help) ) { string str, ret = ""; foreach( str in help ) ret += nroff_file( str, 0 ); return str; } return 0; } /* help() */