/* * 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 );