/* 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 < 7) { 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; } void do_mpedit(CHAR_DATA *ch, char *argument) { MPROG_CODE *pMcode; char command[MAX_INPUT_LENGTH]; if ( IS_NPC(ch) || ch->pcdata->security < 7 ) { 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( atoi(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; int value; value = atoi(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 < 7) { 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: [%d]\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; } void do_mplist( CHAR_DATA *ch, char *argument ) { 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] %5d\n\r", count, mprg->vnum ); add_buf(buffer, buf); count++; } page_to_char(buf_string(buffer), ch); free_buf(buffer); return; }