/
mudd/docs/html/
mudd/world/
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "mud.h"

#ifdef WINDOWS
void bzero(char *spot, int len) {
	while (len>0) {*spot='\0'; len--; spot++;}
return;
}

void dostuff(int sk) {return;}
#endif

void do_repop (CHAR_DATA * ch, char *argy)
{
  AREA_DATA *a;
  char buf[STD_LENGTH];
  DEFINE_COMMAND ("repop", do_repop, POSITION_DEAD, MAX_LEVEL, LOG_NORMAL, "Shows you the state of zone repops.")
    hugebuf_o[0] = '\0';
  for (a = area_first; a != NULL; a = a->next)
    {
      sprintf (buf, "[%3d] %-30s \x1B[1;37m%3d\x1B[37;0m/\x1B[1;37m%-3d\x1B[37;0m\n\r",
	       a->vnum, a->name, a->repop_counter, a->repop_rate);
      strcat (hugebuf_o, buf);
    }
  page_to_char (hugebuf_o, ch);
  return;
}

void aedit (CHAR_DATA * ch, char *argy)
{
  AREA_DATA *pArea;
  AREA_DATA *Area;
  char arg[STD_LENGTH];
  char arg1[STD_LENGTH];
  char arg2[STD_LENGTH];
  char buf[STD_LENGTH];
  int value;

  pArea = (AREA_DATA *) ch->desc->pEdit;
  strcpy (arg, argy);
  smash_tilde (argy);
  argy = one_argy (argy, arg1);
  
  if (!IS_BUILDER (ch, pArea))
    {
      send_to_char ("You are not a builder in this area!\n\r", ch);
    }
  if (!str_cmp (arg1, "show") || arg_count (arg) == 0)
    {
      sprintf (buf, "%d", pArea->vnum);
      do_astat (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, "aedit");
      return;
    }


  if (!IS_BUILDER (ch, pArea))
    {
      interpret (ch, arg);
      return;
    }

  if (!str_cmp (arg1, "	rate") && is_number (arg2))
    {
      int i;
      argy = one_argy (argy, arg2);
      i = atoi (arg2);
      pArea->repop_rate = i;
      if (pArea->repop_counter > pArea->repop_rate)
	pArea->repop_counter = pArea->repop_rate;
      send_to_char ("Area repop rate set.\n\r", ch);
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      return;
    }
  if (!str_cmp (arg1, "counter") && is_number (arg2))
    {
      int i;
      argy = one_argy (argy, arg2);
      i = atoi (arg2);
      pArea->repop_counter = i;
      if (pArea->repop_counter > pArea->repop_rate)
	pArea->repop_counter = pArea->repop_rate;
      send_to_char ("Area repop counter set.\n\r", ch);
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      return;
    }
  if (!str_cmp (arg1, "message"))
    {
      if (pArea->repop)
        free_string (pArea->repop);
      pArea->repop = NULL;
      pArea->repop = str_dup (argy);
      send_to_char ("Area repop message set.\n\r", ch);
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      return;
    }

  if ((value = area_name_bit (arg1)) != AREA_NONE)
    {
      sprintf (buf, "%s toggled %s.\n\r", capitalize(arg1), (pArea->area_flags & value ? "\x1B[1;30mOFF\x1B[0;37m" : "\x1B[1;37mON\x1B[0;37m"));
      send_to_char(buf, ch);
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      pArea->area_flags ^= value;
      if (!str_cmp (arg1, "nuke"))
	save_area_list();
      return;
    }
  
  if (!str_cmp (arg1, "name"))
    {
      if (argy[0] == '\0')
	{
	  send_to_char ("Syntax: name <name>\n\r", ch);
	  return;
	}
      free_string (pArea->name);
      pArea->name = str_dup (argy);
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      send_to_char ("Name set.\n\r", ch);
      return;
    }
  if (!str_cmp (arg1, "align") || !str_cmp (arg1, "alignment"))
    {
      argy = one_argy (argy, arg2);
      if (!is_number (arg2))
	{
	  send_to_char ("Align <number>, 0 means neutral\n\r", ch);
	  return;
	}
      set_area_align (pArea, atoi (arg2), ch);
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      send_to_char ("Alignment set.\n\r", ch);
      save_area_list ();
      return;
    }
  if (!str_cmp (arg1, "filename") || !str_cmp (arg1, "file"))
    {
      for (value = 0;value <= 12;value++)
         {
           if (argy[value] == '\0')
             {
               send_to_char ("\n\rSyntax: filename <areaname>.are\n\r", ch);
               return;
             }
           if (argy[value] == '.' && argy[value + 1] == 'a' && argy[value + 2] == 'r' && argy[value + 3] == 'e'
               && argy[value + 4] =='\0')
             {
               for (Area = area_first; Area != NULL; Area = Area->next)
                  {
                    if (!str_cmp(Area->filename, argy))
                      {
                        send_to_char ("\n\rAn other area already use this filename.\n\r", ch);
                        return;
                      }
                  }
               free_string (pArea->filename);
               pArea->filename = str_dup (argy);
               save_area (pArea);
               SET_BIT (pArea->area_flags, AREA_CHANGED);
               send_to_char ("Filename set.\n\r", ch);
               save_area_list ();
               return;
             }
         }
    }
  if (!str_cmp (arg1, "coord") || !str_cmp (arg1, "coords") ||
      !str_cmp (arg1, "coordinates"))
    {
      int xval; 
      int yval; 
      AREA_DATA *ar;
      argy = one_argy (argy, arg2);
      if (!is_number (arg2) || !is_number (argy))
	{
	  send_to_char ("Coords <xval> <yval>\n\r", ch);
	  return;
	}
      xval = atoi(arg2);
      yval = atoi(argy);
      if (xval < 1 || xval > 79 || yval < 1 || yval > 25)
	{
	  send_to_char ("The x-values must be between 1 and 79 and the y-values must be between 1 and 24.\n\r", ch);
	  return;
	}
      for (ar = area_first; ar != NULL; ar = ar->next)
	{
	  if (ar != pArea && ar->x == xval && ar->y == yval)
	    {
	      send_to_char("Another area already has those coordinates.\n\r", ch);
	      return;
	    }
	}
      pArea->x = xval;
      pArea->y = yval;
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      send_to_char ("Coordinates set.\n\r", ch);
      return;
    }
      
  if (!str_cmp (arg1, "security"))
    {
      argy = one_argy (argy, arg2);
      if (!is_number (arg2) || arg2[0] == '\0')
	{
	  send_to_char ("Syntax: security <level>\n\r", ch);
	  return;
	}
      value = atoi (arg2);
      pArea->security = value;
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      send_to_char ("Security set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "builder"))
    {
      argy = one_argy (argy, arg2);
      if (arg2[0] == '\0')
	{
	  send_to_char ("Syntax: builder <name toggle>\n\r", ch);
	  return;
	}
      arg2[0] = UPPER (arg2[0]);
      if (strstr (pArea->builders, arg2) != NULL)
	{
	  pArea->builders = string_replace (pArea->builders, arg2, "\0");
	  pArea->builders = string_unpad (pArea->builders);
	  SET_BIT (pArea->area_flags, AREA_CHANGED);
	  send_to_char ("Builder removed.\n\r", ch);
	  return;
	}
      else
	{
	  buf[0] = '\0';
	  if (pArea->builders[0] != '\0')
	    {
	      strcat (buf, pArea->builders);
	      strcat (buf, " ");
	    }
	  strcat (buf, arg2);
	  free_string (pArea->builders);
	  pArea->builders = string_proper (str_dup (buf));
	  SET_BIT (pArea->area_flags, AREA_CHANGED);
	  send_to_char ("Builder added.\n\r", ch);
	  return;
	}
    }

  if (!str_cmp (arg1, "vnum"))
    {
      argy = one_argy (argy, arg2);
      if (!is_number (argy) || argy[0] == '\0'
	  || !is_number (arg2) || arg2[0] == '\0')
	{
	  send_to_char ("Syntax: vnum <lower> <upper>\n\r", ch);
	  return;
	}
      if (atoi(arg2) > atoi(argy))
        {
          send_to_char ("Lower vnums must have a lower value than upper vnum.\n\r", ch);
          return;
        }
      value = atoi (arg2);
      if (get_vnum_area (value) != NULL
	  && get_vnum_area (value) != pArea)
	{
	  send_to_char ("Lower vnum already assigned.\n\r", ch);
	  return;
	}
      pArea->lvnum = value;
      send_to_char ("Lower vnum set.\n\r", ch);
      value = atoi (argy);
      if (get_vnum_area (value) != NULL
	  && get_vnum_area (value) != pArea)
	{
	  send_to_char ("Upper vnum already assigned.\n\r", ch);
	  return;
	}
      pArea->uvnum = value;
      send_to_char ("Upper vnum set.\n\r", ch);
      SET_BIT (pArea->area_flags, AREA_CHANGED);
      return;
    }

  interpret (ch, arg);
  return;
}


void
soc_edit (CHAR_DATA * ch, char *argy)
{
  SOCIAL *s;
  char arg[STD_LENGTH];
  char arg1[STD_LENGTH];
  char arg2[STD_LENGTH];

  s = (SOCIAL *) ch->desc->pEdit;
  strcpy (arg, argy);
  smash_tilde (argy);
  argy = one_argy (argy, arg1);
  strcpy (arg2, argy);

  if (!str_cmp (arg1, "show") || arg_count (arg) == 0)
    {
      show_social (s, ch);
      return;
    }

  if (!str_cmp (arg1, "done"))
    {
      ch->desc->pEdit = NULL;
      ch->desc->connected = CON_PLAYING;
      social_update_hash ();
      save_new_socials ();
      return;
    }

  if (!str_cmp (arg1, "create"))
    {
      social_update_hash ();
      s = new_social ();
      strcpy (s->name, "none");
      ch->desc->pEdit = s;
      send_to_char ("Social created.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "name"))
    {
      if (strlen (arg2) < 20)
	{
	  send_to_char ("Name set.\n\r", ch);
	  strcpy (s->name, arg2);
	}
      return;
    }

  if (!str_cmp (arg1, "to_char"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->char_no_arg);
	  s->char_no_arg = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->char_no_arg);
      s->char_no_arg = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "to_others"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->others_no_arg);
	  s->others_no_arg = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->others_no_arg);
      s->others_no_arg = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "char_found"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->char_found);
	  s->char_found = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->char_found);
      s->char_found = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "others"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->others_found);
	  s->others_found = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->others_found);
      s->others_found = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "to_vict"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->vict_found);
	  s->vict_found = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->vict_found);
      s->vict_found = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "char_not"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->char_not_found);
	  s->char_not_found = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->char_not_found);
      s->char_not_found = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "char_self"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->char_auto);
	  s->char_auto = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->char_auto);
      s->char_auto = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }

  if (!str_cmp (arg1, "others_self"))
    {
      if (arg2[0] == '\0')
	{
	  free_string (s->others_auto);
	  s->others_auto = NULL;
	  send_to_char ("Field cleared.\n\r", ch);
	  return;
	}
      free_string (s->others_auto);
      s->others_auto = str_dup (arg2);
      send_to_char ("Field set.\n\r", ch);
      return;
    }
  interpret (ch, arg);
  return;
}