/* The following code is based on ILAB OLC by Jason Dinkel */ /* Mobprogram code by Lordrom for Nevermore Mud */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" #include "olc.h" #include "recycle.h" #define MPEDIT( fun ) bool fun(CHAR_DATA *ch, char*argument) #define EDIT_MPCODE(Ch, Code) ( Code = (MPROG_CODE*)Ch->desc->pEdit ) const struct olc_cmd_type mpedit_table[] = { /* { command function }, */ {"commands", show_commands}, {"create", mpedit_create}, {"code", mpedit_code}, {"show", mpedit_show}, {"?", show_help}, {NULL, 0} }; void mpedit ( CHAR_DATA * ch, char *argument ) { MPROG_CODE *pMcode; char arg[MAX_INPUT_LENGTH]; char command[MAX_INPUT_LENGTH]; int cmd; smash_tilde ( argument ); strcpy ( arg, argument ); argument = one_argument ( argument, command ); EDIT_MPCODE ( ch, pMcode ); if ( ch->pcdata->security < 1 ) { send_to_char ( "MPEdit: Insufficient security to modify code\n\r", ch ); edit_done ( ch ); return; } if ( command[0] == '\0' ) { mpedit_show ( ch, argument ); return; } if ( !str_cmp ( command, "done" ) ) { edit_done ( ch ); return; } for ( cmd = 0; mpedit_table[cmd].name != NULL; cmd++ ) { if ( !str_prefix ( command, mpedit_table[cmd].name ) ) { ( *mpedit_table[cmd].olc_fun ) ( ch, argument ); return; } } interpret ( ch, arg ); return; } CH_CMD ( do_mpedit ) { MPROG_CODE *pMcode; char command[MAX_INPUT_LENGTH]; if ( IS_NPC ( ch ) || ch->pcdata->security < 4 ) { send_to_char ( "MPEdit: Insufficient security to modify code.\n\r", ch ); return; } argument = one_argument ( argument, command ); if ( is_number ( command ) ) { if ( !( pMcode = get_mprog_index ( atol ( command ) ) ) ) { send_to_char ( "MPEdit: That vnum does not exist.\n\r", ch ); return; } ch->desc->pEdit = ( void * ) pMcode; ch->desc->editor = ED_MPCODE; return; } if ( !str_cmp ( command, "create" ) ) { if ( argument[0] == '\0' ) { send_to_char ( "Syntax: edit code create [vnum]\n\r", ch ); return; } if ( mpedit_create ( ch, argument ) ) ch->desc->editor = ED_MPCODE; } return; } MPEDIT ( mpedit_create ) { MPROG_CODE *pMcode; long value; value = atol ( argument ); if ( argument[0] == '\0' || value == 0 ) { send_to_char ( "Syntax: mpedit create [vnum]\n\r", ch ); return FALSE; } if ( !IS_NPC ( ch ) && ch->pcdata->security < 5 ) { send_to_char ( "MPEdit: Insuficiente seguridad para crear MobProgs.\n\r", ch ); return FALSE; } if ( get_mprog_index ( value ) ) { send_to_char ( "MPEdit: Code vnum already exists.\n\r", ch ); return FALSE; } if ( !get_vnum_area ( value ) ) { send_to_char ( "MPEdit: Vnum no asignado a ningun Area.\n\r", ch ); return FALSE; } pMcode = new_mpcode ( ); pMcode->vnum = value; pMcode->next = mprog_list; mprog_list = pMcode; ch->desc->pEdit = ( void * ) pMcode; send_to_char ( "MobProgram Code Created.\n\r", ch ); return TRUE; } MPEDIT ( mpedit_show ) { MPROG_CODE *pMcode; char buf[MAX_STRING_LENGTH]; EDIT_MPCODE ( ch, pMcode ); sprintf ( buf, "Vnum: [%ld]\n\r" "Code:\n\r%s\n\r", pMcode->vnum, pMcode->code ); send_to_char ( buf, ch ); return FALSE; } MPEDIT ( mpedit_code ) { MPROG_CODE *pMcode; EDIT_MPCODE ( ch, pMcode ); if ( argument[0] == '\0' ) { string_append ( ch, &pMcode->code ); return TRUE; } send_to_char ( " Syntax: code\n\r", ch ); return FALSE; } CH_CMD ( do_mplist ) { int count; MPROG_CODE *mprg; char buf[MAX_STRING_LENGTH]; BUFFER *buffer; buffer = new_buf ( ); for ( count = 1, mprg = mprog_list; mprg != NULL; mprg = mprg->next ) { sprintf ( buf, "[%3d] %5ld\n\r", count, mprg->vnum ); add_buf ( buffer, buf ); count++; } page_to_char ( buf_string ( buffer ), ch ); free_buf ( buffer ); return; }