ADD IN MEM.C /* Help Editor - kermit 1/98 */ HELP_DATA *new_help(void) { HELP_DATA *NewHelp; NewHelp = alloc_perm(sizeof(*NewHelp) ); NewHelp->level = 0; NewHelp->keyword = str_dup(""); NewHelp->text = str_dup(""); NewHelp->next = NULL; return NewHelp; } ADD IN OLC.C --- run_olc_editor --- case ED_MPCODE: mpedit( d->character, d->incomm ); break; + case ED_HELP: + hedit( d->character, d->incomm ); + break; default: return FALSE; --- olc_ed_name --- case ED_MPCODE: sprintf( buf, "MPEdit" ); break; + case ED_HELP: + sprintf( buf, "HEdit" ); + break; default: sprintf( buf, " " ); break; --- show_commands --- case ED_MPCODE: show_olc_cmds( ch, mpedit_table ); break; + case ED_HELP: + show_olc_cmds( ch, hedit_table ); + break; } --- /* Help Editor - kermit 1/98 */ const struct olc_cmd_type hedit_table[] = { /* { command function }, */ { "commands", show_commands }, { "desc", hedit_desc }, { "keywords", hedit_keywords }, { "level", hedit_level }, { "make", hedit_make }, { "show", hedit_show }, { "delete", hedit_delete }, { "?", show_help }, { NULL, 0, } }; --- const struct editor_cmd_type --- { "mpcode", do_mpedit }, + { "help", do_hedit }, { NULL, 0, } --- /* Help Editor - kermit 1/98 */ void hedit( CHAR_DATA *ch, char *argument) { char command[MIL]; char arg[MIL]; int cmd; smash_tilde(argument); strcpy(arg, argument); argument = one_argument( argument, command); if (ch->pcdata->security < 9) { send_to_char("HEdit: Insufficient security to modify code\n\r",ch); edit_done(ch); } if ( !str_cmp(command, "done") ) { edit_done( ch ); return; } if ( command[0] == '\0' ) { hedit_show( ch, argument ); return; } for ( cmd = 0; hedit_table[cmd].name != NULL; cmd++ ) { if ( !str_prefix( command, hedit_table[cmd].name ) ) { (*hedit_table[cmd].olc_fun) ( ch, argument ); return; } } interpret( ch, arg ); return; } /* Help Editor - kermit 1/98 */ void do_hedit( CHAR_DATA *ch, char *argument ) { HELP_DATA *pHelp; char arg1[MIL]; char argall[MAX_INPUT_LENGTH],argone[MAX_INPUT_LENGTH]; bool found = FALSE; strcpy(arg1,argument); if(argument[0] != '\0') { /* Taken from do_help */ argall[0] = '\0'; while (argument[0] != '\0' ) { argument = one_argument(argument,argone); if (argall[0] != '\0') strcat(argall," "); strcat(argall,argone); } for ( pHelp = help_first; pHelp != NULL; pHelp = pHelp->next ) { if ( is_name( argall, pHelp->keyword ) ) { ch->desc->pEdit=(void *)pHelp; ch->desc->editor= ED_HELP; found = TRUE; return; } } } if(!found) { argument = one_argument(arg1, arg1); if(!str_cmp(arg1,"make")) { if (argument[0] == '\0') { send_to_char("Syntax: edit help new [topic]\n\r",ch); return; } if (hedit_make(ch, argument) ) ch->desc->editor = ED_HELP; return; } } send_to_char( "HEdit: There is no default help to edit.\n\r", ch ); return; } ADD IN OLC.H #define ED_HELP 6 void hedit args( ( CHAR_DATA *ch, char *argument ) ); extern const struct olc_cmd_type hedit_table[]; DECLARE_DO_FUN( do_hedit ); /* Help Editor - kermit 1/98 */ DECLARE_OLC_FUN( hedit_show ); DECLARE_OLC_FUN( hedit_make ); DECLARE_OLC_FUN( hedit_desc ); DECLARE_OLC_FUN( hedit_level ); DECLARE_OLC_FUN( hedit_keywords ); DECLARE_OLC_FUN( hedit_delete ); #define EDIT_HELP(Ch, Help) ( Help = (HELP_DATA *)Ch->desc->pEdit ) HELP_DATA *new_help args ( (void) ); void free_help args( ( HELP_DATA * pHelp)); void save_helps args( (void) ); --- ADD IN OLC_ACT.C #define HEDIT( fun ) bool fun( CHAR_DATA *ch, char *argument ) --- /* Help Editor - kermit 1/98 */ HEDIT (hedit_make) { HELP_DATA *pHelp; if (argument[0] == '\0') { send_to_char("Syntax: mpedit make [keyword(s)]\n\r",ch); return FALSE; } pHelp = new_help(); pHelp->keyword = str_dup(argument); pHelp->next = help_first; help_first = pHelp; ch->desc->pEdit = (void *)pHelp; send_to_char("New Help Entry Created.\n\r",ch); return TRUE; } HEDIT( hedit_show) { HELP_DATA *pHelp; char buf[MSL]; EDIT_HELP(ch,pHelp); if(pHelp->delete) { send_to_char("\n\nTHIS HELP IS MARKED FOR DELETION!\n\r",ch); return FALSE; } sprintf(buf, "Level: [%d]\n\r" "Keywords: %s\n\r" "\n\r%s\n\r", pHelp->level, pHelp->keyword, pHelp->text); send_to_char(buf,ch); return FALSE; } HEDIT( hedit_desc) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); if (argument[0] =='\0') { string_append(ch, &pHelp->text); return TRUE; } send_to_char(" Syntax: desc\n\r",ch); return FALSE; } HEDIT( hedit_keywords) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); if(argument[0] == '\0') { send_to_char(" Syntax: keywords [keywords]\n\r",ch); return FALSE; } pHelp->keyword = str_dup(argument); send_to_char( "Keyword(s) Set.\n\r", ch); return TRUE; } HEDIT(hedit_level) { HELP_DATA *pHelp; EDIT_HELP(ch, pHelp); if ( argument[0] == '\0' || !is_number( argument ) ) { send_to_char( "Syntax: level [number]\n\r", ch ); return FALSE; } pHelp->level = atoi( argument ); send_to_char( "Level set.\n\r", ch); return TRUE; } HEDIT( hedit_delete) { HELP_DATA *pHelp; EDIT_HELP(ch,pHelp); if(!pHelp->delete) { pHelp->delete = TRUE; send_to_char("YOU HAVE MARKED THIS HELP DELETION!\n\r",ch); return TRUE; } pHelp->delete = FALSE; send_to_char("YOU HAVE UNMARKED THIS HELP FOR DELETION!\n\r",ch); return TRUE; } ADD IN OLC_SAVE.C --- do_asave --- send_to_char( " asave world - saves the world! (db dump)\n\r", ch ); + send_to_char( " asave helps - saves the help files\n\r", ch ); send_to_char( "\n\r", ch ); --- send_to_char( "Area saved.\n\r", ch ); return; } + /* Save Help File */ + if(!str_cmp(arg1, "helps")) + { + save_helps(); + send_to_char( "Helps Saved.\n\r", ch); + return; + } /* Show correct syntax. */ --- void save_helps() { HELP_DATA * pHelp; FILE * fp; if (! (fp = fopen( "help.are", "w") ) ) { bug( "Open_help: fopen", 0); perror( "help.are"); } fprintf(fp, "#HELPS\n"); for ( pHelp = help_first; pHelp != NULL; pHelp = pHelp->next ) { if(pHelp->delete) continue; fprintf(fp, "%d %s~\n\n%s~\n", pHelp->level, pHelp->keyword, fix_string(pHelp->text)); } fprintf(fp,"0 $~\n\n#$\n"); fclose(fp); return; } --------------- ADD IN MERC.H #define MSL MAX_STRING_LENGTH #define MIL MAX_INPUT_LENGTH struct help_data { HELP_DATA * next; sh_int level; char * keyword; char * text; + bool delete; }; ADD IN INTERP.C { "hedit", do_hedit, POS_DEAD, 0, LOG_NORMAL, 1 }, ADD IN INTERP.H DECLARE_DO_FUN( do_hedit );