/*___________________________________________________________________________*
)()( DalekenMUD 1.12 (C) 2000 )()(
`][' by Martin Thomson, Lee Brooks, `]['
|| Ken Herbert and David Jacques ||
|| ----------------------------------------------------------------- ||
|| Envy Diku Mud improvements copyright (C) 1994 by Michael Quan, ||
|| David Love, Guilherme 'Willie' Arnold, and Mitchell Tse. ||
|| Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael ||
|| Chastain, Michael Quan, and Mitchell Tse. ||
|| Original Diku Mud copyright (C) 1990, 1991 ||
|| by Sebastian Hammer, Michael Seifert, Hans Henrik St{rfeldt, ||
|| Tom Madsen, and Katja Nyboe. ||
|| ----------------------------------------------------------------- ||
|| Any use of this software must follow the licenses of the ||
|| creators. Much time and thought has gone into this software and ||
|| you are benefitting. We hope that you share your changes too. ||
|| What goes around, comes around. ||
|| ----------------------------------------------------------------- ||
|| olc.c ||
|| Central interpreters for OLC and all miscellaneous OLC code. ||
*_/<>\_________________________________________________________________/<>\_*/
#include "mud.h"
#include "olc.h"
#include "db.h"
/*
* Local functions.
*/
AREA_DATA *get_area_data args( ( int vnum ) );
AREA_DATA *get_editing_area( CHAR_DATA *ch )
{
if( !ch->desc )
return ch->in_room->area;
/* Find the area to save. */
if( !str_cmp( ch->desc->interpreter->name, "AEdit" ) )
return (AREA_DATA *) ch->desc->pEdit;
if( !str_cmp( ch->desc->interpreter->name, "OEdit" ) )
return ( (OBJ_INDEX_DATA *) ch->desc->pEdit )->area;
if( !str_cmp( ch->desc->interpreter->name, "MEdit" ) )
return ( (MOB_INDEX_DATA *) ch->desc->pEdit )->area;
if( !str_cmp( ch->desc->interpreter->name, "HEdit" ) )
return ( (HELP_DATA *) ch->desc->pEdit )->area;
return ch->in_room->area;
}
bool is_builder( CHAR_DATA *ch, AREA_DATA *area )
{
CHAR_DATA *rch;
const char *p;
char arg[ MAX_INPUT_LENGTH ];
if( !area || !ch->desc || !( rch = get_char( ch ) ) )
return FALSE;
if( rch->pcdata->security >= area->security )
return TRUE;
p = area->builders;
while( p[0] != '\0' )
{
p = one_argument( p, arg );
if( !str_cmp( arg, rch->name ) || !str_cmp( arg, "all" ) )
return TRUE;
}
return FALSE;
}
const char *olc_ed_vnum( CHAR_DATA *ch )
{
AREA_DATA *pArea;
ROOM_INDEX_DATA *pRoom;
OBJ_INDEX_DATA *pObj;
MOB_INDEX_DATA *pMob;
SOCIAL_DATA *pSocial;
HELP_DATA *pHelp;
RELIGION_DATA *pReligion;
CLAN_DATA *pClan;
PLANE_DATA *pPlane;
MPROG_GLOBAL *mprg;
static char buf[10];
buf[0] = '\0';
if( !ch->desc )
return " ";
if( !str_cmp( ch->desc->interpreter->name, "AEdit" ) )
{
pArea = (AREA_DATA *) ch->desc->pEdit;
sprintf( buf, "%d", pArea ? pArea->vnum : 0 );
}
else if( !str_cmp( ch->desc->interpreter->name, "REdit" ) )
{
pRoom = ch->in_room;
sprintf( buf, "%d", pRoom ? pRoom->vnum : 0 );
}
else if( !str_cmp( ch->desc->interpreter->name, "OEdit" ) )
{
pObj = (OBJ_INDEX_DATA *) ch->desc->pEdit;
sprintf( buf, "%d", pObj ? pObj->vnum : 0 );
}
else if( !str_cmp( ch->desc->interpreter->name, "MEdit" ) )
{
pMob = (MOB_INDEX_DATA *) ch->desc->pEdit;
sprintf( buf, "%d", pMob ? pMob->vnum : 0 );
}
else if( !str_cmp( ch->desc->interpreter->name, "SEdit" ) )
{
if( ( pSocial = (SOCIAL_DATA *) ch->desc->pEdit ) )
return pSocial->name;
return "<none>";
}
else if( !str_cmp( ch->desc->interpreter->name, "HEdit" ) )
{
if( ( pHelp = (HELP_DATA *) ch->desc->pEdit ) )
return pHelp->keyword;
return "<none>";
}
else if( !str_cmp( ch->desc->interpreter->name, "RelEdit" ) )
{
if( ( pReligion = (RELIGION_DATA *) ch->desc->pEdit ) )
return pReligion->name;
return "<none>";
}
else if( !str_cmp( ch->desc->interpreter->name, "CEdit" ) )
{
if( ( pClan = (CLAN_DATA *) ch->desc->pEdit ) )
return pClan->name;
return "<none>";
}
else if( !str_cmp( ch->desc->interpreter->name, "PoseEdit" ) )
strcpy( buf, "--" );
else if( !str_cmp( ch->desc->interpreter->name, "PlEdit" ) )
{
if( ( pPlane = (PLANE_DATA *)ch->desc->pEdit ) )
return pPlane->name;
strcpy( buf, "--" );
}
else if( !str_cmp( ch->desc->interpreter->name, "GMPEdit" ) )
{
mprg = (MPROG_GLOBAL *)ch->desc->pEdit;
sprintf( buf, "%d", mprg ? mprg->vnum : 0 );
}
else
strcpy( buf, " " );
return buf;
}
const char *olc_ed_string( CHAR_DATA *ch )
{
AREA_DATA *pArea;
ROOM_INDEX_DATA *pRoom;
OBJ_INDEX_DATA *pObj;
MOB_INDEX_DATA *pMob;
SOCIAL_DATA *pSocial;
HELP_DATA *pHelp;
RELIGION_DATA *pReligion;
CLAN_DATA *pClan;
PLANE_DATA *pPlane;
MPROG_GLOBAL *mprg;
static char buf[128];
buf[0] = '\0';
if( !ch->desc )
return " ";
if( !str_cmp( ch->desc->interpreter->name, "AEdit" ) )
{
if( ( pArea = (AREA_DATA *) ch->desc->pEdit ) )
sprintf( buf, "%s", pArea->name );
}
else if( !str_cmp( ch->desc->interpreter->name, "REdit" ) )
{
if( ( pRoom = ch->in_room ) )
first_arg( pRoom->name, buf, FALSE );
}
else if( !str_cmp( ch->desc->interpreter->name, "OEdit" ) )
{
if( ( pObj = (OBJ_INDEX_DATA *) ch->desc->pEdit ) )
first_arg( pObj->name, buf, FALSE );
}
else if( !str_cmp( ch->desc->interpreter->name, "MEdit" ) )
{
if( ( pMob = (MOB_INDEX_DATA *) ch->desc->pEdit ) )
first_arg( pMob->name, buf, FALSE );
}
else if( !str_cmp( ch->desc->interpreter->name, "SEdit" ) )
{
if( ( pSocial = (SOCIAL_DATA *) ch->desc->pEdit ) )
return pSocial->name;
}
else if( !str_cmp( ch->desc->interpreter->name, "HEdit" ) )
{
if( ( pHelp = (HELP_DATA *) ch->desc->pEdit ) )
first_arg( pHelp->keyword, buf, FALSE );
}
else if( !str_cmp( ch->desc->interpreter->name, "RelEdit" ) )
{
if( ( pReligion = (RELIGION_DATA *) ch->desc->pEdit ) )
return pReligion->name;
}
else if( !str_cmp( ch->desc->interpreter->name, "CEdit" ) )
{
if( ( pClan = (CLAN_DATA *) ch->desc->pEdit ) )
return pClan->name;
}
else if( !str_cmp( ch->desc->interpreter->name, "PoseEdit" ) )
{
return "<some pose>";
}
else if( !str_cmp( ch->desc->interpreter->name, "PlEdit" ) )
{
if( ( pPlane = (PLANE_DATA *) ch->desc->pEdit ) )
return pPlane->name;
}
else if( !str_cmp( ch->desc->interpreter->name, "GMPEdit" ) )
{
if( ( mprg = (MPROG_GLOBAL *)ch->desc->pEdit ) )
return flag_string( mud_prog_flags, &mprg->type );
return "--";
}
else
strcpy( buf, " " );
return buf;
}
/*****************************************************************************
Name: show_olc_cmds
Purpose: Format up the commands from given table.
Called by: show_commands( olc_act.c ).
****************************************************************************/
void show_olc_cmds( CHAR_DATA *ch, const struct olc_cmd_type *olc_table )
{
char buf[MAX_STRING_LENGTH];
char buf1[MAX_STRING_LENGTH];
int cmd;
int col;
buf1[0] = '\0';
col = 0;
for( cmd = 0; olc_table[cmd].name[0] != '\0'; cmd++ )
{
sprintf( buf, "%-15.15s", olc_table[cmd].name );
strcat( buf1, buf );
if( ++col % 5 == 0 )
strcat( buf1, "\n\r" );
}
if( col % 5 != 0 )
strcat( buf1, "\n\r" );
send_to_char( buf1, ch );
return;
}
/*****************************************************************************
Name: show_commands
Purpose: Display all olc commands.
Called by: olc interpreters.
****************************************************************************/
bool show_commands( CHAR_DATA *ch, const char *argument )
{
if( !str_cmp( ch->desc->interpreter->name, "AEdit" ) )
show_olc_cmds( ch, aedit_table );
else if( !str_cmp( ch->desc->interpreter->name, "REdit" ) )
show_olc_cmds( ch, redit_table );
else if( !str_cmp( ch->desc->interpreter->name, "OEdit" ) )
show_olc_cmds( ch, oedit_table );
else if( !str_cmp( ch->desc->interpreter->name, "MEdit" ) )
show_olc_cmds( ch, medit_table );
else if( !str_cmp( ch->desc->interpreter->name, "SEdit" ) )
show_olc_cmds( ch, sedit_table );
else if( !str_cmp( ch->desc->interpreter->name, "HEdit" ) )
show_olc_cmds( ch, hedit_table );
else if( !str_cmp( ch->desc->interpreter->name, "RelEdit" ) )
show_olc_cmds( ch, reledit_table );
else if( !str_cmp( ch->desc->interpreter->name, "CEdit" ) )
show_olc_cmds( ch, cedit_table );
else if( !str_cmp( ch->desc->interpreter->name, "PoseEdit" ) )
show_olc_cmds( ch, poseedit_table );
else if( !str_cmp( ch->desc->interpreter->name, "PlEdit" ) )
show_olc_cmds( ch, pledit_table );
else if( !str_cmp( ch->desc->interpreter->name, "GMPEdit" ) )
show_olc_cmds( ch, gmpedit_table );
return FALSE;
}
/*****************************************************************************
* Interpreter Tables. *
*****************************************************************************/
const struct olc_cmd_type aedit_table[] =
{
/* { command function }, */
{ "age", aedit_age },
{ "builders", aedit_builder },
{ "clear", aedit_clear },
{ "count", aedit_count },
{ "create", aedit_create },
{ "describe", aedit_desc },
{ "economy", aedit_economy },
{ "filename", aedit_file },
{ "gmplist", edit_gmplist },
{ "name", aedit_name },
{ "order", aedit_order },
{ "plane", aedit_plane },
{ "recall", aedit_recall },
{ "repop", aedit_repop },
{ "reset", aedit_reset },
{ "security", aedit_security },
{ "show", aedit_show },
{ "temp", aedit_temp },
{ "vnum", aedit_vnum },
{ "lvnum", aedit_lvnum },
{ "uvnum", aedit_uvnum },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type redit_table[] =
{
/* { command function }, */
{ "create", redit_create },
{ "clone", redit_clone },
{ "desc", redit_desc },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "down", redit_down },
{ "east", redit_east },
{ "ed", redit_ed },
{ "format", redit_format },
{ "gmplist", edit_gmplist },
{ "oreset", redit_oreset },
{ "mlist", redit_mlist },
{ "mpshow", redit_mpshow },
{ "mpadd", redit_mpadd },
{ "mpdelete", redit_mpdelete },
{ "mpedit", redit_mpedit },
{ "mreset", redit_mreset },
{ "mshow", redit_mshow },
{ "name", redit_name },
{ "north", redit_north },
{ "olist", redit_olist },
{ "show", redit_show },
{ "oshow", redit_oshow },
{ "south", redit_south },
{ "up", redit_up },
{ "walk", redit_move },
{ "west", redit_west },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type oedit_table[] =
{
/* { command function }, */
{ "action", oedit_action },
{ "addaffect", oedit_addaffect },
{ "addperm", oedit_addperm },
{ "addspell", oedit_addspell },
{ "clone", oedit_clone },
{ "condition", oedit_condition },
{ "cost", oedit_cost },
{ "create", oedit_create },
{ "delaffect", oedit_delaffect },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "ed", oedit_ed },
{ "gmplist", edit_gmplist },
{ "level", oedit_level },
{ "long", oedit_long },
{ "mpshow", oedit_mpshow },
{ "mpadd", oedit_mpadd },
{ "mpdelete", oedit_mpdelete },
{ "mpedit", oedit_mpedit },
{ "name", oedit_name },
{ "repop", oedit_repop },
{ "required", oedit_required },
{ "rsfind", oedit_rsfind },
{ "short", oedit_short },
{ "show", oedit_show },
{ "v0", oedit_value0 },
{ "v1", oedit_value1 },
{ "v2", oedit_value2 },
{ "v3", oedit_value3 },
{ "weight", oedit_weight },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type medit_table[] =
{
/* { command function }, */
{ "alignment", medit_align },
{ "class", medit_class },
{ "clone", medit_clone },
{ "create", medit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "desc", medit_desc },
{ "level", medit_level },
{ "long", medit_long },
{ "gmplist", edit_gmplist },
{ "mpshow", medit_mpshow },
{ "mpadd", medit_mpadd },
{ "mpdelete", medit_mpdelete },
{ "mpedit", medit_mpedit },
{ "name", medit_name },
{ "repop", medit_repop },
{ "rsfind", medit_rsfind },
{ "shop", medit_shop },
{ "short", medit_short },
{ "show", medit_show },
{ "spec", medit_spec },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type sedit_table[] =
{
/* { command function }, */
{ "create", sedit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "name", sedit_name },
{ "show", sedit_show },
{ "char_no_arg", sedit_cna },
{ "cna", sedit_cna },
{ "others_no_arg", sedit_ona },
{ "ona", sedit_ona },
{ "char_found", sedit_cf },
{ "cf", sedit_cf },
{ "others_found", sedit_of },
{ "of", sedit_of },
{ "victim_found", sedit_vf },
{ "vf", sedit_vf },
{ "char_auto", sedit_ca },
{ "ca", sedit_ca },
{ "others_auto", sedit_oa },
{ "oa", sedit_oa },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type hedit_table[] =
{
/* { command function }, */
{ "create", hedit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "show", hedit_show },
{ "harea", hedit_harea },
{ "hlist", hedit_hlist },
{ "keywords", hedit_keyword },
{ "level", hedit_trust },
{ "name", hedit_keyword },
{ "text", hedit_text },
{ "trust", hedit_trust },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type reledit_table[] =
{
/* { command function }, */
{ "addskill", reledit_addskill },
{ "alignment", reledit_align },
{ "create", reledit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "delskill", reledit_delskill },
{ "display", reledit_display },
{ "godname", reledit_god },
{ "name", reledit_name },
{ "show", reledit_show },
{ "token", reledit_token },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type cedit_table[] =
{
/* { command function }, */
{ "addskill", cedit_addskill },
{ "class", cedit_class },
{ "create", cedit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "delskill", cedit_delskill },
{ "description", cedit_desc },
{ "display", cedit_display },
{ "enemies", cedit_enemies },
{ "motto", cedit_motto },
{ "name", cedit_name },
{ "leader", cedit_leader },
{ "recall", cedit_recall },
{ "religion", cedit_religion },
{ "rules", cedit_rules },
{ "show", cedit_show },
{ "story", cedit_desc },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type poseedit_table[] =
{
/* { command function }, */
{ "char", poseedit_tochar },
{ "create", poseedit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "room", poseedit_toroom },
{ "show", poseedit_show },
{ "tochar", poseedit_tochar },
{ "toroom", poseedit_toroom },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type pledit_table[] =
{
/* { command function }, */
{ "create", pledit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "minimum", pledit_minimum },
{ "name", pledit_name },
{ "show", pledit_show },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
const struct olc_cmd_type gmpedit_table[] =
{
/* { command function }, */
{ "area", gmpedit_area },
{ "arglist", gmpedit_arglist },
{ "arguments", gmpedit_arglist },
{ "comlist", gmpedit_comlist },
{ "create", gmpedit_create },
{ "delet", edit_delet },
{ "delete", edit_delete },
{ "script", gmpedit_comlist },
{ "show", gmpedit_show },
{ "?", show_help },
{ "commands", show_commands },
{ "version", show_version },
{ "", 0 }
};
/*****************************************************************************
* End Interpreter Tables. *
*****************************************************************************/
/*****************************************************************************
Name: get_area_data
Purpose: Returns pointer to area with given vnum.
Called by: do_aedit (olc.c).
****************************************************************************/
AREA_DATA *get_area_data( int vnum )
{
AREA_DATA *pArea;
for( pArea = area_first; pArea; pArea = pArea->next )
{
if( pArea->vnum == vnum )
return pArea;
}
return 0;
}
/*****************************************************************************
Name: edit_done
Purpose: Resets builder information on completion.
Called by: aedit, redit, oedit, medit (olc.c)
****************************************************************************/
bool edit_done( CHAR_DATA *ch )
{
ch->desc->pEdit = NULL;
ch->desc->interpreter = get_interpreter( "" );
return FALSE;
}
/*
* Generic edit function for deleting things.
*/
bool edit_delet( CHAR_DATA *ch, const char *argument )
{
send_to_char( "Are you really sure you want to do this?\n\r", ch );
return FALSE;
}
void unlink_reset( ROOM_INDEX_DATA *pRoom, RESET_DATA *pReset )
{
RESET_DATA *prev = NULL;
if( pReset == pRoom->reset_first )
pRoom->reset_first = pRoom->reset_first->next;
else
{
for( prev = pRoom->reset_first; prev; prev = prev->next )
if( prev->next == pReset )
break;
if( prev )
prev->next = pReset->next;
}
if( pReset == pRoom->reset_last )
pRoom->reset_last = prev;
}
void delete_room_index( ROOM_INDEX_DATA *pRoom )
{
CHAR_DATA *mch, *mch_next;
OBJ_DATA *obj, *obj_next;
int i;
/* clean of objects and characters */
for( mch = pRoom->people; mch; mch = mch_next )
{
mch_next = mch->next;
char_from_room( mch );
if( IS_NPC( mch ) )
extract_char( mch, TRUE );
else
char_to_room( mch, get_room_index( ROOM_VNUM_IMMPLANE ) );
}
for( obj = pRoom->contents; obj; obj = obj_next )
{
obj_next = obj->next;
extract_obj( obj );
}
if( pRoom->vnum == top_vnum_room )
for( i = pRoom->vnum; i > 0; --i )
if( get_room_index( i ) )
{
top_vnum_room = i;
break;
}
free_room_index( pRoom );
}
void delete_mob_index( MOB_INDEX_DATA *pMob )
{
ROOM_INDEX_DATA *pRoom;
RESET_DATA *rst, *rst_next;
CHAR_DATA *mch, *mch_next;
int i;
bool foundmob = FALSE;
bool foundobj = FALSE;
for( i = 0; i < MAX_KEY_HASH; i++ )
{
for( pRoom = room_index_hash[i]; pRoom; pRoom = pRoom->next )
{
for( mch = pRoom->people; pMob->count > 0 && mch;
mch = mch_next )
{
mch_next = mch->next;
if( mch->deleted || mch->pIndexData == pMob )
continue;
extract_char( mch, TRUE );
}
/* Remove resets.
* Known Bug: This may remove 'P' resets falsely, or not
* properly.
*/
for( rst = pRoom->reset_first; rst; rst = rst_next )
{
rst_next = rst->next;
switch( rst->command )
{
case 'M':
if( rst->arg1 == pMob->vnum )
{
unlink_reset( pRoom, rst );
free_reset_data( rst );
SET_BIT( pRoom->area->area_flags, AREA_CHANGED );
foundmob = TRUE;
}
else
foundmob = FALSE;
break;
case 'E':
case 'G':
if( foundmob )
{
foundobj = TRUE;
unlink_reset( pRoom, rst );
free_reset_data( rst );
SET_BIT( pRoom->area->area_flags, AREA_CHANGED );
}
else
foundobj = FALSE;
break;
case 'P':
if( foundobj && foundmob )
{
unlink_reset( pRoom, rst );
free_reset_data( rst );
SET_BIT( pRoom->area->area_flags, AREA_CHANGED );
}
}
}
}
}
if( pMob->vnum == top_vnum_mob )
for( i = pMob->vnum; i > 0; --i )
if( get_mob_index( i ) )
{
top_vnum_mob = i;
break;
}
top_mob_index--;
free_mob_index( pMob );
}
void delete_obj_index( OBJ_INDEX_DATA *pObj )
{
ROOM_INDEX_DATA *pRoom;
RESET_DATA *rst, *rst_next;
OBJ_DATA *obj, *obj_next;
int i;
for( obj = object_list; obj; obj = obj_next )
{
obj_next = obj->next;
if( obj->deleted || obj->pIndexData != pObj )
continue;
extract_obj( obj );
}
/* Remove all of the resets for this object.
* Known Bug: If obj1 resets inside this object and obj2 resets
* inside obj1, then the reset for obj2 is not removed.
* A stack system could probably fix this problem but it
* really isn't worth the effort.
*/
for( i = 0; i < MAX_KEY_HASH; i++ )
{
for( pRoom = room_index_hash[i]; pRoom; pRoom = pRoom->next )
{
for( rst = pRoom->reset_first; rst; rst = rst_next )
{
rst_next = rst->next;
switch( rst->command )
{
case 'O': case 'E':
case 'P': case 'G':
if( ( rst->arg1 == pObj->vnum )
|| ( rst->command == 'P'
&& rst->arg2 == pObj->vnum ) )
{
unlink_reset( pRoom, rst );
free_reset_data( rst );
SET_BIT( pRoom->area->area_flags, AREA_CHANGED );
}
}
}
}
}
if( pObj->vnum == top_vnum_obj )
for( i = pObj->vnum; i > 0; --i )
if( get_obj_index( i ) )
{
top_vnum_obj = i;
break;
}
top_obj_index--;
free_obj_index( pObj );
}
/*
* Generic edit function for deleting things.
*/
bool edit_delete( CHAR_DATA *ch, const char *argument )
{
HELP_DATA *pHelp;
SOCIAL_DATA *pSocial;
ROOM_INDEX_DATA *pRoom;
MOB_INDEX_DATA *pMob;
OBJ_INDEX_DATA *pObj;
MPROG_GLOBAL *mprg;
if( str_cmp( argument, "confirm" ) )
{
send_to_char( "Please type 'delete confirm' to delete this.\n\r", ch );
return FALSE;
}
if( !str_cmp( ch->desc->interpreter->name, "REdit" ) )
{
EDIT_ROOM( ch, pRoom );
char_from_room( ch );
char_to_room( ch, get_room_index( ROOM_VNUM_IMMPLANE ) );
delete_room_index( pRoom );
}
else if( !str_cmp( ch->desc->interpreter->name, "OEdit" ) )
{
EDIT_OBJ( ch, pObj );
delete_obj_index( pObj );
}
else if( !str_cmp( ch->desc->interpreter->name, "MEdit" ) )
{
EDIT_MOB( ch, pMob );
delete_mob_index( pMob );
}
else if( !str_cmp( ch->desc->interpreter->name, "SEdit" ) )
{
EDIT_SOCIAL( ch, pSocial );
free_social( pSocial );
}
else if( !str_cmp( ch->desc->interpreter->name, "HEdit" ) )
{
EDIT_HELP( ch, pHelp );
free_help( pHelp );
}
else if( !str_cmp( ch->desc->interpreter->name, "GMPEdit" ) )
{
EDIT_GMPROG( ch, mprg );
send_to_char(
"Warning, this can cause some programs not to work.\n\r", ch );
free_mprog_global( mprg );
}
else
{
send_to_char( "You can't delete that.\n\r", ch );
return FALSE;
}
edit_done( ch );
send_to_char( "Ok.\n\r", ch );
return TRUE;
}
/*****************************************************************************
* Interpreters. *
*****************************************************************************/
/* Area Interpreter, called by do_aedit. */
void aedit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
AREA_DATA *pArea;
char command[MAX_INPUT_LENGTH];
char arg[MAX_INPUT_LENGTH];
int cmd;
int value;
EDIT_AREA( ch, pArea );
strcpy( arg, argument );
argument = one_argument( arg, command );
if( !IS_BUILDER( ch, pArea ) )
send_to_char( "AEdit: Insufficient security to modify area.\n\r", ch );
if( command[0] == '\0' )
{
aedit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
if( !IS_BUILDER( ch, pArea ) )
{
interpret( ch, arg );
return;
}
if( command[1] == '\0' && ( command[0] == '+' || command[0] == '-' ) )
{
value = pArea->vnum;
if( command[0] == '+' )
value++;
else
value--;
if( !( pArea = get_area_data( value ) ) )
{
send_to_char( "There is no area there.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pArea;
aedit_show( ch, "" );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *aedit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, aedit_table[cmd].name ) )
{
if( ( *aedit_table[cmd].olc_fun ) ( ch, argument ) )
SET_BIT( pArea->area_flags, AREA_CHANGED );
return;
}
}
/* Take care of flags. */
if( flag_value( &value, area_flags, arg ) != NO_FLAG )
{
TOGGLE_BIT( pArea->area_flags, value );
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Flag toggled.\n\r", ch );
return;
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Room Interpreter, called by do_redit. */
void redit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
ROOM_INDEX_DATA *pRoom;
AREA_DATA *pArea;
char arg[MAX_STRING_LENGTH];
char command[MAX_INPUT_LENGTH];
int cmd;
int value;
EDIT_ROOM( ch, pRoom );
pArea = pRoom->area;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( !IS_BUILDER( ch, pArea ) )
send_to_char( "REdit: Insufficient security to modify room.\n\r", ch );
if( command[0] == '\0' )
{
redit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
if( ( command[0] == '+' || command[0] == '-' )
&& ( command[1] == '\0' || is_number( command ) ) )
{
value = pRoom->vnum;
if( command[1] == '\0' )
{
command[1] = '1';
command[2] = '\0';
}
value += atoi( command );
if( !( pRoom = get_room_index( value ) ) )
{
send_to_char( "There is no room there.\n\r", ch );
return;
}
char_from_room( ch );
char_to_room( ch, pRoom );
ch->desc->pEdit = (void *)pRoom;
redit_show( ch, "" );
return;
}
if( !IS_BUILDER( ch, pArea ) )
{
interpret( ch, arg );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *redit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, redit_table[cmd].name ) )
{
if( ( *redit_table[cmd].olc_fun ) ( ch, argument ) )
SET_BIT( pArea->area_flags, AREA_CHANGED );
return;
}
}
/* Take care of flags. */
if( flag_value( &value, room_flags, arg ) != NO_FLAG )
{
TOGGLE_BIT( pRoom->room_flags, value );
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Room flag toggled.\n\r", ch );
return;
}
if( flag_value( &value, sector_flags, arg ) != NO_FLAG )
{
pRoom->sector_type = value;
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Sector type set.\n\r", ch );
return;
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Object Interpreter, called by do_oedit. */
void oedit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
AREA_DATA *pArea;
OBJ_INDEX_DATA *pObj;
char arg[MAX_STRING_LENGTH];
char command[MAX_INPUT_LENGTH];
int cmd;
int value;
EDIT_OBJ( ch, pObj );
pArea = pObj->area;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( !IS_BUILDER( ch, pArea ) )
send_to_char( "OEdit: Insufficient security to modify area.\n\r", ch );
if( command[0] == '\0' )
{
oedit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
if( ( command[0] == '+' || command[0] == '-' )
&& ( command[1] == '\0' || is_number( command ) ) )
{
value = pObj->vnum;
if( command[1] == '\0' )
{
command[1] = '1';
command[2] = '\0';
}
value += atoi( command );
if( !( pObj = get_obj_index( value ) ) )
{
send_to_char( "There is no object there.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pObj;
oedit_show( ch, "" );
return;
}
if( !IS_BUILDER( ch, pArea ) )
{
interpret( ch, arg );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *oedit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, oedit_table[cmd].name ) )
{
if( ( *oedit_table[cmd].olc_fun ) ( ch, argument ) )
SET_BIT( pArea->area_flags, AREA_CHANGED );
return;
}
}
/* Take care of flags. */
if( flag_value( &value, type_flags, arg ) != NO_FLAG )
{
pObj->item_type = value;
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Type set.\n\r", ch );
/*
* Clear the values.
*/
pObj->value[0] = 0;
pObj->value[1] = 0;
pObj->value[2] = 0;
pObj->value[3] = 0;
return;
}
if( flag_value( &value, extra_flags, arg ) != NO_FLAG )
{
TOGGLE_BIT( pObj->extra_flags, value );
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Extra flag toggled.\n\r", ch );
return;
}
if( flag_value( &value, wear_flags, arg ) != NO_FLAG )
{
TOGGLE_BIT( pObj->wear_flags, value );
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Wear flag toggled.\n\r", ch );
return;
}
if( flag_value( &value, material_flags, arg ) != NO_FLAG )
{
pObj->material = value;
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Item material type set.\n\r", ch );
return;
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Mobile Interpreter, called by do_medit. */
void medit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
AREA_DATA *pArea;
MOB_INDEX_DATA *pMob;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd;
int value;
int vect[MAX_VECTOR];
EDIT_MOB( ch, pMob );
pArea = pMob->area;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( !IS_BUILDER( ch, pArea ) )
send_to_char( "MEdit: Insufficient security to modify area.\n\r", ch );
if( command[0] == '\0' )
{
medit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
if( ( command[0] == '+' || command[0] == '-' )
&& ( command[1] == '\0' || is_number( command ) ) )
{
value = pMob->vnum;
if( command[1] == '\0' )
{
command[1] = '1';
command[2] = '\0';
}
value += atoi( command );
if( !( pMob = get_mob_index( value ) ) )
{
send_to_char( "There is no mobile there.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pMob;
medit_show( ch, "" );
return;
}
if( !IS_BUILDER( ch, pArea ) )
{
interpret( ch, arg );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *medit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, medit_table[cmd].name ) )
{
if( ( *medit_table[cmd].olc_fun ) ( ch, argument ) )
SET_BIT( pArea->area_flags, AREA_CHANGED );
return;
}
}
/* Take care of flags. */
if( flag_value( &value, sex_flags, arg ) != NO_FLAG )
{
pMob->sex = value;
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Sex set.\n\r", ch );
return;
}
if( ( value = race_full_lookup( arg ) ) != NO_FLAG )
{
pMob->race = value;
pMob->body_parts = race_table[pMob->race].body_parts;
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Race set.\n\r", ch );
return;
}
if( flag_value( vect, act_flags, arg ) != NO_FLAG )
{
for( value = 0; value < MAX_VECTOR; value++ )
pMob->act[value] ^= vect[value];
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Act flag toggled.\n\r", ch );
return;
}
if( flag_value( vect, affect_flags, arg ) != NO_FLAG )
{
for( value = 0; value < MAX_VECTOR; value++ )
pMob->affected_by[value] ^= vect[value];
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Affect flag toggled.\n\r", ch );
return;
}
if( flag_value( &value, body_part_flags, arg ) != NO_FLAG )
{
TOGGLE_BIT( pMob->body_parts, value );
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Body part flag toggled.\n\r", ch );
return;
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Social Interpreter, called by do_sedit. */
void sedit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( command[0] == '\0' )
{
sedit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *sedit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, sedit_table[cmd].name ) )
{
( *sedit_table[cmd].olc_fun ) ( ch, argument );
return;
}
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Help Interpreter, called by do_hedit. */
void hedit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
AREA_DATA *pArea;
HELP_DATA *pHelp;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd;
EDIT_HELP( ch, pHelp );
pArea = pHelp->area;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( !IS_BUILDER( ch, pArea ) )
send_to_char( "HEdit: Insufficient security to modify area.\n\r", ch );
if( command[0] == '\0' )
{
hedit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
if( !IS_BUILDER( ch, pArea ) )
{
interpret( ch, arg );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *hedit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, hedit_table[cmd].name ) )
{
if( ( *hedit_table[cmd].olc_fun ) ( ch, argument ) )
SET_BIT( pArea->area_flags, AREA_CHANGED );
return;
}
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Religion Interpreter, called by do_reledit. */
void reledit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
RELIGION_DATA *pReligion;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd, value;
EDIT_RELIGION( ch, pReligion );
strcpy( arg, argument );
argument = one_argument( arg, command );
if( command[0] == '\0' )
{
reledit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *reledit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, reledit_table[cmd].name ) )
{
(*reledit_table[cmd].olc_fun) ( ch, argument );
return;
}
}
if( flag_value( &value, sac_event_flags, arg ) != NO_FLAG )
{
TOGGLE_BIT( pReligion->sac_events, value );
send_to_char( "Sacrificial Event toggled.\n\r", ch );
return;
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Clan Interpreter, called by do_cedit. */
void cedit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
CLAN_DATA *pClan;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd, value;
EDIT_CLAN( ch, pClan );
strcpy( arg, argument );
argument = one_argument( arg, command );
if( command[0] == '\0' )
{
cedit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *cedit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, cedit_table[cmd].name ) )
{
(*cedit_table[cmd].olc_fun) ( ch, argument );
return;
}
}
if( flag_value( &value, clan_type_flags, arg ) != NO_FLAG )
{
pClan->clan_type = value;
charprintf( ch, "Clan type changed to %s.\n\r", arg );
return;
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Pose Interpreter, called by do_cedit. */
void poseedit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( command[0] == '\0' )
{
poseedit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *poseedit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, poseedit_table[cmd].name ) )
{
(*poseedit_table[cmd].olc_fun) ( ch, argument );
return;
}
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Plane Interpreter, called by do_pledit. */
void pledit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( command[0] == '\0' )
{
pledit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *pledit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, pledit_table[cmd].name ) )
{
(*pledit_table[cmd].olc_fun) ( ch, argument );
return;
}
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
/* Global Mud Program Interpreter, called by do_gmpedit. */
void gmpedit( DESCRIPTOR_DATA *d, const char *argument )
{
CHAR_DATA *ch = d->character;
MPROG_GLOBAL *mprg;
AREA_DATA *pArea;
char command[MAX_INPUT_LENGTH];
char arg[MAX_STRING_LENGTH];
int cmd, value;
EDIT_GMPROG( ch, mprg );
pArea = mprg->area;
strcpy( arg, argument );
argument = one_argument( arg, command );
if( command[0] == '\0' )
{
gmpedit_show( ch, argument );
return;
}
if( !str_cmp( command, "done" ) )
{
edit_done( ch );
return;
}
if( ( command[0] == '+' || command[0] == '-' )
&& ( command[1] == '\0' || is_number( command ) ) )
{
value = mprg->vnum;
if( command[1] == '\0' )
{
command[1] = '1';
command[2] = '\0';
}
value += atoi( command );
if( !( mprg = get_global_mudprog_index( value ) ) )
{
send_to_char( "There is no mudprog there.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)mprg;
gmpedit_show( ch, "" );
return;
}
if( !IS_BUILDER( ch, pArea ) )
{
interpret( ch, arg );
return;
}
/* Search Table and Dispatch Command. */
for( cmd = 0; *gmpedit_table[cmd].name; cmd++ )
{
if( !str_prefix( command, gmpedit_table[cmd].name ) )
{
if( (*gmpedit_table[cmd].olc_fun) ( ch, argument ) )
SET_BIT( pArea->area_flags, AREA_CHANGED );
return;
}
}
if( ( value = flag_value( NULL, mud_prog_flags, arg ) ) != NO_FLAG )
{
mprg->type = value;
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Type set.\n\r", ch );
return;
}
if( ( value = flag_value( NULL, mor_type_flags, arg ) ) != NO_FLAG )
{
TOGGLE_BIT( mprg->allowed, value );
SET_BIT( pArea->area_flags, AREA_CHANGED );
send_to_char( "Allowed types set.\n\r", ch );
return;
}
/* Default to Standard Interpreter. */
interpret( ch, arg );
return;
}
void do_aedit( CHAR_DATA *ch, const char *argument )
{
AREA_DATA *pArea;
char command[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "aedit" ) )
return;
argument = one_argument( argument, command );
pArea = ch->in_room->area;
if( command[0] == 'r' && !str_prefix( command, "reset" ) )
{
int save_player;
if( !str_cmp( ch->desc->interpreter->name, "AEdit" ) )
pArea = (AREA_DATA *) ch->desc->pEdit;
save_player = pArea->nplayer;
pArea->nplayer = 0;
reset_area( pArea );
pArea->nplayer = save_player;
send_to_char( "Area reset.\n\r", ch );
return;
}
if( command[0] == 'c' && !str_prefix( command, "create" ) )
{
if( aedit_create( ch, argument ) )
{
ch->desc->interpreter = get_interpreter( "AEdit" );
pArea = (AREA_DATA *) ch->desc->pEdit;
SET_BIT( pArea->area_flags, AREA_CHANGED );
aedit_show( ch, "" );
}
return;
}
if( is_number( command ) )
{
if( !( pArea = get_area_data( atoi( command ) ) ) )
{
send_to_char( "No such area vnum exists.\n\r", ch );
return;
}
}
/*
* Builder defaults to editing current area.
*/
ch->desc->pEdit = (void *)pArea;
ch->desc->interpreter = get_interpreter( "AEdit" );
aedit_show( ch, "" );
return;
}
/* Entry point for editing room_index_data. */
void do_redit( CHAR_DATA *ch, const char *argument )
{
ROOM_INDEX_DATA *pRoom;
char command[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "redit" ) )
return;
argument = one_argument( argument, command );
pRoom = ch->in_room;
if( command[0] == 'r' && !str_prefix( command, "reset" ) )
{
reset_room( pRoom );
send_to_char( "Room reset.\n\r", ch );
return;
}
if( command[0] == 'c' && !str_prefix( command, "create" ) )
{
if( redit_create( ch, argument ) )
{
char_from_room( ch );
char_to_room( ch, ch->desc->pEdit );
SET_BIT( pRoom->area->area_flags, AREA_CHANGED );
}
}
/*
* Builder defaults to editing current room.
*/
ch->desc->pEdit = ch->in_room;
ch->desc->interpreter = get_interpreter( "REdit" );
redit_show( ch, "" );
return;
}
/* Entry point for editing obj_index_data. */
void do_oedit( CHAR_DATA *ch, const char *argument )
{
OBJ_INDEX_DATA *pObj;
AREA_DATA *pArea;
char command[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "oedit" ) )
return;
argument = one_argument( argument, command );
if( is_number( command ) )
{
if( !( pObj = get_obj_index( atoi( command ) ) ) )
{
send_to_char( "OEdit: That vnum does not exist.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pObj;
ch->desc->interpreter = get_interpreter( "OEdit" );
oedit_show( ch, "" );
return;
}
if( command[0] == 'c' && !str_prefix( command, "create" ) )
{
if( oedit_create( ch, argument ) )
{
pArea = get_vnum_area( atoi( argument ) );
SET_BIT( pArea->area_flags, AREA_CHANGED );
ch->desc->interpreter = get_interpreter( "OEdit" );
oedit_show( ch, "" );
}
return;
}
if( get_obj_index( 1 ) )
do_oedit( ch, "1" );
else
send_to_char( "OEdit: There is no default object to edit.\n\r", ch );
return;
}
/* Entry point for editing mob_index_data. */
void do_medit( CHAR_DATA *ch, const char *argument )
{
MOB_INDEX_DATA *pMob;
AREA_DATA *pArea;
char command[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "medit" ) )
return;
argument = one_argument( argument, command );
if( is_number( command ) )
{
if( !( pMob = get_mob_index( atoi( command ) ) ) )
{
send_to_char( "MEdit: That vnum does not exist.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pMob;
ch->desc->interpreter = get_interpreter( "MEdit" );
medit_show( ch, "" );
return;
}
if( command[0] == 'c' && !str_prefix( command, "create" ) )
{
if( medit_create( ch, argument ) )
{
pArea = get_vnum_area( atoi( argument ) );
SET_BIT( pArea->area_flags, AREA_CHANGED );
ch->desc->interpreter = get_interpreter( "MEdit" );
medit_show( ch, "" );
}
return;
}
if( get_mob_index( 1 ) )
do_medit( ch, "1" );
else
send_to_char( "MEdit: There is no default mobile to edit.\n\r", ch );
return;
}
void do_sedit( CHAR_DATA *ch, const char *argument )
{
SOCIAL_DATA *pSocial;
AREA_DATA *pArea;
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "sedit" ) )
return;
argument = one_argument( argument, buf );
pArea = ch->in_room->area;
if( !IS_BUILDER( ch, pArea ) )
{
send_to_char( "You can't edit socials here.\n\r", ch );
return;
}
if( !str_cmp( buf, "create" ) )
{
if( sedit_create( ch, argument ) )
{
SET_BIT( pArea->area_flags, AREA_CHANGED );
ch->desc->interpreter = get_interpreter( "SEdit" );
sedit_show( ch, "" );
}
return;
}
if( !( pSocial = find_social( buf ) ) )
{
charprintf( ch, "SEdit: Can't find the %s social.\n\r", buf );
return;
}
ch->desc->pEdit = (void *)pSocial;
ch->desc->interpreter = get_interpreter( "SEdit" );
sedit_show( ch, "" );
return;
}
void do_hedit( CHAR_DATA *ch, const char *argument )
{
HELP_DATA *pHelp;
AREA_DATA *pArea;
char buf[MAX_INPUT_LENGTH];
char arg[MAX_INPUT_LENGTH];
int num, count = 0;
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "hedit" ) )
return;
strcpy( buf, argument );
argument = one_argument( argument, arg );
pArea = ch->in_room->area;
if( !IS_BUILDER( ch, pArea ) )
{
send_to_char( "You can't edit helps here.\n\r", ch );
return;
}
if( !str_cmp( arg, "create" ) )
{
if( hedit_create( ch, argument ) )
{
SET_BIT( pArea->area_flags, AREA_CHANGED );
ch->desc->interpreter = get_interpreter( "HEdit" );
}
return;
}
num = number_argument( buf, buf );
for( pHelp = help_first; pHelp; pHelp = pHelp->next )
{
if( abs( pHelp->level ) > get_trust( ch ) )
continue;
if( help_keyword( buf, pHelp->keyword ) && ++count == num )
break;
}
if( !pHelp )
{
send_to_char( "HEdit: There is no help to edit.\n\r", ch );
return;
}
if( !IS_BUILDER( ch, pHelp->area ) )
{
send_to_char( "That help is in an area you can't edit.\n\r", ch );
sprintf( buf, "You need to be able to edit the area: [%4d] %s\n\r",
!pHelp->area ? -1 : pHelp->area->vnum,
!pHelp->area ? "No Area" : pHelp->area->name );
send_to_char( buf, ch );
return;
}
ch->desc->pEdit = (void *)pHelp;
ch->desc->interpreter = get_interpreter( "HEdit" );
hedit_show( ch, "" );
return;
}
void do_reledit( CHAR_DATA *ch, const char *argument )
{
RELIGION_DATA *pReligion;
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "reledit" ) )
return;
argument = one_argument( argument, buf );
if( !str_cmp( buf, "create" ) )
{
if( reledit_create( ch, argument ) )
ch->desc->interpreter = get_interpreter( "RelEdit" );
return;
}
if( !( pReligion = religion_lookup( buf ) ) )
{
send_to_char( "RelEdit: There is no religion to edit.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pReligion;
ch->desc->interpreter = get_interpreter( "RelEdit" );
reledit_show( ch, "" );
return;
}
void do_cedit( CHAR_DATA *ch, const char *argument )
{
CLAN_DATA *pClan;
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "cedit" ) )
return;
argument = one_argument( argument, buf );
if( !str_cmp( buf, "create" ) )
{
if( cedit_create( ch, argument ) )
ch->desc->interpreter = get_interpreter( "CEdit" );
return;
}
if( !( pClan = clan_lookup( buf ) ) )
{
send_to_char( "CEdit: There is no clan to edit.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pClan;
ch->desc->interpreter = get_interpreter( "CEdit" );
cedit_show( ch, "" );
return;
}
void do_pledit( CHAR_DATA *ch, const char *argument )
{
PLANE_DATA *pPlane;
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "pledit" ) )
return;
argument = one_argument( argument, buf );
if( !str_cmp( buf, "create" ) )
{
if( pledit_create( ch, argument ) )
ch->desc->interpreter = get_interpreter( "PlEdit" );
return;
}
if( !( pPlane = plane_lookup( buf ) ) )
{
send_to_char( "PlEdit: There is no plane to edit.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)pPlane;
ch->desc->interpreter = get_interpreter( "PlEdit" );
pledit_show( ch, "" );
return;
}
void do_gmpedit( CHAR_DATA *ch, const char *argument )
{
MPROG_GLOBAL *mprg;
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *rch;
rch = get_char( ch );
if( !authorized( rch, "gmpedit" ) )
return;
argument = one_argument( argument, buf );
if( !str_cmp( buf, "create" ) )
{
if( gmpedit_create( ch, argument ) )
ch->desc->interpreter = get_interpreter( "GMPEdit" );
return;
}
if( !( mprg = get_global_mudprog_index( atoi( buf ) ) ) )
{
send_to_char( "GMPEdit: There is no mudprog to edit.\n\r", ch );
return;
}
ch->desc->pEdit = (void *)mprg;
ch->desc->interpreter = get_interpreter( "GMPEdit" );
gmpedit_show( ch, "" );
return;
}