/* 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 "tables.h"
#include "olc.h"
#include "recycle.h"
#include "const.h"
void save_area args ( ( AREA_DATA *pArea ) );
#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 },
{ "delete", mpedit_delete },
{ "?", 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 },
{ "delete", opedit_delete },
{ "?", 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 },
{ "delete", rpedit_delete },
{ "?", 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;
}
if (!str_cmp(command, "delete") )
{
if(argument[0] == '\0')
{
send_to_char("Syntax: mpedit delete [vnum]\n\r", ch);
return;
}
sprintf ( log_buf, "$N deleting mprog '%s'.", argument );
wiznet ( log_buf, ch, NULL, WIZ_OLC, WIZ_SECURE, get_trust ( ch ) );
mpedit_delete ( 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;
}
if (!str_cmp(command, "delete") )
{
if(argument[0] == '\0')
{
send_to_char("Syntax: opedit delete [vnum]\n\r", ch);
return;
}
sprintf ( log_buf, "$N deleting oprog '%s'.", argument );
wiznet ( log_buf, ch, NULL, WIZ_OLC, WIZ_SECURE, get_trust ( ch ) );
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;
}
if (!str_cmp(command, "delete") )
{
if(argument[0] == '\0')
{
send_to_char("Syntax: rpedit delete [vnum]\n\r", ch);
return;
}
sprintf ( log_buf, "$N deleting rprog '%s'.", argument );
wiznet ( log_buf, ch, NULL, WIZ_OLC, WIZ_SECURE, get_trust ( ch ) );
rpedit_delete ( 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;
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;
send_to_char("ObjProgram Code Created.\n\r",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);
sprintf(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);
sprintf(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);
sprintf(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->min_vnum, mprg->vnum, ch->in_room->area->max_vnum) )
{
ad = get_vnum_area(mprg->vnum);
if ( ad == NULL )
blah = '?';
else
if ( IS_BUILDER(ch, ad) )
blah = '*';
else
blah = ' ';
sprintf(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" );
}
page_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->min_vnum, oprg->vnum, ch->in_room->area->max_vnum) )
{
ad = get_vnum_area(oprg->vnum);
if ( ad == NULL )
blah = '?';
else
if ( IS_BUILDER(ch, ad) )
blah = '*';
else
blah = ' ';
sprintf(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" );
}
page_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->min_vnum, rprg->vnum, ch->in_room->area->max_vnum) )
{
ad = get_vnum_area(rprg->vnum);
if ( ad == NULL )
blah = '?';
else
if ( IS_BUILDER(ch, ad) )
blah = '*';
else
blah = ' ';
sprintf(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" );
}
page_to_char(buf_string(buffer), ch);
free_buf(buffer);
return FALSE;
}
void unlink_mprog(long pnum)
{
PROG_LIST *list, *list_next;
MOB_INDEX_DATA *pMob;
long vnum = 0;
int nMatch = 0, count, pos = 0;
for(vnum = 0 ; nMatch < top_mob_index; vnum++)
{
if((pMob = get_mob_index(vnum)) == NULL)
continue;
nMatch++;
count = -1;
for ( list = pMob->mprogs; list != NULL; list = list_next )
{
list_next = list->next;
count++;
/* Important line */
if(list->vnum != pnum)
continue;
/* Next part taken from medit_delprog */
if(count == 0)
{
REMOVE_BIT ( pMob->mprog_flags, pMob->mprogs->trig_type );
list = pMob->mprogs;
pMob->mprogs = list->next;
free_mprog ( list );
}
else
{
while ( ( list_next = list->next ) && ( ++pos < count ) )
list = list_next;
if ( list_next )
{
REMOVE_BIT ( pMob->mprog_flags, list_next->trig_type );
list->next = list_next->next;
free_mprog ( list_next );
}
}
}
}
}
void unlink_oprog(long pnum)
{
PROG_LIST *list, *list_next;
OBJ_INDEX_DATA *pObj;
long vnum = 0;
int nMatch = 0, count, pos = 0;
for(vnum = 0 ; nMatch < top_obj_index; vnum++)
{
if((pObj = get_obj_index(vnum)) == NULL)
continue;
nMatch++;
count = -1;
for ( list = pObj->oprogs; list != NULL; list = list_next )
{
list_next = list->next;
count++;
if(list->vnum != pnum)
continue;
if(count == 0)
{
REMOVE_BIT ( pObj->oprog_flags, pObj->oprogs->trig_type );
list = pObj->oprogs;
pObj->oprogs = list->next;
free_oprog ( list );
}
else
{
while ( ( list_next = list->next ) && ( ++pos < count ) )
list = list_next;
if ( list_next )
{
REMOVE_BIT ( pObj->oprog_flags, list_next->trig_type );
list->next = list_next->next;
free_oprog ( list_next );
}
}
}
}
}
void unlink_rprog(long pnum)
{
PROG_LIST *list, *list_next;
ROOM_INDEX_DATA *pRoom;
long vnum = 0;
int nMatch = 0, count, pos = 0;
for(vnum = 0 ; nMatch < top_room; vnum++)
{
if((pRoom = get_room_index(vnum)) == NULL)
continue;
nMatch++;
count = -1;
for ( list = pRoom->rprogs; list != NULL; list = list_next )
{
list_next = list->next;
count++;
if(list->vnum != pnum)
continue;
if(count == 0)
{
REMOVE_BIT ( pRoom->rprog_flags, pRoom->rprogs->trig_type );
list = pRoom->rprogs;
pRoom->rprogs = list->next;
free_rprog ( list );
}
else
{
while ( ( list_next = list->next ) && ( ++pos < count ) )
list = list_next;
if ( list_next )
{
REMOVE_BIT ( pRoom->rprog_flags, list_next->trig_type );
list->next = list_next->next;
free_rprog ( list_next );
}
}
}
}
}
MPEDIT ( mpedit_delete )
{
PROG_CODE *curr, *prev, *temp;
long value = atol ( argument );
AREA_DATA *ad;
if ( IS_NULLSTR ( argument ) || value < 1 )
{
send_to_char( "Syntax : mpedit create [vnum]\n\r", ch );
return FALSE;
}
if ( get_prog_index ( value, PRG_MPROG ) == NULL )
{
send_to_char( "MPEdit : Mob program not found.\n\r", ch );
return FALSE;
}
ad = get_vnum_area(value);
if(ad == NULL)
{
send_to_char("MPEdit : Mob program not assigned to an area.\n\r", ch);
return FALSE;
}
if (ch && !IS_BUILDER ( ch, ad ) )
{
send_to_char( "MPEdit : Insufficient security to create MobProgs.\n\r",
ch );
return FALSE;
}
unlink_mprog(value);
prev = NULL;
for ( curr = mprog_list; curr != NULL; prev = curr, curr = temp )
{
temp = curr->next;
if(curr->vnum != value)
continue;
if ( prev == NULL )
mprog_list = mprog_list->next;
else
prev->next = curr->next;
free_mpcode ( curr );
save_area(ad);
}
if(ch)
send_to_char( "MobProgram Code Deleted.\n\r", ch );
return TRUE;
}
OPEDIT ( opedit_delete )
{
PROG_CODE *curr, *prev, *temp;
long value = atol ( argument );
AREA_DATA *ad;
if ( IS_NULLSTR ( argument ) || value < 1 )
{
send_to_char( "Syntax : opedit create [vnum]\n\r", ch );
return FALSE;
}
if ( get_prog_index ( value, PRG_OPROG ) == NULL )
{
send_to_char( "OPEdit : Obj program not found.\n\r", ch );
return FALSE;
}
ad = get_vnum_area(value);
if(ad == NULL)
{
send_to_char("OPEdit : Obj program not assigned to an area.\n\r", ch);
return FALSE;
}
if ( ch && !IS_BUILDER ( ch, ad ) )
{
send_to_char( "OPEdit : Insufficient security to create ObjProgs.\n\r",
ch );
return FALSE;
}
unlink_oprog(value);
prev = NULL;
for ( curr = oprog_list; curr != NULL; prev = curr, curr = temp )
{
temp = curr->next;
if(curr->vnum != value)
continue;
if ( prev == NULL )
oprog_list = oprog_list->next;
else
prev->next = curr->next;
free_mpcode ( curr );
save_area(ad);
}
if(ch)
send_to_char( "Obj Program Code Deleted.\n\r", ch );
return TRUE;
}
RPEDIT ( rpedit_delete )
{
PROG_CODE *curr, *prev, *temp;
long value = atol ( argument );
AREA_DATA *ad;
if ( IS_NULLSTR ( argument ) || value < 1 )
{
send_to_char( "Syntax : rpedit create [vnum]\n\r", ch );
return FALSE;
}
if ( get_prog_index ( value, PRG_RPROG ) == NULL )
{
send_to_char( "RPEdit : Room program not found.\n\r", ch );
return FALSE;
}
ad = get_vnum_area(value);
if(ad == NULL)
{
send_to_char("RPEdit : Room program not assigned to an area.\n\r", ch);
return FALSE;
}
if (ch && !IS_BUILDER ( ch, ad ) )
{
send_to_char( "RPEdit : Insufficient security to create RoomProgs.\n\r",
ch );
return FALSE;
}
unlink_rprog(value);
prev = NULL;
for ( curr = rprog_list; curr != NULL; prev = curr, curr = temp )
{
temp = curr->next;
if(curr->vnum != value)
continue;
if ( prev == NULL )
rprog_list = rprog_list->next;
else
prev->next = curr->next;
free_mpcode ( curr );
save_area(ad);
}
if(ch)
send_to_char( "Room Program Code Deleted.\n\r", ch );
return TRUE;
}