#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "emlen.h"
bool diggy = FALSE;
char *verify_room_name(char *rn) {
char buf[500];
char *t;
char *tp;
int len;
rn[0]=UPPER(rn[0]);
if (rn[(strlen(rn)-1)]=='.') {
rn[(strlen(rn)-1)]='\0';
}
tp=rn;
len=0;
for (t=rn; *t!='\0'; t++) {
if (*t==' ') {
tp=t+1;
len=0;
continue;
}
len++;
if (len>3 && *tp!='n') {
len=0;
*tp=UPPER(*tp);
}
}
return rn;
}
int
sector_toggle (char *inpt)
{
int i;
if ((i = get_sector_number (inpt)) == SECT_MAX)
return 0;
return (1 << i);
}
char *
sector_fname (int flag)
{
static char rbbv[200];
rbbv[0] = '\0';
if (IS_SET (flag, (1 << SECT_INSIDE)))
strcat (rbbv, "inside ");
if (IS_SET (flag, (1 << SECT_CITY)))
strcat (rbbv, "city ");
if (IS_SET (flag, (1 << SECT_FIELD)))
strcat (rbbv, "field ");
if (IS_SET (flag, (1 << SECT_FOREST)))
strcat (rbbv, "forest ");
if (IS_SET (flag, (1 << SECT_HILLS)))
strcat (rbbv, "hills ");
if (IS_SET (flag, (1 << SECT_MOUNTAIN)))
strcat (rbbv, "mountain ");
if (IS_SET (flag, (1 << SECT_WATER_SWIM)))
strcat (rbbv, "swim ");
if (IS_SET (flag, (1 << SECT_WATER_NOSWIM)))
strcat (rbbv, "noswim ");
if (IS_SET (flag, (1 << SECT_UNDERWATER)))
strcat (rbbv, "underwater ");
if (IS_SET (flag, (1 << SECT_AIR)))
strcat (rbbv, "air ");
if (IS_SET (flag, (1 << SECT_DESERT)))
strcat (rbbv, "desert ");
if (IS_SET (flag, (1 << SECT_SNOW)))
strcat (rbbv, "snow ");
if (IS_SET (flag, (1 << SECT_TROPICAL)))
strcat (rbbv, "tropical ");
if (IS_SET (flag, (1 << SECT_ICE)))
strcat (rbbv, "ice ");
if (IS_SET (flag, (1 << SECT_MARSH)))
strcat (rbbv, "marsh ");
return rbbv;
}
void
redit (CHAR_DATA * ch, char *argy)
{
AREA_DATA *pArea;
ROOM_DATA *pRoom;
EXIT_DATA *pExit;
DESCRIPTION_DATA *ed;
char arg[STD_LENGTH];
char arg1[STD_LENGTH];
char arg2[STD_LENGTH];
char buf[STD_LENGTH];
int value;
int iHash;
int door;
strcpy (arg, argy);
smash_tilde (argy);
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
pRoom = ch->in_room;
pArea = pRoom->area;
check_room_more (ch->in_room);
hugebuf_o[0]='\0';
if (!IS_BUILDER (ch, pArea))
{
send_to_char ("AEdit: Insufficient security to modify room.\n\r", ch);
interpret (ch, arg);
return;
}
if (!str_cmp (arg1, "show") || arg1[0] == '\0')
{
sprintf (buf, "%d", pRoom->vnum);
do_rstat (ch, buf);
return;
}
if (!str_cmp (arg1, "done"))
{
ch->desc->pEdit = NULL;
ch->desc->connected = CON_PLAYING;
return;
}
if (!str_cmp (arg1, "?"))
{
do_help (ch, "redit");
return;
}
if (!IS_BUILDER (ch, pArea))
{
interpret (ch, arg);
return;
}
if (!str_cmp (arg1, "}")
&& pRoom->vnum < top_vnum_room && IS_REAL_GOD (ch))
{
int kk;
ROOM_DATA *rid;
rid = NULL;
kk = pRoom->vnum;
while (rid == NULL)
{
kk++;
rid = get_room_index (kk);
}
char_from_room (ch);
char_to_room (ch, rid);
do_look (ch, "");
return;
}
if (!str_prefix ("app", arg1))
{
pRoom->a = arg2[0];
send_to_char ("Appearance set.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_prefix ("java", arg1))
{
char arg3[200];
int n1,n2;
char *t=arg2;
t=one_argy(t,arg3);
if ( (n1=atoi(arg3)) < 0 ) return;
if ( (n2=atoi(t)) < 0 ) return;
pRoom->img[0] = (char) n1;
pRoom->img[1] = (char) n2;
send_to_char ("Java appearance set.\n\r", ch);
SET_BIT(pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_prefix ("can_travel_sect", arg1))
{
int ii;
if ((ii = sector_toggle (arg2)) > 0)
{
pRoom->more->can_travel_sectors ^= ii;
send_to_char ("Toggled.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
}
if (!str_prefix ("col", arg1))
{
int isit = -1;
if (arg2[0] == '\0')
{
pRoom->c = '\0';
return;
}
else
{
isit = atoi (arg2);
if (isit < 1 || isit > 15)
{
send_to_char ("Bad color!\n\r", ch);
return;
}
}
pRoom->c = isit;
send_to_char ("Color set.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp ("orig_room", arg1))
{
int vk;
ROOM_DATA *rrs;
vk = atoi (arg2);
if (vk < 0)
return;
if (!IS_SET (pRoom->room_flags, ROOM_ISVEHICLE))
return;
pRoom->more->orig_room = vk;
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp ("linkit", arg1))
{
int vk;
ROOM_DATA *rrs;
vk = atoi (arg2);
if ((rrs = get_room_index (vk)) == NULL)
{
send_to_char ("That room doesn't exist!\n\r", ch);
return;
}
if (vk <= 1)
return;
if (!IS_SET (pRoom->room_flags, ROOM_ISVEHICLE))
return;
if (pRoom->more->linked_to)
room_from_room (pRoom);
room_to_room (pRoom, rrs);
send_to_char ("Link set.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "tps") && !str_cmp (NAME (ch), "Orin"))
{
int tt;
if (!is_number (arg2) || (tt = atoi (arg2)) < 0)
{
send_to_char ("Syntax is 'tps <tps_in_this_room>'.\n\r", ch);
return;
}
pRoom->tps = tt;
send_to_char ("Travel points in room set.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "sh"))
{
if (is_number (arg2))
{
int vv;
int tt;
tt = atoi (arg2);
if (tt <= pRoom->vnum)
return;
for (vv = pRoom->vnum; vv <= tt; vv++)
{
ROOM_DATA *rid;
if ((rid = get_room_index (vv)) == NULL || rid->area != pArea)
continue;
rid->shade = TRUE;
}
send_to_char ("In-shade set for current vnum to specified vnum.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
pRoom->shade = TRUE;
send_to_char ("This room is now marked as shaded.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "li"))
{
if (is_number (arg2))
{
int vv;
int tt;
tt = atoi (arg2);
if (tt <= pRoom->vnum)
return;
for (vv = pRoom->vnum; vv <= tt; vv++)
{
ROOM_DATA *rid;
if ((rid = get_room_index (vv)) == NULL || rid->area != pArea)
continue;
rid->shade = FALSE;
}
send_to_char ("Lighted set for current vnum to specified vnum.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
pRoom->shade = FALSE;
send_to_char ("This room is now marked as lighted.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (room_name_bit (arg1) != ROOM_NONE)
{
pRoom->room_flags ^= room_name_bit (arg1);
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Room flag toggled.\n\r", ch);
return;
}
if (get_sector_number (arg1) != SECT_MAX)
{
pRoom->sector_type = get_sector_number (arg1);
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Sector type set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "copyfrom"))
{
ROOM_DATA *rid;
value = atoi (arg2);
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: copyfrom <copyfrom vnum>\n\r", ch);
return;
}
if ((rid = get_room_index (value)) == NULL)
{
send_to_char ("That room doesn't exist.\n\r", ch);
return;
}
if (!IS_BUILDER (ch, rid->area))
{
send_to_char ("Sorry, you don't have access to that room.\n\r", ch);
return;
}
if (pRoom->description != NULL)
free_string (pRoom->description);
pRoom->description = str_dup (rid->description);
send_to_char ("Copy Successful.\n\r", ch);
return;
}
if (!str_cmp (arg1, "nameto"))
{
ROOM_DATA *rid;
value = atoi (arg2);
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: nameto <nameto vnum>\n\r", ch);
return;
}
if ((rid = get_room_index (value)) == NULL)
{
send_to_char ("That room doesn't exist.\n\r", ch);
return;
}
if (!IS_BUILDER (ch, rid->area))
{
send_to_char ("Sorry, you don't have access to that room.\n\r", ch);
return;
}
if (rid->name != NULL)
free_string (rid->name);
rid->name = str_dup (pRoom->name);
rid->sector_type = pRoom->sector_type;
send_to_char ("Namecopy and sectorcopy Successful.\n\r", ch);
return;
}
if (!str_cmp (arg1, "namefrom"))
{
ROOM_DATA *rid;
value = atoi (arg2);
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: namefrom <namefrom vnum>\n\r", ch);
return;
}
if ((rid = get_room_index (value)) == NULL)
{
send_to_char ("That room doesn't exist.\n\r", ch);
return;
}
if (!IS_BUILDER (ch, rid->area))
{
send_to_char ("Sorry, you don't have access to that room.\n\r", ch);
return;
}
if (pRoom->name != NULL)
free_string (pRoom->name);
pRoom->name = str_dup (rid->name);
pRoom->sector_type = rid->sector_type;
send_to_char ("Namecopy and sectorcopy Successful.\n\r", ch);
return;
}
if (!str_cmp (arg1, "copyto"))
{
ROOM_DATA *rid;
value = atoi (arg2);
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: copyto <destination vnum>\n\r", ch);
return;
}
if ((rid = get_room_index (value)) == NULL)
{
send_to_char ("The destination room doesn't exist.\n\r", ch);
return;
}
if (!IS_BUILDER (ch, rid->area))
{
send_to_char ("Sorry, you don't have access to that room.\n\r", ch);
return;
}
if (rid->description != NULL)
free_string (rid->description);
rid->description = str_dup (pRoom->description);
send_to_char ("Copy Successful.\n\r", ch);
return;
}
if (!str_cmp (arg1, "objdescript") || !str_cmp (arg1, "obj_descript"))
{
check_room_more (pRoom);
if (!pRoom->more->obj_description)
{
pRoom->more->obj_description = str_dup ("This is the description of the room object.\n\r");
}
if (arg2[0] == '\0')
{
string_append (ch, &pRoom->more->obj_description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
return;
}
if (!str_cmp (arg1, "movemess") || !str_cmp (arg1, "movemessage"))
{
check_room_more (pRoom);
if (arg2[0] == '\0')
{
string_append (ch, &pRoom->more->move_message);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
return;
}
if ((door = get_direction_number (arg1)) != DIR_MAX && arg2[0] != '\0')
{
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
if (!str_cmp (arg1, "delete"))
{
if (pRoom->exit[door] == NULL)
{
send_to_char ("That exit does not exist!\n\r", ch);
return;
}
free_exit (pRoom->exit[door]);
pRoom->exit[door] = NULL;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit unlinked. Please remember to unlink the other side, too.\n\r", ch);
#ifdef NEW_WORLD
if (!(pRoom->x == 0 && pRoom->y == 0 && pRoom->z == 0))
assign_coordinates (ch, "");
#endif
return;
}
if (!str_cmp (arg1, "destroy"))
{
ROOM_DATA *rd;
if (pRoom->exit[door] == NULL)
{
send_to_char ("That exit does not exist!\n\r", ch);
return;
}
if (pRoom->exit[door]->to_room == NULL ||
pRoom->exit[door]->to_room->exit[rev_dir[door]] == NULL ||
pRoom->exit[door]->to_room->exit[rev_dir[door]]->to_room != pRoom)
{
send_to_char ("There is no exit from the other room. Please use delete.\n\r", ch);
return;
}
rd = pRoom->exit[door]->to_room;
free_exit (pRoom->exit[door]);
pRoom->exit[door] = NULL;
free_exit (rd->exit[rev_dir[door]]);
rd->exit[rev_dir[door]] = NULL;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit and opposite side unlinked.\n\r", ch);
#ifdef NEW_WORLD
if (!(pRoom->x == 0 && pRoom->y == 0 && pRoom->z == 0))
assign_coordinates (ch, "");
#endif
return;
}
if (!str_cmp (arg1, "notransport"))
{
check_room_more (pRoom);
pRoom->more->move_dir = 0;
if (IS_SET (pRoom->room_flags, ROOM_MOVING))
pRoom->room_flags -= ROOM_MOVING;
send_to_char ("Transport removed.\n\r", ch);
return;
}
if (!str_cmp (arg1, "transport"))
{
check_room_more (pRoom);
pRoom->more->move_dir = door;
SET_BIT (pRoom->room_flags, ROOM_MOVING);
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Transport made.\n\r", ch);
return;
}
if (!str_cmp (arg1, "link"))
{
ROOM_DATA *rd;
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: [direction] link [vnum]\n\r", ch);
return;
}
value = atoi (arg2);
if ((rd = get_room_index (value)) == NULL)
{
if (!(pRoom->x == 0 && pRoom->y == 0 && pRoom->z == 0))
{
if (door == DIR_EAST)
rd = find_coord ((pRoom->x) + 1, (pRoom->y), (pRoom->z));
if (door == DIR_WEST)
rd = find_coord ((pRoom->x) - 1, (pRoom->y), (pRoom->z));
if (door == DIR_SOUTH)
rd = find_coord ((pRoom->x), (pRoom->y) - 1, (pRoom->z));
if (door == DIR_NORTH)
rd = find_coord ((pRoom->x), (pRoom->y) + 1, (pRoom->z));
if (door == DIR_UP)
rd = find_coord ((pRoom->x), (pRoom->y), (pRoom->z) + 1);
if (door == DIR_DOWN)
rd = find_coord ((pRoom->x), (pRoom->y), (pRoom->z) - 1);
}
if (rd == NULL)
{
send_to_char ("That room doesn't exist...\n\r", ch);
return;
}
}
if (!IS_BUILDER (ch, rd->area))
{
send_to_char ("You don't have access to the remote side.\n\r", ch);
return;
}
if (rd->exit[rev_dir[door]] != NULL)
{
send_to_char ("The other side already has an exit!\n\r", ch);
return;
}
if (!(pRoom->x == 0 && pRoom->y == 0 && pRoom->z == 0))
{
ROOM_DATA *rt = NULL;
if (!(rd->x == 0 && rd->y == 0 && rd->z == 0))
{
int nx, ny, nz;
nx = pRoom->x;
ny = pRoom->y;
nz = pRoom->z;
if (door == DIR_EAST)
nx++;
if (door == DIR_WEST)
nx--;
if (door == DIR_SOUTH)
ny--;
if (door == DIR_NORTH)
ny++;
if (door == DIR_UP)
nz++;
if (door == DIR_DOWN)
nz--;
if (nx != rd->x || ny != rd->y || nz != rd->z)
{
send_to_char ("There is already a room occupying that physical coordinate.\n\r", ch);
send_to_char ("To link to this room, use <direction> link.\n\r", ch);
return;
}
}
if (door == DIR_EAST)
rt = find_coord ((pRoom->x) + 1, (pRoom->y), (pRoom->z));
if (door == DIR_WEST)
rt = find_coord ((pRoom->x) - 1, (pRoom->y), (pRoom->z));
if (door == DIR_SOUTH)
rt = find_coord ((pRoom->x), (pRoom->y) - 1, (pRoom->z));
if (door == DIR_NORTH)
rt = find_coord ((pRoom->x), (pRoom->y) + 1, (pRoom->z));
if (door == DIR_UP)
rt = find_coord ((pRoom->x), (pRoom->y), (pRoom->z) + 1);
if (door == DIR_DOWN)
rt = find_coord ((pRoom->x), (pRoom->y), (pRoom->z) - 1);
if (rt && rt != rd)
{
send_to_char ("There is already a room occupying that physical coordinate.\n\r", ch);
send_to_char ("To link to this room, use <direction> link.\n\r", ch);
return;
}
}
if (pRoom->exit[door] == NULL)
{
pRoom->exit[door] = new_exit ();
}
(ROOM_DATA *) pRoom->exit[door]->to_room = rd;
pRoom->exit[door]->vnum = rd->vnum;
pRoom = rd;
door = rev_dir[door];
pExit = new_exit ();
(ROOM_DATA *) pExit->to_room = ch->in_room;
pExit->vnum = ch->in_room->vnum;
pRoom->exit[door] = pExit;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit linked.\n\r", ch);
pRoom = ch->in_room;
#ifdef NEW_WORLD
if (!(rd->x == 0 && rd->y == 0 && rd->z == 0) ||
!(pRoom->x == 0 && pRoom->y == 0 && pRoom->z == 0))
{
assign_coordinates (ch, "");
}
#endif
return;
}
if (!str_cmp (arg1, "dig"))
{
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: [direction] dig <vnum>\n\r", ch);
return;
}
diggy = TRUE;
sprintf (buf, "create %s", arg2);
redit (ch, buf);
if (!diggy)
return;
sprintf (buf, "%s link %s", dir_name[door], arg2);
redit (ch, buf);
diggy = FALSE;
return;
}
if (!str_cmp (arg1, "room"))
{
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: [direction] room [vnum]\n\r", ch);
return;
}
value = atoi (arg2);
if (get_room_index (value) == NULL)
{
send_to_char ("That room doesn't exist.\n\r", ch);
return;
}
if (pRoom->exit[door] == NULL)
{
pRoom->exit[door] = new_exit ();
}
(ROOM_DATA *) pRoom->exit[door]->to_room = get_room_index (value);
/*pRoom->exit[door]->vnum = value; */
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "str"))
{
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: [direction] str [val]\n\r", ch);
return;
}
if (pRoom->exit[door] == NULL)
{
send_to_char ("You must first make this an exit.\n\r", ch);
return;
}
if (pRoom->exit[door]->d_info == NULL || !IS_SET (pRoom->exit[door]->d_info->exit_info, EX_ISDOOR))
{
send_to_char ("You must have a door first.\n\r", ch);
return;
}
value = atoi (arg2);
pRoom->exit[door]->d_info->str = value;
pRoom->exit[door]->d_info->maxstr = value;
if (((ROOM_DATA *) pRoom->exit[door]->to_room)->exit[rev_dir[door]] != NULL &&
((ROOM_DATA *) pRoom->exit[door]->to_room)->exit[rev_dir[door]]->d_info != NULL)
{
((ROOM_DATA *) pRoom->exit[door]->to_room)->exit[rev_dir[door]]->d_info->str = value;
((ROOM_DATA *) pRoom->exit[door]->to_room)->exit[rev_dir[door]]->d_info->maxstr = value;
}
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit str set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "key"))
{
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: [direction] key [vnum]\n\r", ch);
return;
}
if (pRoom->exit[door] == NULL || pRoom->exit[door]->d_info == NULL)
{
send_to_char ("You must first make this an exit.\n\r", ch);
return;
}
value = atoi (arg2);
if (get_obj_index (value) == NULL)
{
send_to_char ("There is no key with that vnum.\n\r", ch);
return;
}
pRoom->exit[door]->d_info->key = value;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit key set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "name"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: [direction] name [string]\n\r", ch);
return;
}
if (pRoom->exit[door] == NULL || pRoom->exit[door]->d_info == NULL)
{
send_to_char ("You must set <direction> DOOR first.\n\r", ch);
return;
}
if (pRoom->exit[door]->d_info->keyword != NULL &&
pRoom->exit[door]->d_info->keyword[0] != '\0')
free_string (pRoom->exit[door]->d_info->keyword);
pRoom->exit[door]->d_info->keyword = str_dup (arg2);
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit name set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "desc") || !str_cmp (arg1, "description"))
{
if (pRoom->exit[door] == NULL)
{
pRoom->exit[door] = new_exit ();
}
if (pRoom->exit[door]->d_info == NULL)
{
pRoom->exit[door]->d_info = new_door ();
}
if (arg2[0] == '\0')
{
string_append (ch, &pRoom->exit[door]->d_info->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (arg2[0] == '+')
{
string_append (ch, &pRoom->exit[door]->d_info->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
send_to_char ("Syntax: [direction] desc - line edit\n\r", ch);
send_to_char (" [direction] desc + - line append\n\r", ch);
return;
}
if (get_exit_flag_number (arg1) != EX_NONE)
{
if (pRoom->exit[door] == NULL)
{
send_to_char ("You must LINK this room to another before setting this.\n\r", ch);
return;
}
if (pRoom->exit[door]->d_info == NULL)
{
pRoom->exit[door]->d_info = new_door ();
}
pRoom->exit[door]->d_info->rs_flags ^= get_exit_flag_number (arg1);
pRoom->exit[door]->d_info->exit_info ^= get_exit_flag_number (arg1);
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit flag toggled.\n\r", ch);
return;
}
}
if (!str_cmp (arg1, "ed"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed add [keyword]\n\r", ch);
send_to_char (" ed delete [keyword]\n\r", ch);
send_to_char (" ed edit [keyword]\n\r", ch);
send_to_char (" ed format [keyword]\n\r", ch);
return;
}
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
if (!str_cmp (arg1, "add"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed add [keyword]\n\r", ch);
return;
}
ed = new_extra_descr ();
ed->keyword = str_dup (arg2);
ed->next = pRoom->more->extra_descr;
pRoom->more->extra_descr = ed;
string_append (ch, &ed->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "fadd"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed fadd [keyword]\n\r", ch);
return;
}
ed = new_extra_descr ();
ed->keyword = str_dup (arg2);
ed->next = pRoom->more->extra_descr;
pRoom->more->extra_descr = ed;
fullscreen_editor (ch, &ed->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "edit"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed edit [keyword]\n\r", ch);
return;
}
for (ed = pRoom->more->extra_descr; ed != NULL; ed = ed->next)
{
if (is_name (arg2, ed->keyword))
break;
}
if (ed == NULL)
{
send_to_char ("Extra description keyword not found!\n\r", ch);
return;
}
string_append (ch, &ed->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "fedit"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed fedit [keyword]\n\r", ch);
return;
}
for (ed = pRoom->more->extra_descr; ed != NULL; ed = ed->next)
{
if (is_name (arg2, ed->keyword))
break;
}
if (ed == NULL)
{
send_to_char ("Extra description keyword not found!\n\r", ch);
return;
}
fullscreen_editor (ch, &ed->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "append"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed edit [keyword]\n\r", ch);
return;
}
for (ed = pRoom->more->extra_descr; ed != NULL; ed = ed->next)
{
if (is_name (arg2, ed->keyword))
break;
}
if (ed == NULL)
{
send_to_char ("Extra description keyword not found!\n\r", ch);
return;
}
string_append (ch, &ed->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "delete"))
{
DESCRIPTION_DATA *ped;
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed delete [keyword]\n\r", ch);
return;
}
ped = NULL;
for (ed = pRoom->more->extra_descr; ed != NULL; ed = ed->next)
{
if (is_name (arg2, ed->keyword))
break;
ped = ed;
}
if (ed == NULL)
{
send_to_char ("Extra description keyword not found!\n\r", ch);
return;
}
if (ped == NULL)
{
pRoom->more->extra_descr = ed->next;
}
else
{
ped->next = ed->next;
}
free_extra_descr (ed);
send_to_char ("Extra description deleted.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "format"))
{
DESCRIPTION_DATA *ped;
if (arg2[0] == '\0')
{
send_to_char ("Syntax: ed format [keyword]\n\r", ch);
return;
}
ped = NULL;
for (ed = pRoom->more->extra_descr; ed != NULL; ed = ed->next)
{
if (is_name (arg2, ed->keyword))
break;
ped = ed;
}
if (ed == NULL)
{
send_to_char ("Extra description keyword not found!\n\r", ch);
return;
}
ed->description = format_string (ed->description);
send_to_char ("Extra description formatted.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
}
if (!str_cmp (arg1, "create"))
{
value = atoi (arg2);
if (arg2[0] == '\0' || value == 0)
{
send_to_char ("Syntax: create [vnum]\n\r", ch);
return;
}
pArea = get_vnum_area (value);
if (pArea == NULL)
{
send_to_char ("That vnum is not assigned an area.\n\r", ch);
return;
}
if (!IS_BUILDER (ch, pArea))
{
send_to_char ("Vnum in an area you can't build in.\n\r", ch);
return;
}
if (get_room_index (value) != NULL)
{
send_to_char ("Room vnum already exists.\n\r", ch);
diggy = FALSE;
return;
}
pRoom = new_room_index ();
pRoom->area = pArea;
pRoom->vnum = value;
if (value > top_vnum_room)
top_vnum_room = value;
iHash = value % HASH_MAX;
pRoom->next = room_hash[iHash];
room_hash[iHash] = pRoom;
ch->desc->pEdit = (void *) pRoom;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Room created.\n\r", ch);
pArea->room_count++;
return;
}
if (!str_cmp (arg1, "name"))
{
if (arg2[0] == '\0')
{
send_to_char ("Syntax: name [name]\n\r", ch);
return;
}
free_string (pRoom->name);
pRoom->name = str_dup (verify_room_name(arg2));
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Name set.\n\r", ch);
return;
}
if (!str_cmp (arg1, "fdesc") || !str_cmp (arg1, "fdescription"))
{
char *s;
if (pRoom->description != NULL && pRoom->description[0] == 1)
{
s = str_dup (decompress (pRoom->description));
free_string (pRoom->description);
pRoom->description = s;
}
fullscreen_editor (ch, &pRoom->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "desc") || !str_cmp (arg1, "description"))
{
char *s;
if (pRoom->description != NULL && pRoom->description[0] == 1)
{
s = str_dup (decompress (pRoom->description));
free_string (pRoom->description);
pRoom->description = s;
}
if (arg2[0] == '\0')
{
string_append (ch, &pRoom->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (arg2[0] == '+')
{
string_append (ch, &pRoom->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
send_to_char ("Syntax: desc - line edit\n\r", ch);
send_to_char (" desc + - line append\n\r", ch);
return;
}
if (!str_cmp (arg1, "format"))
{
char *s;
if (pRoom->description != NULL && pRoom->description[0] == 1)
{
s = str_dup (decompress (pRoom->description));
free_string (pRoom->description);
pRoom->description = s;
}
pRoom->description = format_string (pRoom->description);
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("String formatted.\n\r", ch);
return;
}
#ifdef NEW_WORLD
if (!str_cmp (arg1, "ocean"))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_OCEAN_D))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_OCEAN_D);
send_to_char ("Toggled OFF - no longer an ocean descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_OCEAN_D);
send_to_char ("Toggled ON - this is now an ocean descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "fieldd"))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_FIELD_D))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_FIELD_D);
send_to_char ("Toggled OFF - no longer a field descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_FIELD_D);
send_to_char ("Toggled ON - this is now a field descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "lforestd"))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_LIGHTF_D))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_LIGHTF_D);
send_to_char ("Toggled OFF - no longer a light forest descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_LIGHTF_D);
send_to_char ("Toggled ON - this is now a light forest descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "forestd"))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_FOREST_D))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_FOREST_D);
send_to_char ("Toggled OFF - no longer a forest descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_FOREST_D);
send_to_char ("Toggled ON - this is now a forest descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "rforestd"))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_RFOREST_D))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_RFOREST_D);
send_to_char ("Toggled OFF - no longer a rainforest descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_RFOREST_D);
send_to_char ("Toggled ON - this is now a rainforest descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_prefix ("ancient", arg1))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_ANCIENTROAD))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_ANCIENTROAD);
send_to_char ("Toggled OFF - no longer an ancient road descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_ANCIENTROAD);
send_to_char ("Toggled ON - this is now an ancient road descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_prefix ("hilld", arg1))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_HILL_D))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_HILL_D);
send_to_char ("Toggled OFF - no longer a hill descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_HILL_D);
send_to_char ("Toggled ON - this is now a hill descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_prefix ("earthcave", arg1))
{
if (IS_SET (pRoom->room_flags_2, ROOM2_EARTHCAVE_D))
{
REMOVE_BIT (pRoom->room_flags_2, ROOM2_EARTHCAVE_D);
send_to_char ("Toggled OFF - no longer an earthcave descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
SET_BIT (pRoom->room_flags_2, ROOM2_EARTHCAVE_D);
send_to_char ("Toggled ON - this is now an earthcave descript.\n\r", ch);
SET_BIT (pArea->area_flags, AREA_CHANGED);
return;
}
#endif
#ifdef NEW_WORLD
if (!str_cmp (arg1, "light"))
{
if (arg2[0] == '\0' || !is_number (arg2))
{
send_to_char ("Syntax: light [number]\n\r", ch);
return;
}
value = atoi (arg2);
pRoom->light = value;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Light set.\n\r", ch);
return;
}
#endif
if (hugebuf_o[0]!='\0') {
page_to_char(hugebuf_o,ch);
return;
}
interpret (ch, arg);
return;
}