diff --git a/README.md b/README.md index 4c314be9..0626bdf5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # Sapphire - FINAL FANTASY XIV Server Emulator -![FFXIV Sapphire](https://i.imgur.com/I4bj1tR.png) + +

+ FFXIV Sapphire +

[![Discord Server](https://img.shields.io/badge/discord-Sapphire-7289DA.svg)](https://discord.gg/xxcdCER) [![Linux Build Status](https://travis-ci.org/SapphireMordred/Sapphire.svg?branch=master)](https://travis-ci.org/SapphireMordred/Sapphire) diff --git a/src/tools/exd_struct_gen/CMakeLists.txt b/src/tools/exd_struct_gen/CMakeLists.txt index cc490615..1c1ada43 100644 --- a/src/tools/exd_struct_gen/CMakeLists.txt +++ b/src/tools/exd_struct_gen/CMakeLists.txt @@ -24,10 +24,8 @@ set_target_properties(exd_struct_gen PROPERTIES ) if (UNIX) - target_link_libraries (exd_struct_gen common xivdat pthread mysqlclient dl z) + target_link_libraries (exd_struct_gen common xivdat pthread mysqlclient dl z stdc++fs) else() target_link_libraries (exd_struct_gen common xivdat libmysql zlib1) endif() -target_link_libraries(exd_struct_gen ${Boost_LIBRARIES} ${Boost_LIBRARIES}) - diff --git a/src/tools/exd_struct_gen/main.cpp b/src/tools/exd_struct_gen/main.cpp index 8f850469..d60b153b 100644 --- a/src/tools/exd_struct_gen/main.cpp +++ b/src/tools/exd_struct_gen/main.cpp @@ -17,6 +17,7 @@ #include #include #include +#include @@ -111,77 +112,39 @@ std::string generateStruct( const std::string& exd ) int count = 0; - auto json = nlohmann::json(); - std::istream exJson( "ex.json" ); + std::ifstream exJson( "ex.json" ); exJson >> json; - for( auto& sheet : json["sheets"] ) + for( auto& definition : json["sheets"][exd] ) { - std::string name = json["sheet"]; - if( name != exd ) - continue; + uint32_t index; + std::string converterTarget = ""; + bool isRepeat = false; + int num = 0; + + index = definition["index"].get< uint32_t >(); + indexToNameMap[ index ] = std::string( definition["name"] ); + + converterTarget = std::string( definition["converter"]["target"] ); + if( nameTaken.find( converterTarget ) != nameTaken.end() ) + indexToTarget[ index ] = converterTarget; + + if( auto count = definition["count"] ) + { + num = std::stoi( std::string( count ) ); + isRepeat = true; + indexIsArrayMap[ index ] = true; + indexCountMap[ index ] = num; + + std::string fName = definition["definition"]["name"]; + indexToNameMap[ index ] = fName; + } + - } - BOOST_FOREACH( boost::property_tree::ptree::value_type& sheet, m_propTree.get_child( "sheets" ) ) - { - std::string name = sheet.second.get< std::string >( "sheet" ); - if( name != exd ) - continue; - - BOOST_FOREACH( boost::property_tree::ptree::value_type& show, sheet.second.get_child( "definitions" ) ) - { - uint32_t index; - std::string converterTarget = ""; - bool isRepeat = false; - int num = 0; - try - { - index = show.second.get< uint32_t >( "index" ); - } - catch( ... ) - { - index = 0; - } - try - { - std::string fieldName = show.second.get< std::string >( "name" ); - indexToNameMap[ index ] = fieldName; - } - catch( ... ) - { - } - - try - { - converterTarget = show.second.get< std::string >( "converter.target" ); - if( nameTaken.find( converterTarget ) != nameTaken.end() ) - indexToTarget[ index ] = converterTarget; - } - catch( ... ) - { - } - - try - { - show.second.get< std::string >( "type" ); - num = show.second.get< uint8_t >( "count" ); - isRepeat = true; - indexIsArrayMap[ index ] = true; - indexCountMap[ index ] = num; - std::string fName = show.second.get< std::string >( "definition.name" ); - indexToNameMap[ index ] = fName; - } - catch( ... ) - { - } - - } - } - std::string result = "struct " + exd + "\n{\n"; @@ -211,8 +174,12 @@ std::string generateStruct( const std::string& exd ) fieldName = indexToNameMap[ count ]; } fieldName[ 0 ] = std::tolower( fieldName[ 0 ] ); - fieldName.erase( std::remove_if( fieldName, std::is_any_of( ",-':![](){}<>% \x02\x1f\x01\x03" ) ), - fieldName.end() ); + + std::string badChars = ",-':![](){}<>% \x02\x1f\x01\x03"; + std::for_each( badChars.begin(), badChars.end(), [ &fieldName ]( const char c ) + { + fieldName.erase( std::remove( fieldName.begin(), fieldName.end(), c ), fieldName.end() ); + }); for( auto entry : numberToStringMap ) { @@ -340,9 +307,10 @@ int main( int argc, char** argv ) std::istreambuf_iterator< char >() ); - using boost::property_tree::ptree; - ptree m_propTree; - boost::property_tree::read_json( "ex.json", m_propTree ); + std::ifstream exJson( "ex.json" ); + + auto json = nlohmann::json(); + exJson >> json; g_log.info( "Setting up EXD data" ); if( !g_exdData.init( datLocation ) ) @@ -369,19 +337,19 @@ int main( int argc, char** argv ) //nameTaken[name] = "1"; //} - BOOST_FOREACH( boost::property_tree::ptree::value_type& sheet, m_propTree.get_child( "sheets" ) ) - { - std::string name = sheet.second.get< std::string >( "sheet" ); + for( auto& sheet : json["sheets"] ) + { + std::string name = json["sheet"]; - forwards += "struct " + name + ";\n"; - structDefs += generateStruct( name ); - dataDecl += generateDatAccessDecl( name ); - idListsDecl += generateIdListDecl( name ); - getterDecl += generateDirectGetters( name ); - datAccCall += generateSetDatAccessCall( name ); - constructorDecl += generateConstructorsDecl( name ); - idListGetters += generateIdListGetter( name ); - } + forwards += "struct " + name + ";\n"; + structDefs += generateStruct( name ); + dataDecl += generateDatAccessDecl( name ); + idListsDecl += generateIdListDecl( name ); + getterDecl += generateDirectGetters( name ); + datAccCall += generateSetDatAccessCall( name ); + constructorDecl += generateConstructorsDecl( name ); + idListGetters += generateIdListGetter( name ); + } getterDecl += "\n template< class T >\n"