#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "emlen.h"
#ifndef WINDOWS
#include <sys/time.h>
#endif
void
z_areachange (CHAR_DATA * ch, char *argy)
{
char arg1[SML_LENGTH];
char arg2[SML_LENGTH];
int start_vnum = -1;
int end_vnum = -1;
int new_area_num = -1;
int i;
ROOM_DATA *room;
AREA_DATA *a;
AREA_DATA *destination_area = NULL;
DEFINE_COMMAND ("z_areachange", z_areachange, POSITION_DEAD, MAX_LEVEL, LOG_ALWAYS, "This command moves vnums into a new area, without changing the vnums.")
argy = one_argy (argy, arg1);
argy = one_argy (argy, arg2);
start_vnum = atoi (arg1);
end_vnum = atoi (arg2);
new_area_num = atoi (argy);
if (start_vnum <= 0 || end_vnum <= 0 || start_vnum > end_vnum ||
new_area_num < 0)
{
send_to_char ("Invalid. Syntax: z_areachange <min vnum> <max vnum> <new area>.\n\r", ch);
return;
}
for (a = area_first; a != NULL; a = a->next)
{
if (a->vnum == new_area_num)
{
destination_area = a;
break;
}
}
if (!destination_area)
{
send_to_char ("Destination area vnum not found.\n\r", ch);
return;
}
/* Purge the world of mobs */
for (i = 0; i < HASH_MAX; i++)
{
for (room = room_hash[i]; room != NULL; room = room->next)
{
raw_purge (room);
}
}
for (i = start_vnum; i < end_vnum; i++)
{
if ((room = get_room_index (i)) == NULL)
continue;
room->area = destination_area;
}
reset_world ();
send_to_char ("Operation complete. Please asave complete at this time.\n\r", ch);
return;
}
void
do_idea (CHAR_DATA * ch, char *argy)
{
FILE *fpp;
DEFINE_COMMAND ("idea", do_idea, POSITION_DEAD, 0, LOG_NORMAL, "Allows you to enter an idea for the admin to read later on.")
if (!ch)
return;
if ((fpp = fopen ("ideas.txt", "a+")) == NULL)
return;
fprintf (fpp, "%s at %d: %s\n", NAME (ch), (ch->in_room ? ch->in_room->vnum : 0), argy);
fclose (fpp);
send_to_char ("Noted! Thanks!\n\r", ch);
return;
}
void
check_room_more (ROOM_DATA * room)
{
ROOM_MORE *mor;
if (!room)
return;
if (room->more)
return;
mor = mem_alloc (sizeof (*mor));
bzero (mor, sizeof (*mor));
mor->people = NULL;
mor->contents = NULL;
mor->copper = 0;
mor->extra_descr = NULL;
mor->move_dir = 0;
mor->gold = 0;
mor->move_message = &str_empty[0];
mor->pcs = 0;
mor->trap = NULL;
room->more = mor;
return;
}
void
check_clear_more (ROOM_DATA * room)
{
ROOM_MORE *mor = room->more;
if (!mor)
return;
if(!(mor->reset_first || mor->people || mor->contents || mor->reset_last ||
mor->move_message || mor->move_dir || mor->copper || mor->gold ||
mor->pcs))
{
free_m (mor);
room->more = NULL;
}
return;
}
ROOM_DATA *
new_room (void)
{
ROOM_DATA *oneroom;
short door;
oneroom = mem_alloc (sizeof (*oneroom));
oneroom->more = NULL;
oneroom->vnum = 0;
oneroom->data_type = K_ROOM;
oneroom->room_flags = 0;
oneroom->room_flags2 = 0;
oneroom->light = 0;
oneroom->sector_type = 1;
oneroom->name = &str_empty[0];
oneroom->description = &str_empty[0];
oneroom->shade = FALSE;
for (door = 0; door <= 5; door++)
oneroom->exit[door] = NULL;
oneroom->tracks = NULL;
oneroom->ptracks = NULL;
oneroom->blood = 0;
oneroom->a = '\0';
oneroom->c = '\0';
oneroom->y = FALSE;
oneroom->command_objs = 0;
return oneroom;
}