CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
9.8k stars 4.08k forks source link

Load faults / fault_fixes with generic_factory #73816

Closed irwiss closed 1 month ago

irwiss commented 1 month ago

Summary

None

Purpose of change

Load faults / fault_fixes with generic_factory

Describe the solution

Refactor, also slightly clean up the random fault of type and add a null sentinel

Describe alternatives you've considered

Testing

Dump faults and fixes before and after the patch, the difference should be the added null sentinel

Dump stub ```c++ static void dump() { const auto dump_req = []( JsonOut & jo, const std::string & name, const requirement_data & rd ) { if( rd.is_empty() ) { return; } jo.write( name ); jo.write_member_separator(); rd.dump( jo ); }; { std::vector fault_ids; for( const auto&[id, f] : faults_all ) { fault_ids.push_back( id.str() ); } std::sort( fault_ids.begin(), fault_ids.end() ); write_to_file( PATH_INFO::base_path_path() / "faults_dump.json", [&]( std::ostream & fout ) { JsonOut jo( fout, true ); jo.start_array(); for( const std::string &fid_str : fault_ids ) { const fault &f = fault_id( fid_str ).obj(); jo.start_object( true ); jo.member( "id", f.id().str() ); jo.member( "name", f.name() ); jo.member( "description", f.description() ); jo.member( "get_fixes", f.get_fixes() ); jo.member( "item_prefix", f.item_prefix() ); jo.member( "type", f.type() ); jo.member( "price_mod", f.price_mod() ); //dump_req( jo, "install_reqs", vpi.install_requirements() ); jo.end_object(); } jo.end_array(); } ); std::vector fix_ids; for( const auto &[id, f] : fault_fixes_all ) { fix_ids.push_back( id.str() ); } std::sort( fix_ids.begin(), fix_ids.end() ); write_to_file( PATH_INFO::base_path_path() / "faults_fixes_dump.json", [&]( std::ostream & fout ) { JsonOut jo( fout, true ); jo.start_array(); for( const std::string &fid_str : fix_ids ) { const fault_fix &f = fault_fix_id( fid_str ).obj(); jo.start_object( true ); jo.member( "id", f.id_.str() ); jo.member( "faults_added", f.faults_added ); jo.member( "faults_removed", f.faults_removed ); jo.member( "mod_damage", f.mod_damage ); jo.member( "mod_degradation", f.mod_degradation ); jo.member( "name", f.name.translated() ); jo.member( "set_variables", f.set_variables ); jo.member( "skills", f.skills ); jo.member( "success_msg", f.success_msg.translated() ); jo.member( "time", f.time ); jo.member( "time_save_flags", f.time_save_flags ); jo.member( "time_save_profs", f.time_save_profs ); dump_req( jo, "get_requirements", f.get_requirements() ); jo.end_object(); } jo.end_array(); } ); } } ```

Additional context