/***************************************************************************
* _/ _/ *
* _/_/_/ _/_/ _/_/_/ _/ _/_/ _/ _/ _/_/_/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/ *
***************************************************************************
* Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius), *
* Additional credits are in the help file CODECREDITS *
* All Rights Reserved. *
***************************************************************************/
#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 OPEDIT( fun ) bool fun(CHAR_DATA *ch, char*argument)
#define RPEDIT( fun ) bool fun(CHAR_DATA *ch, char*argument)
const struct olc_cmd_type mpedit_table[] = {
/* { command function }, */
{"commands", show_commands},
{"create", mpedit_create},
{"code", mpedit_code},
{"show", mpedit_show},
{"list", mpedit_list},
{"?", show_help},
{NULL, 0}
};
const struct olc_cmd_type opedit_table[] = {
/* { command function }, */
{"commands", show_commands},
{"create", opedit_create},
{"code", opedit_code},
{"show", opedit_show},
{"list", opedit_list},
{"?", show_help},
{NULL, 0}
};
const struct olc_cmd_type rpedit_table[] = {
/* { command function }, */
{"commands", show_commands},
{"create", rpedit_create},
{"code", rpedit_code},
{"show", rpedit_show},
{"list", rpedit_list},
{"?", show_help},
{NULL, 0}
};
void mpedit(CHAR_DATA * ch, char *argument)
{
PROG_CODE *pMcode;
char arg[MAX_INPUT_LENGTH];
char command[MAX_INPUT_LENGTH];
int cmd;
AREA_DATA *ad;
smash_tilde(argument);
strcpy(arg, argument);
argument = one_argument(argument, command);
EDIT_MPCODE(ch, pMcode);
if (pMcode)
{
ad = get_vnum_area(pMcode->vnum);
if (ad == NULL) /* ??? */
{
edit_done(ch);
return;
}
if (!IS_BUILDER(ch, ad))
{
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))
{
if ((*mpedit_table[cmd].olc_fun) (ch, argument)
&& pMcode)
if ((ad =
get_vnum_area(pMcode->vnum)) != NULL)
SET_BIT(ad->area_flags, AREA_CHANGED);
return;
}
}
interpret(ch, arg);
return;
}
void opedit(CHAR_DATA * ch, char *argument)
{
PROG_CODE *pOcode;
char arg[MAX_INPUT_LENGTH];
char command[MAX_INPUT_LENGTH];
int cmd;
AREA_DATA *ad;
smash_tilde(argument);
strcpy(arg, argument);
argument = one_argument(argument, command);
EDIT_OPCODE(ch, pOcode);
if (pOcode)
{
ad = get_vnum_area(pOcode->vnum);
if (ad == NULL) /* ??? */
{
edit_done(ch);
return;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("OPEdit: Insufficient security to modify code.\n\r",
ch);
edit_done(ch);
return;
}
}
if (command[0] == '\0')
{
opedit_show(ch, argument);
return;
}
if (!str_cmp(command, "done"))
{
edit_done(ch);
return;
}
for (cmd = 0; opedit_table[cmd].name != NULL; cmd++)
{
if (!str_prefix(command, opedit_table[cmd].name))
{
if ((*opedit_table[cmd].olc_fun) (ch, argument)
&& pOcode)
if ((ad =
get_vnum_area(pOcode->vnum)) != NULL)
SET_BIT(ad->area_flags, AREA_CHANGED);
return;
}
}
interpret(ch, arg);
return;
}
void rpedit(CHAR_DATA * ch, char *argument)
{
PROG_CODE *pRcode;
char arg[MAX_INPUT_LENGTH];
char command[MAX_INPUT_LENGTH];
int cmd;
AREA_DATA *ad;
smash_tilde(argument);
strcpy(arg, argument);
argument = one_argument(argument, command);
EDIT_RPCODE(ch, pRcode);
if (pRcode)
{
ad = get_vnum_area(pRcode->vnum);
if (ad == NULL) /* ??? */
{
edit_done(ch);
return;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("RPEdit: Insufficient security to modify code.\n\r",
ch);
edit_done(ch);
return;
}
}
if (command[0] == '\0')
{
rpedit_show(ch, argument);
return;
}
if (!str_cmp(command, "done"))
{
edit_done(ch);
return;
}
for (cmd = 0; rpedit_table[cmd].name != NULL; cmd++)
{
if (!str_prefix(command, rpedit_table[cmd].name))
{
if ((*rpedit_table[cmd].olc_fun) (ch, argument)
&& pRcode)
if ((ad =
get_vnum_area(pRcode->vnum)) != NULL)
SET_BIT(ad->area_flags, AREA_CHANGED);
return;
}
}
interpret(ch, arg);
return;
}
void do_mpedit(CHAR_DATA * ch, char *argument)
{
PROG_CODE *pMcode;
char command[MAX_INPUT_LENGTH];
argument = one_argument(argument, command);
if (is_number(command))
{
int vnum = atoi(command);
AREA_DATA *ad;
if ((pMcode = get_prog_index(vnum, PRG_MPROG)) == NULL)
{
send_to_char("MPEdit : That vnum does not exist.\n\r",
ch);
return;
}
ad = get_vnum_area(vnum);
if (ad == NULL)
{
send_to_char
("MPEdit : Vnum is not assigned an area.\n\r",
ch);
return;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("MPEdit : Insufficient security to modify area.\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 : mpedit create [vnum]\n\r", ch);
return;
}
mpedit_create(ch, argument);
return;
}
send_to_char("Syntax : mpedit [vnum]\n\r", ch);
send_to_char(" mpedit create [vnum]\n\r", ch);
return;
}
void do_opedit(CHAR_DATA * ch, char *argument)
{
PROG_CODE *pOcode;
char command[MAX_INPUT_LENGTH];
argument = one_argument(argument, command);
if (is_number(command))
{
int vnum = atoi(command);
AREA_DATA *ad;
if ((pOcode = get_prog_index(vnum, PRG_OPROG)) == NULL)
{
send_to_char("OPEdit : That vnum does not exist.\n\r",
ch);
return;
}
ad = get_vnum_area(vnum);
if (ad == NULL)
{
send_to_char
("OPEdit : Vnum is not assigned an area.\n\r",
ch);
return;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("OPEdit : Insufficient security to modify area.\n\r",
ch);
return;
}
ch->desc->pEdit = (void *) pOcode;
ch->desc->editor = ED_OPCODE;
return;
}
if (!str_cmp(command, "create"))
{
if (argument[0] == '\0')
{
send_to_char("Syntax : opedit create [vnum]\n\r", ch);
return;
}
opedit_create(ch, argument);
return;
}
send_to_char("Syntax : opedit [vnum]\n\r", ch);
send_to_char(" opedit create [vnum]\n\r", ch);
return;
}
void do_rpedit(CHAR_DATA * ch, char *argument)
{
PROG_CODE *pRcode;
char command[MAX_INPUT_LENGTH];
argument = one_argument(argument, command);
if (is_number(command))
{
int vnum = atoi(command);
AREA_DATA *ad;
if ((pRcode = get_prog_index(vnum, PRG_RPROG)) == NULL)
{
send_to_char("RPEdit : That vnum does not exist.\n\r",
ch);
return;
}
ad = get_vnum_area(vnum);
if (ad == NULL)
{
send_to_char
("RPEdit : Vnum is not assigned an area.\n\r",
ch);
return;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("RPEdit : Insufficient security to modify area.\n\r",
ch);
return;
}
ch->desc->pEdit = (void *) pRcode;
ch->desc->editor = ED_RPCODE;
return;
}
if (!str_cmp(command, "create"))
{
if (argument[0] == '\0')
{
send_to_char("Syntax : rpedit create [vnum]\n\r", ch);
return;
}
rpedit_create(ch, argument);
return;
}
send_to_char("Syntax : rpedit [vnum]\n\r", ch);
send_to_char(" rpedit create [vnum]\n\r", ch);
return;
}
MPEDIT(mpedit_create)
{
PROG_CODE *pMcode;
int value = atoi(argument);
AREA_DATA *ad;
if (IS_NULLSTR(argument) || value < 1)
{
send_to_char("Syntax : mpedit create [vnum]\n\r", ch);
return FALSE;
}
ad = get_vnum_area(value);
if (ad == NULL)
{
send_to_char("MPEdit : Vnum is not assigned an area.\n\r",
ch);
return FALSE;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("MPEdit : Insufficient security to create MobProgs.\n\r",
ch);
return FALSE;
}
if (get_prog_index(value, PRG_MPROG))
{
send_to_char("MPEdit: Code vnum already exists.\n\r", ch);
return FALSE;
}
pMcode = new_mpcode();
pMcode->vnum = value;
pMcode->next = mprog_list;
mprog_list = pMcode;
ch->desc->pEdit = (void *) pMcode;
ch->desc->editor = ED_MPCODE;
send_to_char("MobProgram Code Created.\n\r", ch);
return TRUE;
}
OPEDIT(opedit_create)
{
PROG_CODE *pOcode;
int value = atoi(argument);
AREA_DATA *ad;
char buf[MSL];
if (IS_NULLSTR(argument) || value < 1)
{
send_to_char("Syntax : opedit create [vnum]\n\r", ch);
return FALSE;
}
ad = get_vnum_area(value);
if (ad == NULL)
{
send_to_char("OPEdit : Vnum is not assigned an area.\n\r",
ch);
return FALSE;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("OPEdit : Insufficient security to create ObjProgs.\n\r",
ch);
return FALSE;
}
if (get_prog_index(value, PRG_OPROG))
{
send_to_char("OPEdit: Code vnum already exists.\n\r", ch);
return FALSE;
}
pOcode = new_opcode();
pOcode->vnum = value;
pOcode->next = oprog_list;
oprog_list = pOcode;
ch->desc->pEdit = (void *) pOcode;
ch->desc->editor = ED_OPCODE;
xprintf(buf, "ObjProgram Code Created for vnum %d", value);
send_to_char(buf, ch);
return TRUE;
}
RPEDIT(rpedit_create)
{
PROG_CODE *pRcode;
int value = atoi(argument);
AREA_DATA *ad;
if (IS_NULLSTR(argument) || value < 1)
{
send_to_char("Syntax : rpedit create [vnum]\n\r", ch);
return FALSE;
}
ad = get_vnum_area(value);
if (ad == NULL)
{
send_to_char("RPEdit : Vnum is not assigned an area.\n\r",
ch);
return FALSE;
}
if (!IS_BUILDER(ch, ad))
{
send_to_char
("RPEdit : Insufficient security to create RoomProgs.\n\r",
ch);
return FALSE;
}
if (get_prog_index(value, PRG_RPROG))
{
send_to_char("RPEdit: Code vnum already exists.\n\r", ch);
return FALSE;
}
pRcode = new_rpcode();
pRcode->vnum = value;
pRcode->next = rprog_list;
rprog_list = pRcode;
ch->desc->pEdit = (void *) pRcode;
ch->desc->editor = ED_RPCODE;
send_to_char("RoomProgram Code Created.\n\r", ch);
return TRUE;
}
MPEDIT(mpedit_show)
{
PROG_CODE *pMcode;
char buf[MAX_STRING_LENGTH];
EDIT_MPCODE(ch, pMcode);
xprintf(buf,
"Vnum: [%d]\n\r"
"Code:\n\r%s\n\r", pMcode->vnum, pMcode->code);
send_to_char(buf, ch);
return FALSE;
}
OPEDIT(opedit_show)
{
PROG_CODE *pOcode;
char buf[MAX_STRING_LENGTH];
EDIT_OPCODE(ch, pOcode);
xprintf(buf,
"Vnum: [%d]\n\r"
"Code:\n\r%s\n\r", pOcode->vnum, pOcode->code);
send_to_char(buf, ch);
return FALSE;
}
RPEDIT(rpedit_show)
{
PROG_CODE *pRcode;
char buf[MAX_STRING_LENGTH];
EDIT_RPCODE(ch, pRcode);
xprintf(buf,
"Vnum: [%d]\n\r"
"Code:\n\r%s\n\r", pRcode->vnum, pRcode->code);
send_to_char(buf, ch);
return FALSE;
}
MPEDIT(mpedit_code)
{
PROG_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;
}
OPEDIT(opedit_code)
{
PROG_CODE *pOcode;
EDIT_OPCODE(ch, pOcode);
if (argument[0] == '\0')
{
string_append(ch, &pOcode->code);
return TRUE;
}
send_to_char("Syntax: code\n\r", ch);
return FALSE;
}
RPEDIT(rpedit_code)
{
PROG_CODE *pRcode;
EDIT_RPCODE(ch, pRcode);
if (argument[0] == '\0')
{
string_append(ch, &pRcode->code);
return TRUE;
}
send_to_char("Syntax: code\n\r", ch);
return FALSE;
}
MPEDIT(mpedit_list)
{
int count = 1;
PROG_CODE *mprg;
char buf[MAX_STRING_LENGTH];
BUFFER *buffer;
bool fAll = !str_cmp(argument, "all");
char blah;
AREA_DATA *ad;
buffer = new_buf();
for (mprg = mprog_list; mprg != NULL; mprg = mprg->next)
if (fAll
|| ENTRE(ch->in_room->area->lvnum, mprg->vnum,
ch->in_room->area->uvnum))
{
ad = get_vnum_area(mprg->vnum);
if (ad == NULL)
blah = '?';
else if (IS_BUILDER(ch, ad))
blah = '*';
else
blah = ' ';
xprintf(buf, "[%3d] (%c) %5d\n\r", count, blah,
mprg->vnum);
add_buf(buffer, buf);
count++;
}
if (count == 1)
{
if (fAll)
add_buf(buffer, "No existing MobPrograms.\n\r");
else
add_buf(buffer,
"No existing MobPrograms in this area.\n\r");
}
pager_to_char(buf_string(buffer), ch);
free_buf(buffer);
return FALSE;
}
OPEDIT(opedit_list)
{
int count = 1;
PROG_CODE *oprg;
char buf[MAX_STRING_LENGTH];
BUFFER *buffer;
bool fAll = !str_cmp(argument, "all");
char blah;
AREA_DATA *ad;
buffer = new_buf();
for (oprg = oprog_list; oprg != NULL; oprg = oprg->next)
if (fAll
|| ENTRE(ch->in_room->area->lvnum, oprg->vnum,
ch->in_room->area->uvnum))
{
ad = get_vnum_area(oprg->vnum);
if (ad == NULL)
blah = '?';
else if (IS_BUILDER(ch, ad))
blah = '*';
else
blah = ' ';
xprintf(buf, "[%3d] (%c) %5d\n\r", count, blah,
oprg->vnum);
add_buf(buffer, buf);
count++;
}
if (count == 1)
{
if (fAll)
add_buf(buffer, "No existing ObjPrograms.\n\r");
else
add_buf(buffer,
"No existing ObjPrograms in this area.\n\r");
}
pager_to_char(buf_string(buffer), ch);
free_buf(buffer);
return FALSE;
}
RPEDIT(rpedit_list)
{
int count = 1;
PROG_CODE *rprg;
char buf[MAX_STRING_LENGTH];
BUFFER *buffer;
bool fAll = !str_cmp(argument, "all");
char blah;
AREA_DATA *ad;
buffer = new_buf();
for (rprg = rprog_list; rprg != NULL; rprg = rprg->next)
if (fAll
|| ENTRE(ch->in_room->area->lvnum, rprg->vnum,
ch->in_room->area->uvnum))
{
ad = get_vnum_area(rprg->vnum);
if (ad == NULL)
blah = '?';
else if (IS_BUILDER(ch, ad))
blah = '*';
else
blah = ' ';
xprintf(buf, "[%3d] (%c) %5d\n\r", count, blah,
rprg->vnum);
add_buf(buffer, buf);
count++;
}
if (count == 1)
{
if (fAll)
add_buf(buffer, "No existing RoomPrograms.\n\r");
else
add_buf(buffer,
"No existing RoomPrograms in this area.\n\r");
}
pager_to_char(buf_string(buffer), ch);
free_buf(buffer);
return FALSE;
}