/* 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"
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;
}