/**
* Handler to keep track of which players know which materials. Allows you to
* find out which materials a player knows about and add new ones. This is
* typically used in conjunction with the cmr_handler for materials which
* the player must be taught about.
*
* @see cmr_handler
* @author Deutha
*/
#define RESTORE_PATH "/save/cmr_library/"
inherit OBJECT_OBJ;
string player_name, *materials;
/**
* Initialise a players array of known materials.
*
* @param pname The name of the player.
*/
void init_data( string pname ) {
player_name = pname;
materials = ({ });
} /* init_data() */
/**
* @ignore yes
*/
int get_data_file( string pname ) {
if ( player_name != pname ) {
if ( file_size( RESTORE_PATH + pname +".o" ) > 0 )
unguarded((: restore_object, RESTORE_PATH + pname :));
else {
init_data( pname );
return 0;
}
}
return 1;
} /* get_data_file() */
/**
* @ignore yes
*/
void save_data_file( string word ) {
unguarded((: save_object, RESTORE_PATH + word :));
} /* save_data_file() */
/**
* Return the materials known by a player.
*
* @param pname The name of the player
* @return A string array of known materials.
*/
string *query_known_materials( string pname ) {
get_data_file( pname );
if ( !materials ) {
return ({ });
}
return materials + ({ });
} /* query_known_materials() */
/**
* Return whether the player knows a particular material.
*
* @param pname The name of the player.
* @param material The name of the material
* @return 1 if known 0 if not known.
*/
int query_known_material( string pname, string material ) {
get_data_file( pname );
if ( !materials ) return 0;
return ( member_array( material, materials ) != -1 );
} /* query_known_material() */
/**
* Mark a material as known by a given player.
*
* @param pname The name of the player
* @param material The name of the material
*
* @return Returns 0 if they already knew the material, 1 if they know it now.
*/
int add_known_material( string pname, string material ) {
get_data_file( pname );
if ( member_array( material, materials ) != -1 ) {
return 0;
}
materials += ({ material });
save_data_file( player_name );
return 1;
} /* add_known_material */