tfe-1.0/area/
tfe-1.0/files/
tfe-1.0/logs/
tfe-1.0/logs/immortal/
tfe-1.0/logs/mob/
tfe-1.0/logs/object/
tfe-1.0/logs/player/
tfe-1.0/logs/room/
tfe-1.0/notes/clans/
tfe-1.0/player/
tfe-1.0/prev/
tfe-1.0/prev/area/
tfe-1.0/prev/player/
tfe-1.0/prev/rooms/
tfe-1.0/rooms/
tfe-1.0/src-gc/
tfe-1.0/src-msvc/
tfe-1.0/src-unix/
tfe-1.0/www/
tfe-1.0/www/html/
#include "define.h"
#include "struct.h"


/*
 *   SET STRINGS
 */


void set_string( char_data* ch, char* argument, char*& string,
  const char* subject, int mem_type )
{
  if( *argument == '\0' ) {
    send( ch, "Set %s to what?\r\n[ Current Value: %s ]\r\n",
      subject, string );
    return;
    }  

  send( ch, "%s set.\r\n[ New:  %s ]\r\n[ Prev: %s ]\r\n",
    subject, argument, string );
  free_string( string, mem_type );
  string = alloc_string( argument, mem_type );

  return;
}


const char* string_field :: set( char_data* ch, const char* subject,
  char* argument )
{
  static char  buf  [ FOUR_LINES ];

  if( *argument == '\0' ) {
    send( ch, "Set %s of %s to?\r\n[ Current value: %s ]\r\n",
      name, subject, *value );
    return empty_string;
    }

  if( func == NULL ) {
    if( !strcasecmp( argument, "blank" ) ) {
      send( ch, "%s on %s set blank.\r\n[ Prev: %s ]\r\n",
        name, subject, *value );
      free_string( (char *) *value, mem_type );
      *value = empty_string;
      sprintf( buf, "%s set blank.", name );
      return buf;
      }
    }
  else {
    if( ( *func )( ch, argument, *value ) == FALSE )
      return empty_string;
    }

  send( ch, "%s on %s set.\r\n[ New:  %s ]\r\n[ Prev: %s ]\r\n",
    name, subject, argument, *value );
  free_string( (char *) *value, mem_type );
  *value = alloc_string( argument, mem_type );
  sprintf( buf, "%s set to %s.", name, argument );

  return buf;
};


/*
 *   SET TYPES
 */


void set_type( char_data* ch, char* argument, int& value,
  const char* field, const char* subject, int max,
  const char** word1, const char** word2 )
{
  int i;

  if( word2 == NULL )
     word2 = word1+1;

  if( *argument == '\0' ) {
    page( ch, "%s Options:\r\n", field );
    for( i = 0; i < max; i++ ) 
      page( ch, "%20s%s", element( i, word1, word2 ),
        i%3 == 2 ? "\r\n" : "" );
    page( ch, "\r\n%s[ Current Value: %s ]\r\n", i%3 != 0 ? "\r\n" : "",
      element( value, word1, word2 ) );
    return;
    }

  for( i = 0; i < max; i++ ) {
    if( fmatches( element( i, word1, word2 ), argument ) ) {
      value = i;
      send( ch, "%s on %s set to %s.\r\n", field, subject,
        element( i, word1, word2 ) );
      return;
      }
    }

  send( ch, "Unknown %s.\r\n", subject );

  return;
}


const char* type_field :: set( char_data* ch, const char* subject,
  char* argument )
{
  static char  buf  [ TWO_LINES ];
  char         tmp  [ TWO_LINES ];
  int            i;

  if( argument[0] == '\0' ) {
    send( ch, "%s Options:\r\n", name );
    for( i = 0; i < max; i++ ) {
      sprintf( tmp, "%20s%s", element( i ), i%3 == 2 ? "\r\n" : "" );
      send( tmp, ch );
      }
    sprintf( tmp, "\r\n%s[ Current Value: %s ]\r\n", i%3 != 0 ? "\r\n" : "",
      element( *value ) );
    send( tmp, ch );
    return empty_string;
    }

  int length = strlen( argument );

  for( i = 0; i < max; i++ ) {
    if( !strncasecmp( element( i ), argument, length ) ) {
      *value = i;
      sprintf( tmp, "%s on %s set to %s.\r\n", name, subject, element( i ) );
      tmp[0] = toupper( tmp[0] );
      send( tmp, ch );
      sprintf( buf, "%s set to %s.", name, element( i ) );
      return buf;
      }
    }

  sprintf( tmp, "Unknown %s.\r\n", name );
  send( tmp, ch );

  return empty_string;
}


/*
 *   INTEGERS
 */


const char* int_field :: set( char_data *ch, const char* subject,
  char *argument )
{
  char*  tmp  = static_string( );
  int    num;

  if( *argument == '\0' ) {
    send( ch, "Set %s of %s to?\r\n[ Allowed range: %d to %d - current\
 value: %d ]\r\n", name, subject, min, max, *value );
    return empty_string;
    }

  if( ( num = atoi( argument ) ) < min || num > max ) {
    send( ch, "The allowed range for %s is from %d to %d.\r\n",
      name, min, max );
    return empty_string;
    }

  if( num == *value ) {
    send( ch, "%s on %s is already set to %d\r\n", 
      name,subject, num );
    return empty_string;
    }

  send( ch, "%s on %s set to %d.\r\n[ Prev. Value: %d ]\r\n",
    name, subject, num, *value );
  sprintf( tmp, "%s set to %d from %d.", name, num, *value );

  *value = num;

  return tmp;
}


/*
 *   CENTS
 */


const char* cent_field :: set( char_data *ch, const char* subject,
  char *argument )
{
  char*  tmp  = static_string( );
  int    num;

  if( *argument == '\0' ) {
    send( ch, "Set %s of %s to?\r\n[ Allowed range: %.2f to %.2f - current\
 value: %.2f ]\r\n", name, subject, (float) min/100, (float) max/100, *value );
    return empty_string;
    }

  if((num = (int) (100 * atof(argument))) < min || num > max ) {
    send( ch, "The allowed range for %s is from %.2f to %.2f.\r\n",
      name, (float) min/100, (float) max/100 );
    return empty_string;
    }

  if( num == *value ) {
    send( ch, "%s on %s is already set to %.2f\r\n", 
      name, subject, (float) num/100 );
    return empty_string;
    }

  send( ch, "%s on %s set to %.2f.\r\n[ Prev. Value: %.2f ]\r\n",
    name, subject, (float) num/100, (float) *value/100 );
  sprintf( tmp, "%s set to %.2f from %.2f.",
    name, (float) num/100, (float) *value/100 );

  *value = num;

  return tmp;
}


/*
 *   DICE
 */


const char* dice_field :: set( char_data* ch, const char* subject,
  char* argument )
{
  static char    buf  [ TWO_LINES ];
  char           tmp  [ TWO_LINES ];
  dice_data    dice1;
  dice_data    dice2;

  dice1 = *value;

  if( argument[0] == '\0' ) {
    sprintf( tmp, "Set %s of %s to?\r\n[ Current value: %dd%d+%d ]\r\n", 
      name, subject, dice1.number, dice1.side, dice1.plus );
    send( tmp, ch );
    return empty_string;
    }

  dice2.number = atoi( argument );
  for( ; isdigit( *argument ); argument++ );
  if( toupper( *argument++ ) != 'D' ) {
    send( "Incorrect format: #d#+#.\r\n", ch );
    return empty_string;
    }
  dice2.side = atoi( argument );
  for( ; isdigit( *argument ); argument++ );
  dice2.plus = ( *argument++ == '+' ? atoi( argument ) : 0 );

  sprintf( tmp, "%s on %s set to %dd%d+%d.\r\n[ Prev. Value: %dd%d+%d ]\r\n",
    name, subject, dice2.number, dice2.side, dice2.plus,
    dice1.number, dice1.side, dice1.plus );
  send( tmp, ch );

  *value = (int) dice2;

  sprintf( buf, "%s set to %dd%d+%d.",
    name, dice2.number, dice2.side, dice2.plus );

  return buf; 
}