/* * New do_help command complicated by Lam (lam@mud.org.pl) 16.2.1998 * also telnet lac.mud.org.pl 4000 - (completely polish mud) * * This snippet works for Envy 2.2, but I think it should work on any Merc * derivative (although it hasn't been tested). * * My version of do_help allows shortcuts of helps, but if the shortcut fits * to more than one help, all the keywords are displayed. * If the argument fits just right, the help is displayed, but other * shortcuts are displayed, too. * * If you're using my code: don't forget to mention in help "help", that * I am the author of this command. Also, please mail me (lam@mud.org.pl) so * I can make more snippets for people who are looking for them. Thank you. * * Please tell me what errors did I make, to make my coding and english * better. Thanx again. * * installation: see the end of the file */ void do_help( CHAR_DATA *ch, char *arg ) { HELP_DATA *help; HELP_DATA *help_short = NULL; char help_short_key [MAX_INPUT_LENGTH]; char helplist [MAX_STRING_LENGTH]; /* it could overflow... */ char key [MAX_INPUT_LENGTH]; char *keylist; bool found = FALSE; bool many = FALSE; if ( *arg == '\0' ) arg = "summary"; /* I suggest summaryxxx or so to prevent shortcuts */ helplist[0] = '\0'; for ( help = help_first; help; help = help->next ) { if ( help->level > get_trust( ch ) ) continue; /* is_name sucks ;) */ for ( keylist = help->keyword; ; ) { keylist = one_argument( keylist, key ); if ( key[0] == '\0' || !str_prefix( arg, key ) ) break; } if ( key[0] == '\0' ) continue; if ( !str_cmp( arg, key ) ) { /* the keyword is extactly like argument */ if ( found ) send_to_char( "\n\r-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r\n\r", ch ); if ( help->level >= 0 && str_cmp( arg, "imotd" ) ) { send_to_char( help->keyword, ch ); send_to_char( "\n\r", ch ); } if ( help->text[0] == '.' ) send_to_char( help->text+1, ch ); else send_to_char( help->text , ch ); found = TRUE; } else { /* short */ if ( !help_short && !many ) { help_short = help; strcpy( help_short_key, key ); } else { if ( help_short ) { strcat( helplist, help_short_key ); strcat( helplist, "\n\r" ); help_short = NULL; } strcat( helplist, key ); strcat( helplist, "\n\r" ); many = TRUE; } } } if ( !found && !many && !help_short ) { send_to_char( "No help on that word.\n\r", ch ); return; } if ( found ) { if ( help_short ) { /* I suggest making this line green */ send_to_char( "\n\rThe argument is also a prefix of keyword:\n\r", ch ); send_to_char( help_short_key, ch ); send_to_char( "\n\r", ch ); } else if ( many ) { /* colour this line too */ send_to_char( "\n\rThe argument is also a prefix of keywords:\n\r", ch ); send_to_char( helplist, ch ); } } else if ( help_short ) { if ( help_short->level >= 0 && str_cmp( help_short_key, "imotd" ) ) { send_to_char( help_short->keyword, ch ); send_to_char( "\n\r", ch ); } if ( help_short->text[0] == '.' ) send_to_char( help_short->text+1, ch ); else send_to_char( help_short->text , ch ); } else if ( many ) { /* This line also should be coloured */ send_to_char( "The word you entered is a prefix of help keywords:\n\r", ch ); send_to_char( helplist, ch ); } return; } /* INSTALLATION: (Envy 2.2) 1. Insert the above function instead of original do_help in act_info.c Now it would work, but type eg. "h c". You will see about 2 screens of text on Envy 2.2 distribution, without any break, even if you have pagelength set to 20 (most of your players have)... The cure for this is: 2. in comm.c in send_to_char() remove lines with if ( strlen( txt ) ) < 600 ). Yes, you don't need to save process time :) leave only the section below else. 3. in comm.c in show_string() just below "On advise by Scott Mobley and others" comment out or remove lines: *scan++ = '\n'; *scan++ = '\r'; leave the line: *scan = 0; Now you will have better working pager. If you wish, in process_output() you may insert \n\r in front of [Please type...]. */ /* ============================================================================= / ______ _______ ____ _____ ___ __ _ ______ ____ ____ _____ / \ | ____|__ __| _ \ / ____\ / _ \| \ / | ____| / __ \| _ \ / ____\ \ / | |__ | | | |_| | | | |_| | |\/| | |___ | | | | |_| | | / / | ___| | | | ___/| | __| _ | | | | ____| | | | | __/| | ___ \ \ | | | | | | | |___| | | | | | | | |____ | |__| | |\ \| |___| | / / |_| |_| |_| o \_____/|_| |_|_| |_|______|o \____/|_| \_|\_____/ \ \ / ============================================================================ ------------------------------------------------------------------------------ ftp://ftp.game.org/pub/mud FTP.GAME.ORG http://www.game.org/ftpsite/ ------------------------------------------------------------------------------ This file came from FTP.GAME.ORG, the ultimate source for MUD resources. ------------------------------------------------------------------------------ */