#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; }