#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 *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];
int i;
rbbv[0] = '\0';
for (i=0; i < SECT_MAX; i++)
{
if (IS_SET(flag, (1 << i)))
strcat (rbbv, sectors[i].name_typed);
}
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, "cvnumh"))
{
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
if (!is_number(arg1)) {
send_to_char ("Syntax: calign [alignment]\n\r", ch);
return;
} else {
pRoom->cvnumh = atoi(arg1);
SET_BIT(pArea->area_flags, AREA_CHANGED);
return;
}
}
if (!str_cmp (arg1, "cvnuml"))
{
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
if (!is_number(arg1)) {
send_to_char ("Syntax: calign [alignment]\n\r", ch);
return;
} else {
pRoom->cvnuml = atoi(arg1);
SET_BIT(pArea->area_flags, AREA_CHANGED);
return;
}
}
if (!str_cmp (arg1, "calign"))
{
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
if (!is_number(arg1)) {
send_to_char ("Syntax: calign [alignment]\n\r", ch);
return;
} else {
pRoom->calign = atoi(arg1);
SET_BIT(pArea->area_flags, AREA_CHANGED);
return;
}
}
if (!str_cmp (arg1, "cbonusstr"))
{
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
if (!str_cmp(arg1, "show")|| arg1[0] == '\0')
{
send_to_char ("Syntax: cbonusstr <string>\n\r", ch);
return;
}
pRoom->cbonusstr = (char *)malloc (sizeof(arg1)+1);
strcpy(pRoom->cbonusstr, arg1);
SET_BIT(pArea->area_flags, AREA_CHANGED);
return;
}
if (!str_cmp (arg1, "?"))
{
do_help (ch, "redit");
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 ((door = get_direction_number (arg1)) != DIR_MAX)
{
if (arg2[0] != '\0')
{
argy = one_argy (argy, arg1);
strcpy (arg2, argy);
if (!str_cmp (arg1, "delete"))
{
ROOM_DATA *rd;
if (pRoom->exit[door] == NULL)
{
send_to_char ("That exit does not exist!\n\r", ch);
return;
}
rd = pRoom->exit[door]->to_room;
free_exit (pRoom->exit[door]);
pRoom->exit[door] = NULL;
if(rd != NULL)
{
rd->mapexit[rev_dir[door]] = NULL;
}
pRoom->mapexit[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);
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;
pRoom->exit[door] = NULL;
free_exit (rd->exit[rev_dir[door]]);
rd->exit[rev_dir[door]] = NULL;
rd->mapexit[rev_dir[door]] = NULL;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit and opposite side unlinked.\n\r", ch);
return;
}
if (!str_cmp (arg1, "notransport"))
{
check_room_more (pRoom);
pRoom->more->move_dir = 0;
if (IS_SET (pRoom->room_flags2, ROOM2_MOVING))
pRoom->room_flags2 -= ROOM2_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_flags2, ROOM2_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 (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->exit[door] == NULL)
{
pRoom->exit[door] = new_exit ();
}
(ROOM_DATA *) pRoom->exit[door]->to_room = rd;
pRoom->mapexit[door] = 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->mapexit[door] = ch->in_room;
pRoom->exit[door] = pExit;
SET_BIT (pArea->area_flags, AREA_CHANGED);
send_to_char ("Exit linked.\n\r", ch);
pRoom = ch->in_room;
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;
}
}
}
else
{
switch (UPPER(arg1[0]))
{
case 'A':
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;
}
break;
case 'C':
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_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 (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, "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;
}
break;
case 'D':
if (!str_cmp (arg1, "done"))
{
ch->desc->pEdit = NULL;
ch->desc->connected = CON_PLAYING;
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;
}
case 'E':
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;
}
}
case 'F':
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, "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;
}
break;
case 'L':
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;
}
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;
}
break;
case 'M':
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 (!str_cmp(arg1, "minerals") || !str_cmp(arg1, "mineral"))
{
if (is_number(arg2)) ch->in_room->minerals = atoi(arg2);
else send_to_char("Format: Minerals <number>\n\r", ch);
return;
}
break;
case 'N':
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, "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;
}
break;
case 'S':
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;
}
break;
default:
break;
}
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 (room_name_bit2(arg1) !=ROOM_NONE)
{
pRoom->room_flags2 ^= room_name_bit2 (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 (hugebuf_o[0]!='\0') {
page_to_char(hugebuf_o,ch);
return;
}
interpret (ch, arg);
return;
}