/*
* FIELD CLASSES
*/
class int_field {
public:
const char* name;
int min;
int max;
int* value;
const char* set ( char_data*, const char*, char* );
};
class cent_field {
public:
const char* name;
int min;
int max;
int* value;
const char* set ( char_data*, const char*, char* );
};
class dice_field {
public:
const char* name;
int level;
int* value;
const char* set ( char_data*, const char*, char* );
};
class string_field {
public:
const char* name;
int mem_type;
const char** value;
set_func* func;
const char* set ( char_data*, const char*, char* );
};
class type_field {
public:
const char* name;
int max;
const char** first;
const char** second;
int* value;
const char* set ( char_data*, const char*, char* );
inline const char* element ( int i );
};
inline const char* type_field :: element( int i )
{
return *(first+i*(second-first));
};
/*
* TEMPLATES
*/
template < class T >
const char* process( T* field, char_data* ch, const char* subject,
char* argument )
{
int i;
for( i = 0; field[i].name[0] != '\0'; i++ )
if( matches( argument, field[i].name ) )
return field[i].set( ch, subject, argument );
return NULL;
}
template < class T >
bool process( T* field, char_data* ch, const char* subject, char* argument,
species_data* species, player_data* player )
{
const char* response;
if( ( response = process( field, ch, subject, argument ) ) != NULL ) {
if( species != NULL ) {
mob_log( ch, species->vnum, response );
species->date = current_time;
zero_exp( species );
}
else if( player != NULL ) {
player_log( player, response );
}
return TRUE;
}
return FALSE;
}
template < class T >
bool process( T* field, char_data* ch, const char* subject, char* argument,
species_data* species )
{
return process( field, ch, subject, argument, species, NULL );
}
template < class T >
bool process( T* field, char_data* ch, const char* subject, char* argument,
obj_clss_data* obj )
{
const char* response;
if( ( response = process( field, ch, subject, argument ) ) != NULL ) {
if( obj != NULL )
obj_log( ch, obj->vnum, response );
return TRUE;
}
return FALSE;
}
/*
* FUNCTIONS
*/
void set_string ( char_data*, char*, char*&, const char*, int );
void set_type ( char_data*, char*, int&, const char*,
const char*, int,
const char**, const char** = NULL );