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