diff --git a/.appveyor.yml b/.appveyor.yml index 70d4d921..ef08146f 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,5 +1,5 @@ os: - - Visual Studio 2017 + - Visual Studio 2019 configuration: - Debug @@ -20,8 +20,8 @@ before_build: - git submodule update --init - mkdir build - cd build - - cmake .. -G "Visual Studio 15 2017 Win64" - - cmake --build . --target ALL_BUILD --config Release + - cmake .. -G "Visual Studio 16 2019" -A x64 + - cmake --build . --target ALL_BUILD --config RelWithDebInfo build_script: - cd bin diff --git a/.gitmodules b/.gitmodules index a7b40f34..f8ad1744 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "deps/recastnavigation"] path = deps/recastnavigation url = https://github.com/SapphireServer/recastnavigation +[submodule "deps/ffxiv-actions"] + path = deps/ffxiv-actions + url = https://github.com/SapphireServer/ffxiv-actions.git diff --git a/.travis.yml b/.travis.yml index 375d4353..4c04e527 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,9 +14,10 @@ matrix: sources: - ubuntu-toolchain-r-test packages: - - g++-7 + - g++-8 env: - - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" + - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" + - CXX=g++-8 # Setup cache cache: diff --git a/CMakeLists.txt b/CMakeLists.txt index 2454d90b..76160f3d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,9 @@ add_custom_target( copy_runtime_files ALL COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/config ${CMAKE_BINARY_DIR}/bin/config COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/sql ${CMAKE_BINARY_DIR}/bin/sql COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/web ${CMAKE_BINARY_DIR}/bin/web - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/sql_import.sh ${CMAKE_BINARY_DIR}/bin/sql_import.sh ) + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/sql_import.sh ${CMAKE_BINARY_DIR}/bin/sql_import.sh + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/bin/data/actions + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/deps/ffxiv-actions/actions ${CMAKE_BINARY_DIR}/bin/data/actions ) ###################################### # Dependencies and compiler settings # @@ -44,7 +46,6 @@ add_subdirectory( "deps/MySQL" ) add_subdirectory( "deps/datReader" ) add_subdirectory( "deps/mysqlConnector" ) add_subdirectory( "deps/recastnavigation" ) -add_subdirectory( "deps/stackwalker" ) ############################## # Main Sapphire Components # diff --git a/CMakeSettings.json b/CMakeSettings.json index 7a6006fe..cc894359 100644 --- a/CMakeSettings.json +++ b/CMakeSettings.json @@ -1,21 +1,32 @@ { // See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file. + "environments": [ + { + "BuildDir": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build" + } + ], "configurations": [ { "name": "x64-Debug", - "generator": "Visual Studio 15 2017 Win64", + "generator": "Visual Studio 16 2019 Win64", "configurationType": "Debug", - "buildRoot": "${env.USERPROFILE}\\CMakeBuild\\${workspaceHash}\\build\\${name}", + "buildRoot": "${env.BuildDir}\\${name}", "cmakeCommandArgs": "-DCMAKE_BUILD_TYPE=\"Debug\"", - "buildCommandArgs": "-m -v:minimal" + "buildCommandArgs": "-m -v:minimal", + "inheritEnvironments": [ + "msvc_x64" + ] }, { "name": "x64-Release", - "generator": "Visual Studio 15 2017 Win64", + "generator": "Visual Studio 16 2019 Win64", "configurationType": "Release", - "buildRoot": "${env.USERPROFILE}\\CMakeBuild\\${workspaceHash}\\build\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "-m -v:minimal" + "buildRoot": "${env.BuildDir}\\${name}", + "cmakeCommandArgs": "-DCMAKE_BUILD_TYPE=\"RelWithDebInfo\"", + "buildCommandArgs": "-m -v:minimal", + "inheritEnvironments": [ + "msvc_x64" + ] } ] } diff --git a/README.md b/README.md index 582f4ebf..324a54a1 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Sapphire requires the following software: | *Name* | *Windows* | *Linux* | | ------ | --------- | ------- | -| CMake 3.0.2+ and C++17 capable compiler | [Visual Studio 2017](https://www.visualstudio.com/) | `gcc 7` and `g++ 7` or newer | +| CMake 3.0.2+ and C++17 capable compiler | [Visual Studio 2019](https://www.visualstudio.com/) | `gcc 8` and `g++ 8` or newer, or equivalent `clang` version. | | MySQL Server 5.7 | [Official Site](https://dev.mysql.com/downloads/mysql/) | MySQL server from your distribution's package manager | Please check the [wiki](https://github.com/SapphireMordred/Sapphire/wiki) for detailed installation/build instructions for your OS. diff --git a/cmake/FindMySQL.cmake b/cmake/FindMySQL.cmake index 42fb7833..0042d308 100644 --- a/cmake/FindMySQL.cmake +++ b/cmake/FindMySQL.cmake @@ -60,6 +60,7 @@ if( UNIX ) else( MYSQL_CONFIG ) set(MYSQL_ADD_LIBRARIES "") list(APPEND MYSQL_ADD_LIBRARIES "mysqlclient_r") + list(APPEND MYSQL_ADD_LIBRARIES "mariadbclient") endif( MYSQL_CONFIG ) endif( UNIX ) @@ -76,6 +77,7 @@ find_path(MYSQL_INCLUDE_DIR PATHS ${MYSQL_ADD_INCLUDE_PATH} /usr/include + /usr/include/mariadb /usr/include/mysql /usr/local/include /usr/local/include/mysql @@ -83,6 +85,8 @@ find_path(MYSQL_INCLUDE_DIR "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/include" "${PROGRAM_FILES_64}/MySQL/include" "${PROGRAM_FILES_64}/MariaDB 10.3/include/mysql" + "${PROGRAM_FILES_64}/MariaDB 10.4/include/mysql" + "${PROGRAM_FILES_64}/MariaDB 10.5/include/mysql" "C:/MySQL/include" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/include" "$ENV{ProgramFiles}/MySQL/MySQL Server 5.7/include" @@ -97,7 +101,7 @@ if( UNIX ) foreach(LIB ${MYSQL_ADD_LIBRARIES}) find_library( MYSQL_LIBRARY NAMES - mysql libmysql ${LIB} + mysql libmysql libmariadb ${LIB} PATHS ${MYSQL_ADD_LIBRARIES_PATH} /usr/lib @@ -105,6 +109,7 @@ if( UNIX ) /usr/local/lib /usr/local/lib/mysql /usr/local/mysql/lib + /usr/lib/x86_64-linux-gnu DOC "Specify the location of the mysql library here." ) endforeach(LIB ${MYSQL_ADD_LIBRARY}) @@ -121,6 +126,8 @@ if( WIN32 ) "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/lib/opt" "${PROGRAM_FILES_64}/MySQL/lib" "${PROGRAM_FILES_64}/MariaDB 10.3/lib" + "${PROGRAM_FILES_64}/MariaDB 10.4/lib" + "${PROGRAM_FILES_64}/MariaDB 10.5/lib" "C:/MySQL/lib/debug" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/lib" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/lib/opt" @@ -174,6 +181,8 @@ if( WIN32 ) "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/bin/opt" "${PROGRAM_FILES_64}/MySQL/bin" "${PROGRAM_FILES_64}/MariaDB 10.3/bin" + "${PROGRAM_FILES_64}/MariaDB 10.4/bin" + "${PROGRAM_FILES_64}/MariaDB 10.5/bin" "C:/MySQL/bin/debug" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/bin" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/bin/opt" diff --git a/cmake/paths.cmake b/cmake/paths.cmake index ab4ae84d..1df097aa 100644 --- a/cmake/paths.cmake +++ b/cmake/paths.cmake @@ -13,3 +13,4 @@ endif() # Create log folder file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin/log ) file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin/navi ) +file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin/data ) diff --git a/deps/datReader/Dat.cpp b/deps/datReader/Dat.cpp index 94812a09..943e12fd 100644 --- a/deps/datReader/Dat.cpp +++ b/deps/datReader/Dat.cpp @@ -4,308 +4,319 @@ #include "File.h" -namespace -{ - const uint32_t model_section_count = 0xB; +namespace { + const uint32_t model_section_count = 0xB; } -namespace xiv +namespace xiv::dat { -namespace dat -{ - struct DatFileHeader - { - uint32_t size; - FileType entry_type; - uint32_t total_uncompressed_size; - uint32_t unknown[0x2]; - }; + struct DatFileHeader + { + uint32_t size; + FileType entry_type; + uint32_t total_uncompressed_size; + uint32_t unknown[0x2]; + }; - struct DatBlockRecord - { - uint32_t offset; - uint32_t size; - uint32_t unknown[0x4]; - SqPackBlockHash block_hash; - }; + struct DatBlockRecord + { + uint32_t offset; + uint32_t size; + uint32_t unknown[0x4]; + SqPackBlockHash block_hash; + }; - struct DatBlockHeader - { - uint32_t size; - uint32_t unknown1; - uint32_t compressed_size; - uint32_t uncompressed_size; - }; + struct DatBlockHeader + { + uint32_t size; + uint32_t unknown1; + uint32_t compressed_size; + uint32_t uncompressed_size; + }; - struct DatStdFileBlockInfos - { - uint32_t offset; - uint16_t size; - uint16_t uncompressed_size; - }; + struct DatStdFileBlockInfos + { + uint32_t offset; + uint16_t size; + uint16_t uncompressed_size; + }; - struct DatMdlFileBlockInfos - { - uint32_t unknown1; - uint32_t uncompressed_sizes[::model_section_count]; - uint32_t compressed_sizes[::model_section_count]; - uint32_t offsets[::model_section_count]; - uint16_t block_ids[::model_section_count]; - uint16_t block_counts[::model_section_count]; - uint32_t unknown2[0x2]; - }; + struct DatMdlFileBlockInfos + { + uint32_t unknown1; + uint32_t uncompressed_sizes[::model_section_count]; + uint32_t compressed_sizes[::model_section_count]; + uint32_t offsets[::model_section_count]; + uint16_t block_ids[::model_section_count]; + uint16_t block_counts[::model_section_count]; + uint32_t unknown2[0x2]; + }; - struct DatTexFileBlockInfos - { - uint32_t offset; - uint32_t size; - uint32_t uncompressed_size; - uint32_t block_id; - uint32_t block_count; - }; - + struct DatTexFileBlockInfos + { + uint32_t offset; + uint32_t size; + uint32_t uncompressed_size; + uint32_t block_id; + uint32_t block_count; + }; } -} -namespace xiv +namespace xiv::utils::bparse { -namespace utils -{ -namespace bparse -{ - template <> - inline void reorder(xiv::dat::DatFileHeader& i_struct) - { - xiv::utils::bparse::reorder(i_struct.size); - xiv::utils::bparse::reorder(i_struct.entry_type); - xiv::utils::bparse::reorder(i_struct.total_uncompressed_size); - for (int32_t i = 0; i < 0x2; ++i) { xiv::utils::bparse::reorder(i_struct.unknown[i]); } - } + template<> + inline void reorder< xiv::dat::DatFileHeader >( xiv::dat::DatFileHeader& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.size ); + xiv::utils::bparse::reorder( i_struct.entry_type ); + xiv::utils::bparse::reorder( i_struct.total_uncompressed_size ); + for( int32_t i = 0; i < 0x2; ++i ) + { + xiv::utils::bparse::reorder( i_struct.unknown[ i ] ); + } + } - template <> - inline void reorder(xiv::dat::DatBlockRecord& i_struct) - { - xiv::utils::bparse::reorder(i_struct.offset); - xiv::utils::bparse::reorder(i_struct.size); - for (int32_t i = 0; i < 0x4; ++i) { xiv::utils::bparse::reorder(i_struct.unknown[i]); } - xiv::utils::bparse::reorder(i_struct.block_hash); - } + template<> + inline void reorder< xiv::dat::DatBlockRecord >( xiv::dat::DatBlockRecord& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.offset ); + xiv::utils::bparse::reorder( i_struct.size ); + for( int32_t i = 0; i < 0x4; ++i ) + { + xiv::utils::bparse::reorder( i_struct.unknown[ i ] ); + } + xiv::utils::bparse::reorder( i_struct.block_hash ); + } - template <> - inline void reorder(xiv::dat::DatBlockHeader& i_struct) - { - xiv::utils::bparse::reorder(i_struct.size); - xiv::utils::bparse::reorder(i_struct.unknown1); - xiv::utils::bparse::reorder(i_struct.compressed_size); - xiv::utils::bparse::reorder(i_struct.uncompressed_size); - } + template<> + inline void reorder< xiv::dat::DatBlockHeader >( xiv::dat::DatBlockHeader& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.size ); + xiv::utils::bparse::reorder( i_struct.unknown1 ); + xiv::utils::bparse::reorder( i_struct.compressed_size ); + xiv::utils::bparse::reorder( i_struct.uncompressed_size ); + } - template <> - inline void reorder(xiv::dat::DatStdFileBlockInfos& i_struct) - { - xiv::utils::bparse::reorder(i_struct.offset); - xiv::utils::bparse::reorder(i_struct.size); - xiv::utils::bparse::reorder(i_struct.uncompressed_size); - } + template<> + inline void reorder< xiv::dat::DatStdFileBlockInfos >( xiv::dat::DatStdFileBlockInfos& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.offset ); + xiv::utils::bparse::reorder( i_struct.size ); + xiv::utils::bparse::reorder( i_struct.uncompressed_size ); + } - template <> - inline void reorder(xiv::dat::DatMdlFileBlockInfos& i_struct) - { - xiv::utils::bparse::reorder(i_struct.unknown1); - for (auto i = 0; i < ::model_section_count; ++i) { xiv::utils::bparse::reorder(i_struct.uncompressed_sizes[i]); } - for (auto i = 0; i < ::model_section_count; ++i) { xiv::utils::bparse::reorder(i_struct.compressed_sizes[i]); } - for (auto i = 0; i < ::model_section_count; ++i) { xiv::utils::bparse::reorder(i_struct.offsets[i]); } - for (auto i = 0; i < ::model_section_count; ++i) { xiv::utils::bparse::reorder(i_struct.block_ids[i]); } - for (auto i = 0; i < ::model_section_count; ++i) { xiv::utils::bparse::reorder(i_struct.block_counts[i]); } - for (auto i = 0; i < 0x2; ++i) { xiv::utils::bparse::reorder(i_struct.unknown2[i]); } - } + template<> + inline void reorder< xiv::dat::DatMdlFileBlockInfos >( xiv::dat::DatMdlFileBlockInfos& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.unknown1 ); + for( auto i = 0; i < ::model_section_count; ++i ) + { + xiv::utils::bparse::reorder( i_struct.uncompressed_sizes[ i ] ); + } + for( auto i = 0; i < ::model_section_count; ++i ) + { + xiv::utils::bparse::reorder( i_struct.compressed_sizes[ i ] ); + } + for( auto i = 0; i < ::model_section_count; ++i ) + { + xiv::utils::bparse::reorder( i_struct.offsets[ i ] ); + } + for( auto i = 0; i < ::model_section_count; ++i ) + { + xiv::utils::bparse::reorder( i_struct.block_ids[ i ] ); + } + for( auto i = 0; i < ::model_section_count; ++i ) + { + xiv::utils::bparse::reorder( i_struct.block_counts[ i ] ); + } + for( auto i = 0; i < 0x2; ++i ) + { + xiv::utils::bparse::reorder( i_struct.unknown2[ i ] ); + } + } - template <> - inline void reorder(xiv::dat::DatTexFileBlockInfos& i_struct) - { - xiv::utils::bparse::reorder(i_struct.offset); - xiv::utils::bparse::reorder(i_struct.size); - xiv::utils::bparse::reorder(i_struct.uncompressed_size); - xiv::utils::bparse::reorder(i_struct.block_id); - xiv::utils::bparse::reorder(i_struct.block_count); - } + template<> + inline void reorder< xiv::dat::DatTexFileBlockInfos >( xiv::dat::DatTexFileBlockInfos& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.offset ); + xiv::utils::bparse::reorder( i_struct.size ); + xiv::utils::bparse::reorder( i_struct.uncompressed_size ); + xiv::utils::bparse::reorder( i_struct.block_id ); + xiv::utils::bparse::reorder( i_struct.block_count ); + } } -} -}; using xiv::utils::bparse::extract; -namespace xiv -{ -namespace dat +namespace xiv::dat { -Dat::Dat( const std::experimental::filesystem::path& i_path, uint32_t i_nb ) : - SqPack( i_path ), - m_num( i_nb ) -{ - auto block_record = extract(m_handle); - block_record.offset *= 0x80; - isBlockValid(block_record.offset, block_record.size, block_record.block_hash); -} + Dat::Dat( const std::filesystem::path& i_path, uint32_t i_nb ) : + SqPack( i_path ), + m_num( i_nb ) + { + auto block_record = extract< DatBlockRecord >( m_handle ); + block_record.offset *= 0x80; + isBlockValid( block_record.offset, block_record.size, block_record.block_hash ); + } -Dat::~Dat() -{ -} + Dat::~Dat() + { + } -std::unique_ptr Dat::getFile( uint32_t i_offset ) -{ - std::unique_ptr outputFile(new File()); - { + std::unique_ptr< File > Dat::getFile( uint32_t i_offset ) + { + std::unique_ptr< File > outputFile( new File() ); + { // Lock in this scope - std::lock_guard lock(m_fileMutex); + std::lock_guard< std::mutex > lock( m_fileMutex ); // Seek to the start of the header of the file record and extract it - m_handle.seekg(i_offset); - auto file_header = extract(m_handle); + m_handle.seekg( i_offset ); + auto file_header = extract< DatFileHeader >( m_handle ); - switch (file_header.entry_type) + switch( file_header.entry_type ) { - case FileType::empty: - throw std::runtime_error("File is empty"); + case FileType::empty: + throw std::runtime_error( "File is empty" ); - case FileType::standard: - { - outputFile->_type = FileType::standard; + case FileType::standard: + { + outputFile->_type = FileType::standard; - uint32_t number_of_blocks = extract(m_handle, "number_of_blocks"); + uint32_t number_of_blocks = extract< uint32_t >( m_handle, "number_of_blocks" ); - // Just extract offset infos for the blocks to extract - std::vector std_file_block_infos; - extract( m_handle, number_of_blocks, std_file_block_infos ); + // Just extract offset infos for the blocks to extract + std::vector< DatStdFileBlockInfos > std_file_block_infos; + extract< DatStdFileBlockInfos >( m_handle, number_of_blocks, std_file_block_infos ); - // Pre allocate data vector for the whole file - outputFile->_data_sections.resize(1); - auto& data_section = outputFile->_data_sections.front(); + // Pre allocate data vector for the whole file + outputFile->_data_sections.resize( 1 ); + auto& data_section = outputFile->_data_sections.front(); - data_section.reserve(file_header.total_uncompressed_size); - // Extract each block - for (auto& file_block_info : std_file_block_infos) + data_section.reserve( file_header.total_uncompressed_size ); + // Extract each block + for( auto& file_block_info : std_file_block_infos ) + { + extractBlock( i_offset + file_header.size + file_block_info.offset, data_section ); + } + } + break; + + case FileType::model: + { + outputFile->_type = FileType::model; + + DatMdlFileBlockInfos mdlBlockInfo = extract< DatMdlFileBlockInfos >( m_handle ); + + // Getting the block number and read their sizes + const uint32_t block_count = mdlBlockInfo.block_ids[ ::model_section_count - 1 ] + + mdlBlockInfo.block_counts[ ::model_section_count - 1 ]; + std::vector< uint16_t > block_sizes; + extract< uint16_t >( m_handle, "block_size", block_count, block_sizes ); + + // Preallocate sufficient space + outputFile->_data_sections.resize( ::model_section_count ); + + for( uint32_t i = 0; i < ::model_section_count; ++i ) + { + // Preallocating for section + auto& data_section = outputFile->_data_sections[ i ]; + data_section.reserve( mdlBlockInfo.uncompressed_sizes[ i ] ); + + uint32_t current_offset = i_offset + file_header.size + mdlBlockInfo.offsets[ i ]; + for( uint32_t j = 0; j < mdlBlockInfo.block_counts[ i ]; ++j ) { - extractBlock(i_offset + file_header.size + file_block_info.offset, data_section); + extractBlock( current_offset, data_section ); + current_offset += block_sizes[ mdlBlockInfo.block_ids[ i ] + j ]; } - } - break; + } + } + break; - case FileType::model: - { - outputFile->_type = FileType::model; + case FileType::texture: + { + outputFile->_type = FileType::texture; - DatMdlFileBlockInfos mdlBlockInfo = extract(m_handle); + // Extracts mipmap entries and the block sizes + uint32_t sectionCount = extract< uint32_t >( m_handle, "sections_count" ); - // Getting the block number and read their sizes - const uint32_t block_count = mdlBlockInfo.block_ids[::model_section_count - 1] + - mdlBlockInfo.block_counts[::model_section_count - 1]; - std::vector block_sizes; - extract(m_handle, "block_size", block_count, block_sizes); + std::vector< DatTexFileBlockInfos > texBlockInfo; + extract< DatTexFileBlockInfos >( m_handle, sectionCount, texBlockInfo ); - // Preallocate sufficient space - outputFile->_data_sections.resize(::model_section_count); + // Extracting block sizes + uint32_t block_count = texBlockInfo.back().block_id + texBlockInfo.back().block_count; + std::vector< uint16_t > block_sizes; + extract< uint16_t >( m_handle, "block_size", block_count, block_sizes ); - for (uint32_t i = 0; i < ::model_section_count; ++i) + outputFile->_data_sections.resize( sectionCount + 1 ); + + // Extracting header in section 0 + const uint32_t header_size = texBlockInfo.front().offset; + auto& header_section = outputFile->_data_sections[ 0 ]; + header_section.resize( header_size ); + + m_handle.seekg( i_offset + file_header.size ); + m_handle.read( header_section.data(), header_size ); + + // Extracting other sections + for( uint32_t i = 0; i < sectionCount; ++i ) + { + auto& data_section = outputFile->_data_sections[ i + 1 ]; + auto& section_infos = texBlockInfo[ i ]; + data_section.reserve( section_infos.uncompressed_size ); + + uint32_t current_offset = i_offset + file_header.size + section_infos.offset; + for( uint32_t j = 0; j < section_infos.block_count; ++j ) { - // Preallocating for section - auto& data_section = outputFile->_data_sections[i]; - data_section.reserve(mdlBlockInfo.uncompressed_sizes[i]); - - uint32_t current_offset = i_offset + file_header.size + mdlBlockInfo.offsets[i]; - for (uint32_t j = 0; j < mdlBlockInfo.block_counts[i]; ++j) - { - extractBlock(current_offset, data_section); - current_offset += block_sizes[mdlBlockInfo.block_ids[i] + j]; - } + extractBlock( current_offset, data_section ); + current_offset += block_sizes[ section_infos.block_id + j ]; } - } - break; + } + } + break; - case FileType::texture: - { - outputFile->_type = FileType::texture; - - // Extracts mipmap entries and the block sizes - uint32_t sectionCount = extract(m_handle, "sections_count"); - - std::vector texBlockInfo; - extract(m_handle, sectionCount, texBlockInfo); - - // Extracting block sizes - uint32_t block_count = texBlockInfo.back().block_id + texBlockInfo.back().block_count; - std::vector block_sizes; - extract(m_handle, "block_size", block_count, block_sizes); - - outputFile->_data_sections.resize(sectionCount + 1); - - // Extracting header in section 0 - const uint32_t header_size = texBlockInfo.front().offset; - auto& header_section = outputFile->_data_sections[0]; - header_section.resize(header_size); - - m_handle.seekg(i_offset + file_header.size); - m_handle.read(header_section.data(), header_size); - - // Extracting other sections - for (uint32_t i = 0; i < sectionCount; ++i) - { - auto& data_section = outputFile->_data_sections[i + 1]; - auto& section_infos = texBlockInfo[i]; - data_section.reserve(section_infos.uncompressed_size); - - uint32_t current_offset = i_offset + file_header.size + section_infos.offset; - for (uint32_t j = 0; j < section_infos.block_count; ++j) - { - extractBlock(current_offset, data_section); - current_offset += block_sizes[section_infos.block_id + j]; - } - } - } - break; - - default: - throw std::runtime_error("Invalid entry_type: " + std::to_string(static_cast(file_header.entry_type))); + default: + throw std::runtime_error( + "Invalid entry_type: " + std::to_string( static_cast(file_header.entry_type) ) ); } - } + } - return outputFile; -} + return outputFile; + } -void Dat::extractBlock( uint32_t i_offset, std::vector& o_data ) -{ - m_handle.seekg(i_offset); + void Dat::extractBlock( uint32_t i_offset, std::vector< char >& o_data ) + { + m_handle.seekg( i_offset ); - DatBlockHeader block_header = extract(m_handle); + DatBlockHeader block_header = extract< DatBlockHeader >( m_handle ); - // Resizing the vector to write directly into it - const uint32_t data_size = o_data.size(); - o_data.resize(data_size + block_header.uncompressed_size); + // Resizing the vector to write directly into it + const uint32_t data_size = o_data.size(); + o_data.resize( data_size + block_header.uncompressed_size ); - // 32000 in compressed_size means it is not compressed so take uncompressed_size - if (block_header.compressed_size == 32000) - { - m_handle.read(o_data.data() + data_size, block_header.uncompressed_size); - } - else - { + // 32000 in compressed_size means it is not compressed so take uncompressed_size + if( block_header.compressed_size == 32000 ) + { + m_handle.read( o_data.data() + data_size, block_header.uncompressed_size ); + } + else + { // If it is compressed use zlib // Read the data to be decompressed - std::vector temp_buffer(block_header.compressed_size); - m_handle.read(temp_buffer.data(), block_header.compressed_size); + std::vector< char > temp_buffer( block_header.compressed_size ); + m_handle.read( temp_buffer.data(), block_header.compressed_size ); - utils::zlib::no_header_decompress(reinterpret_cast(temp_buffer.data()), - temp_buffer.size(), - reinterpret_cast(o_data.data() + data_size), - block_header.uncompressed_size); - } -} + utils::zlib::no_header_decompress( reinterpret_cast(temp_buffer.data()), + temp_buffer.size(), + reinterpret_cast(o_data.data() + data_size), + block_header.uncompressed_size ); + } + } -uint32_t Dat::getNum() const -{ - return m_num; -} + uint32_t Dat::getNum() const + { + return m_num; + } } -} diff --git a/deps/datReader/Dat.h b/deps/datReader/Dat.h index 5311ab48..f1827782 100644 --- a/deps/datReader/Dat.h +++ b/deps/datReader/Dat.h @@ -5,41 +5,38 @@ #include -#include +#include -namespace xiv -{ -namespace dat +namespace xiv::dat { -class File; + class File; -class Dat : public SqPack -{ -public: - // Full path to the dat file - Dat( const std::experimental::filesystem::path& i_path, uint32_t i_nb ); - virtual ~Dat(); + class Dat : public SqPack + { + public: + // Full path to the dat file + Dat( const std::filesystem::path& i_path, uint32_t i_nb ); + virtual ~Dat(); - // Retrieves a file given the offset in the dat file - std::unique_ptr getFile( uint32_t i_offset ); + // Retrieves a file given the offset in the dat file + std::unique_ptr getFile( uint32_t i_offset ); - // Appends to the vector the data of this block, it is assumed to be preallocated - // Is it also assumed that the m_fileMutex is currently locked by this thread before the call - void extractBlock( uint32_t i_offset, std::vector& o_data ); + // Appends to the vector the data of this block, it is assumed to be preallocated + // Is it also assumed that the m_fileMutex is currently locked by this thread before the call + void extractBlock( uint32_t i_offset, std::vector& o_data ); - // Returns the dat number - uint32_t getNum() const; + // Returns the dat number + uint32_t getNum() const; -protected: - // File reading mutex to have only one thread reading the file at a time - std::mutex m_fileMutex; + protected: + // File reading mutex to have only one thread reading the file at a time + std::mutex m_fileMutex; - // Dat nb - uint32_t m_num; -}; + // Dat nb + uint32_t m_num; + }; -} } #endif // XIV_DAT_DAT_H diff --git a/deps/datReader/DatCat.cpp b/deps/datReader/DatCat.cpp index 117c2b9b..ccf3d6a0 100644 --- a/deps/datReader/DatCat.cpp +++ b/deps/datReader/DatCat.cpp @@ -10,7 +10,7 @@ namespace xiv namespace dat { -Cat::Cat( const std::experimental::filesystem::path& basePath, uint32_t catNum, const std::string& name ) : +Cat::Cat( const std::filesystem::path& basePath, uint32_t catNum, const std::string& name ) : m_name( name ), m_catNum( catNum ), m_chunk( -1 ) @@ -21,27 +21,27 @@ Cat::Cat( const std::experimental::filesystem::path& basePath, uint32_t catNum, std::string prefix = ss.str() + "0000.win32"; // Creates the index: XX0000.win32.index - m_index = std::unique_ptr( new Index( basePath / "//ffxiv" / ( prefix + ".index" ) ) ); + m_index = std::unique_ptr( new Index( basePath / "ffxiv" / ( prefix + ".index" ) ) ); // For all dat files linked to this index, create it: XX0000.win32.datX for( uint32_t i = 0; i < getIndex().getDatCount(); ++i ) { - m_dats.emplace_back( std::unique_ptr( new Dat( basePath / "//ffxiv" / ( prefix + ".dat" + std::to_string( i ) ), i ) ) ); + m_dats.emplace_back( std::make_unique< Dat >(basePath / "ffxiv" / ( prefix + ".dat" + std::to_string( i ) ), i ) ); } } -Cat::Cat( const std::experimental::filesystem::path& basePath, uint32_t catNum, const std::string& name, uint32_t exNum, uint32_t chunk ) : +Cat::Cat( const std::filesystem::path& basePath, uint32_t catNum, const std::string& name, uint32_t exNum, uint32_t chunk ) : m_name( name ), m_catNum( catNum ), m_chunk( chunk ) { // Creates the index: XX0000.win32.index - m_index = std::unique_ptr( new Index( basePath / GameData::buildDatStr( "ex" + std::to_string( exNum ), catNum, exNum, chunk, "win32", "index" ) ) ); + m_index = std::make_unique< Index >( basePath / GameData::buildDatStr( "ex" + std::to_string( exNum ), catNum, exNum, chunk, "win32", "index" ) ); // For all dat files linked to this index, create it: XX0000.win32.datX for( uint32_t i = 0; i < getIndex().getDatCount(); ++i ) { - m_dats.emplace_back( std::unique_ptr( new Dat( basePath / GameData::buildDatStr( "ex" + std::to_string( exNum ), catNum, exNum, chunk, "win32", "dat" + std::to_string( i ) ), i ) ) ); + m_dats.emplace_back( std::make_unique< Dat >( basePath / GameData::buildDatStr( "ex" + std::to_string( exNum ), catNum, exNum, chunk, "win32", "dat" + std::to_string( i ) ), i ) ); } } diff --git a/deps/datReader/DatCat.h b/deps/datReader/DatCat.h index 1e1d0759..43d842a1 100644 --- a/deps/datReader/DatCat.h +++ b/deps/datReader/DatCat.h @@ -3,62 +3,66 @@ #include #include -#include +#include -namespace xiv { -namespace dat { - -class Index; -class Dat; -class File; - -// A category represents an .index and its associated .datX -class Cat +namespace xiv::dat { -public: - // basePath: Path to the folder containingthe datfiles - // catNum: The number of the category - // name: The name of the category, empty if not known - Cat( const std::experimental::filesystem::path& basePath, uint32_t catNum, const std::string& name ); - // basePath: Path to the folder containingthe datfiles - // catNum: The number of the category - // name: The name of the category, empty if not known - // exNum: The number of the expansion to load from - // chunk: The chunk to load from - Cat( const std::experimental::filesystem::path& basePath, uint32_t catNum, const std::string& name, uint32_t exNum, uint32_t chunk ); - ~Cat(); + class Index; - // Returns .index of the category - const Index& getIndex() const; + class Dat; - // Retrieve a file from the category given its hashes - std::unique_ptr getFile( uint32_t dir_hash, uint32_t filename_hash ) const; + class File; + + // A category represents an .index and its associated .datX + class Cat + { + public: + // basePath: Path to the folder containingthe datfiles + // catNum: The number of the category + // name: The name of the category, empty if not known + Cat( const std::filesystem::path& basePath, uint32_t catNum, const std::string& name ); + + // basePath: Path to the folder containingthe datfiles + // catNum: The number of the category + // name: The name of the category, empty if not known + // exNum: The number of the expansion to load from + // chunk: The chunk to load from + Cat( const std::filesystem::path& basePath, uint32_t catNum, const std::string& name, uint32_t exNum, + uint32_t chunk ); + + ~Cat(); + + // Returns .index of the category + const Index& getIndex() const; + + // Retrieve a file from the category given its hashes + std::unique_ptr< File > getFile( uint32_t dir_hash, uint32_t filename_hash ) const; - bool doesFileExist( uint32_t dir_hash, uint32_t filename_hash ) const; - bool doesDirExist( uint32_t dir_hash ) const; + bool doesFileExist( uint32_t dir_hash, uint32_t filename_hash ) const; + + bool doesDirExist( uint32_t dir_hash ) const; - // Returns thename of the category - const std::string& getName() const; + // Returns thename of the category + const std::string& getName() const; - // Returns the number of the category - uint32_t getCatNum() const; + // Returns the number of the category + uint32_t getCatNum() const; -protected: - const std::string m_name; - const uint32_t m_catNum; - const uint32_t m_chunk; + protected: + const std::string m_name; + const uint32_t m_catNum; + const uint32_t m_chunk; - // The .index - std::unique_ptr m_index; + // The .index + std::unique_ptr< Index > m_index; - // The .datXs such as dat nb X => m_dats[X] - std::vector> m_dats; -}; + // The .datXs such as dat nb X => m_dats[X] + std::vector< std::unique_ptr< Dat>> m_dats; + }; -} } #endif // XIV_DAT_CAT_H diff --git a/deps/datReader/DatCategories/bg/LgbTypes.h b/deps/datReader/DatCategories/bg/LgbTypes.h new file mode 100644 index 00000000..8b9d5ad5 --- /dev/null +++ b/deps/datReader/DatCategories/bg/LgbTypes.h @@ -0,0 +1,198 @@ +#ifndef SAPPHIRE_LGBTYPES_H +#define SAPPHIRE_LGBTYPES_H + +#include "vec3.h" + +enum class LgbEntryType : uint32_t +{ + BgParts = 1, + Attribute = 2, + Light = 3, + Vfx = 4, + PositionMarker = 5, + Gimmick = 6, + SharedGroup6 = 6,// secondary variable is set to 2 + Sound = 7, + EventNpc = 8, + BattleNpc = 9, + RoutePath = 10, + Character = 11, + Aetheryte = 12, + EnvSpace = 13, + Gathering = 14, + SharedGroup15 = 15,// secondary variable is set to 13 + Treasure = 16, + Player = 37, + Monster = 38, + Weapon = 39, + PopRange = 40, + ExitRange = 41, + LVB = 42, + MapRange = 43, + NaviMeshRange = 44, + EventObject = 45, + DemiHuman = 46, + EnvLocation = 47, + ControlPoint = 48, + EventRange = 49, + RestBonusRange = 50, + QuestMarker = 51, + TimeLine = 52, + ObjectBehaviorSet = 53, + Movie = 54, + ScenarioEXD = 55, + ScenarioText = 56, + CollisionBox = 57, + DoorRange = 58, + LineVfx = 59, + SoundEnvSet = 60, + CutActionTimeline = 61, + CharaScene = 62, + CutAction = 63, + EquipPreset = 64, + ClientPath = 65, + ServerPath = 66, + GimmickRange = 67, + TargetMarker = 68, + ChairMarker = 69, + ClickableRange = 70, + PrefetchRange = 71, + FateRange = 72, + PartyMember = 73, + KeepRange = 74, + SphereCastRange = 75, + IndoorObject = 76, + OutdoorObject = 77, + EditGroup = 78, + StableChocobo = 79 +}; + +enum PopType : uint32_t +{ + PopTypePC = 0x1, + PopTypeNPC = 0x2, + PopTypeBNPC = 0x2, + PopTypeContent = 0x3, +}; + +struct Transformation +{ + vec3 translation; + vec3 rotation; + vec3 scale; +}; + +struct InstanceObject +{ + LgbEntryType type; + uint32_t instanceId; + uint32_t nameOffset; + Transformation transform; +}; + +struct BgPartsData : public InstanceObject +{ + uint32_t modelFileOffset; + uint32_t collisionFileOffset; + uint32_t unknown4; + uint32_t unknown5; + uint32_t unknown6; + uint32_t unknown7; + uint32_t unknown8; + uint32_t unknown9; +}; + +struct RelativePositions +{ + int32_t Pos; + int32_t PosCount; +}; + +struct PopRangeData : public InstanceObject +{ + PopType popType; + RelativePositions relativePositions; + float innerRadiusRatio; + uint8_t index; + uint8_t padding00[3]; + uint32_t reserved; +}; + +struct GimmickData : public InstanceObject +{ + uint32_t gimmickFileOffset; + char unknownBytes[100]; +}; + +struct ENpcData : public InstanceObject +{ + uint32_t enpcId; + uint8_t unknown1[0x24]; +}; + +struct EObjData : public InstanceObject +{ + uint32_t eobjId; + uint32_t levelHierachyId; + uint8_t unknown1[0xC]; +}; + +enum TriggerBoxShape : uint32_t +{ + TriggerBoxShapeBox = 0x1, + TriggerBoxShapeSphere = 0x2, + TriggerBoxShapeCylinder = 0x3, + TriggerBoxShapeBoard = 0x4, + TriggerBoxShapeMesh = 0x5, + TriggerBoxShapeBoardBothSides = 0x6, +}; + +struct TriggerBoxInstanceObject +{ + TriggerBoxShape triggerBoxShape; + int16_t priority; + int8_t enabled; + uint8_t padding; + uint32_t reserved; +}; + +struct ExitRangeData : public InstanceObject +{ + TriggerBoxInstanceObject triggerBoxType; + uint32_t exitType; + uint16_t zoneId; + uint16_t destTerritoryType; + int index; + uint32_t destInstanceObjectId; + uint32_t returnInstanceObjectId; + float direction; + uint32_t reserved; +}; + +struct MapRangeData : public InstanceObject +{ + TriggerBoxInstanceObject triggerBoxType; + uint32_t mapId; + uint32_t placeNameBlock; + uint32_t placeNameSpot; + uint32_t bGM; + uint32_t weather; + uint32_t reserved; + uint32_t reserved2; + uint16_t reserved3; + uint8_t housingBlockId; + int8_t restBonusEffective; + uint8_t discoveryIndex; + int8_t mapEnabled; + int8_t placeNameEnabled; + int8_t discoveryEnabled; + int8_t bGMEnabled; + int8_t weatherEnabled; + int8_t restBonusEnabled; + int8_t bGMPlayZoneInOnly; + int8_t liftEnabled; + int8_t housingEnabled; + uint16_t padding; +}; + +#endif //SAPPHIRE_LGBTYPES_H diff --git a/deps/datReader/DatCategories/bg/lgb.h b/deps/datReader/DatCategories/bg/lgb.h index 50097735..25bd5b6b 100644 --- a/deps/datReader/DatCategories/bg/lgb.h +++ b/deps/datReader/DatCategories/bg/lgb.h @@ -12,87 +12,33 @@ #include "matrix4.h" #include "vec3.h" #include "sgb.h" +#include "LgbTypes.h" -// garbage to skip model loading -extern bool ignoreModels; - -// all credit to -// https://github.com/ufx/SaintCoinach/blob/master/SaintCoinach/Graphics/Lgb/ -// this is simply their work ported to c++ since we dont c# +// based on https://github.com/ufx/SaintCoinach/blob/master/SaintCoinach/Graphics/Lgb/ struct LGB_FILE; struct LGB_FILE_HEADER; struct LGB_GROUP; struct LGB_GROUP_HEADER; -enum class LgbEntryType : - uint32_t -{ - BgParts = 1, - Light = 3, - Vfx = 4, - PositionMarker = 5, - Gimmick = 6, - SharedGroup6 = 6,// secondary variable is set to 2 - Sound = 7, - EventNpc = 8, - BattleNpc = 9, - Aetheryte = 12, - EnvSpace = 13, - Gathering = 14, - SharedGroup15 = 15,// secondary variable is set to 13 - Treasure = 16, - Weapon = 39, - PopRange = 40, - ExitRange = 41, - MapRange = 43, - NaviMeshRange = 44, - EventObject = 45, - EnvLocation = 47, - EventRange = 49, - QuestMarker = 51, - CollisionBox = 57, - DoorRange = 58, - LineVfx = 59, - ClientPath = 65, - ServerPath = 66, - GimmickRange = 67, - TargetMarker = 68, - ChairMarker = 69, - ClickableRange = 70, - PrefetchRange = 71, - FateRange = 72, - SphereCastRange = 75, -}; - -struct LGB_ENTRY_HEADER -{ - LgbEntryType type; - uint32_t unknown; - uint32_t nameOffset; - vec3 translation; - vec3 rotation; - vec3 scale; -}; - -class LGB_ENTRY +class LgbEntry { public: char* m_buf; uint32_t m_offset; - LGB_ENTRY_HEADER header; + InstanceObject header; - LGB_ENTRY() + LgbEntry() { m_buf = nullptr; m_offset = 0; memset( &header, 0, sizeof( header ) ); }; - LGB_ENTRY( char* buf, uint32_t offset ) + LgbEntry( char* buf, uint32_t offset ) { m_buf = buf; m_offset = offset; - header = *reinterpret_cast< LGB_ENTRY_HEADER* >( buf + offset ); + header = *reinterpret_cast< InstanceObject* >( buf + offset ); }; const LgbEntryType getType() const @@ -100,30 +46,16 @@ public: return header.type; }; - virtual ~LGB_ENTRY() + virtual ~LgbEntry() { }; }; -struct LGB_BGPARTS_HEADER : - public LGB_ENTRY_HEADER -{ - uint32_t modelFileOffset; - uint32_t collisionFileOffset; - uint32_t unknown4; - uint32_t unknown5; - uint32_t unknown6; - uint32_t unknown7; - uint32_t unknown8; - uint32_t unknown9; -}; - -class LGB_BGPARTS_ENTRY : - public LGB_ENTRY +class LGB_BGPARTS_ENTRY : public LgbEntry { public: - LGB_BGPARTS_HEADER header; + BgPartsData data; std::string name; std::string modelFileName; std::string collisionFileName; @@ -132,124 +64,94 @@ public: { }; - LGB_BGPARTS_ENTRY( char* buf, uint32_t offset ) : - LGB_ENTRY( buf, offset ) + LGB_BGPARTS_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset ) { - header = *reinterpret_cast( buf + offset ); + data = *reinterpret_cast< BgPartsData* >( buf + offset ); name = std::string( buf + offset + header.nameOffset ); - modelFileName = std::string( buf + offset + header.modelFileOffset ); - collisionFileName = std::string( buf + offset + header.collisionFileOffset ); + modelFileName = std::string( buf + offset + data.modelFileOffset ); + collisionFileName = std::string( buf + offset + data.collisionFileOffset ); }; }; -struct LGB_GIMMICK_HEADER : - public LGB_ENTRY_HEADER -{ - uint32_t gimmickFileOffset; - char unknownBytes[100]; -}; - -class LGB_GIMMICK_ENTRY : - public LGB_ENTRY +class LGB_GIMMICK_ENTRY : public LgbEntry { public: - LGB_GIMMICK_HEADER header; + GimmickData data; std::string name; std::string gimmickFileName; - LGB_GIMMICK_ENTRY( char* buf, uint32_t offset ) : - LGB_ENTRY( buf, offset ) + LGB_GIMMICK_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset ) { - header = *reinterpret_cast( buf + offset ); + data = *reinterpret_cast< GimmickData* >( buf + offset ); name = std::string( buf + offset + header.nameOffset ); - gimmickFileName = std::string( buf + offset + header.gimmickFileOffset ); - //std::cout << "\t " << gimmickFileName << " unknown: " << header.unknown << "\n"; + gimmickFileName = std::string( buf + offset + data.gimmickFileOffset ); }; }; -struct LGB_ENPC_HEADER : - public LGB_ENTRY_HEADER -{ - uint32_t enpcId; - uint8_t unknown1[0x24]; -}; - -class LGB_ENPC_ENTRY : - public LGB_ENTRY +class LGB_ENPC_ENTRY : public LgbEntry { public: - LGB_ENPC_HEADER header; + ENpcData data; std::string name; LGB_ENPC_ENTRY( char* buf, uint32_t offset ) : - LGB_ENTRY( buf, offset ) + LgbEntry( buf, offset ) { - header = *reinterpret_cast< LGB_ENPC_HEADER* >( buf + offset ); - name = std::string( buf + offset + header.nameOffset ); - //std::cout << "\t ENpc " << header.enpcId << " " << name << "\n"; - }; -}; - -struct LGB_EOBJ_HEADER : - public LGB_ENTRY_HEADER -{ - uint32_t eobjId; - uint32_t levelHierachyId; - uint8_t unknown1[0xC]; -}; - -class LGB_EOBJ_ENTRY : - public LGB_ENTRY -{ -public: - LGB_EOBJ_HEADER header; - std::string name; - - LGB_EOBJ_ENTRY( char* buf, uint32_t offset ) : - LGB_ENTRY( buf, offset ) - { - header = *reinterpret_cast< LGB_EOBJ_HEADER* >( buf + offset ); - //std::cout << "\t " << header.eobjId << " " << name << " unknown: " << header.unknown << "\n"; + data = *reinterpret_cast< ENpcData* >( buf + offset ); name = std::string( buf + offset + header.nameOffset ); }; }; -struct LGB_MAPRANGE_HEADER : - public LGB_ENTRY_HEADER -{ - uint32_t type; - uint8_t unknown2; - uint8_t unknown2_1; - uint16_t unknown3; - uint32_t unknown5; - uint32_t mapId; - uint32_t offsetX; - uint32_t offsetY; - uint32_t unkInts[4]; - uint16_t unkShort; - uint8_t unkFlag; - uint8_t unkFlag2; - uint8_t discoveryIndex; - uint8_t unkFlag3; - uint8_t unkFlag4; - uint8_t unknown4[0x09]; -}; - -struct LGB_MAPRANGE_ENTRY : - public LGB_ENTRY +class LGB_EOBJ_ENTRY : public LgbEntry { public: - LGB_MAPRANGE_HEADER header; + EObjData data; std::string name; - LGB_MAPRANGE_ENTRY( char* buf, uint32_t offset ) : - LGB_ENTRY( buf, offset ) + LGB_EOBJ_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset ) { - header = *reinterpret_cast< LGB_MAPRANGE_HEADER* >( buf + offset ); + data = *reinterpret_cast< EObjData* >( buf + offset ); name = std::string( buf + offset + header.nameOffset ); }; }; +struct LGB_MAP_RANGE_ENTRY : public LgbEntry +{ +public: + MapRangeData data; + std::string name; + + LGB_MAP_RANGE_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset ) + { + data = *reinterpret_cast< MapRangeData* >( buf + offset ); + name = std::string( buf + offset + header.nameOffset ); + }; +}; + +struct LGB_EXIT_RANGE_ENTRY : public LgbEntry +{ +public: + ExitRangeData data; + std::string name; + + LGB_EXIT_RANGE_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset ) + { + data = *reinterpret_cast< ExitRangeData* >( buf + offset ); + name = std::string( buf + offset + header.nameOffset ); + }; +}; + +struct LGB_POP_RANGE_ENTRY : public LgbEntry +{ +public: + PopRangeData data; + + LGB_POP_RANGE_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset ) + { + data = *reinterpret_cast< PopRangeData* >( buf + offset ); + }; +}; + struct LGB_GROUP_HEADER { uint32_t id; @@ -272,15 +174,13 @@ struct LGB_GROUP LGB_FILE* parent; LGB_GROUP_HEADER header; std::string name; - std::vector< std::shared_ptr< LGB_ENTRY > > entries; + std::vector< std::shared_ptr< LgbEntry > > entries; LGB_GROUP( char* buf, LGB_FILE* parentStruct, uint32_t offset ) { parent = parentStruct; header = *reinterpret_cast< LGB_GROUP_HEADER* >( buf + offset ); name = std::string( buf + offset + header.groupNameOffset ); - //entries.resize( header.entryCount ); - //std::cout << name << "\n\t unknown: " << header.unknown << "\n"; const auto entriesOffset = offset + header.entriesOffset; for( auto i = 0; i < header.entryCount; ++i ) { @@ -288,8 +188,7 @@ struct LGB_GROUP try { - const auto type = *reinterpret_cast( buf + entryOffset ); - // garbage to skip model loading + const auto type = *reinterpret_cast< LgbEntryType* >( buf + entryOffset ); if( type == LgbEntryType::BgParts ) { entries.push_back( std::make_shared< LGB_BGPARTS_ENTRY >( buf, entryOffset ) ); @@ -306,16 +205,18 @@ struct LGB_GROUP { entries.push_back( std::make_shared< LGB_EOBJ_ENTRY >( buf, entryOffset ) ); } + else if( type == LgbEntryType::ExitRange ) + { + entries.push_back( std::make_shared< LGB_EXIT_RANGE_ENTRY >( buf, entryOffset ) ); + } else if( type == LgbEntryType::MapRange ) { - entries.push_back( std::make_shared< LGB_MAPRANGE_ENTRY >( buf, entryOffset ) ); + entries.push_back( std::make_shared< LGB_MAP_RANGE_ENTRY >( buf, entryOffset ) ); } else { - entries.push_back( std::make_shared< LGB_ENTRY >( buf, entryOffset ) ); + entries.push_back( std::make_shared< LgbEntry >( buf, entryOffset ) ); } - - } catch( std::exception& e ) { @@ -344,8 +245,7 @@ struct LGB_FILE std::vector< LGB_GROUP > groups; std::string m_name; - LGB_FILE( char* buf, const std::string& name ) : - LGB_FILE( buf ) + LGB_FILE( char* buf, const std::string& name ) : LGB_FILE( buf ) { m_name = name; } @@ -356,8 +256,6 @@ struct LGB_FILE if( strncmp( &header.magic[ 0 ], "LGB1", 4 ) != 0 || strncmp( &header.magic2[ 0 ], "LGP1", 4 ) != 0 ) throw std::runtime_error( "Invalid LGB file!" ); - //groups.resize(header.groupCount); - constexpr auto baseOffset = sizeof( header ); for( auto i = 0; i < header.groupCount; ++i ) { diff --git a/deps/datReader/DatCategories/bg/sgb.h b/deps/datReader/DatCategories/bg/sgb.h index fb384b69..fbf23f5a 100644 --- a/deps/datReader/DatCategories/bg/sgb.h +++ b/deps/datReader/DatCategories/bg/sgb.h @@ -22,15 +22,13 @@ struct SGB_GROUP; struct SGB_GROUP_HEADER; -enum SgbDataType : - uint32_t +enum SgbDataType : uint32_t { Unknown0008 = 0x0008, Group = 0x0100, }; -enum SgbGroupEntryType : - uint32_t +enum SgbGroupEntryType : uint32_t { Model = 0x01, Gimmick = 0x06, @@ -124,15 +122,13 @@ struct SGB_ENTRY_HEADER vec3 scale; }; -struct SGB_MODEL_HEADER : - public SGB_ENTRY_HEADER +struct SGB_MODEL_HEADER : public SGB_ENTRY_HEADER { int32_t modelFileOffset; int32_t collisionFileOffset; }; -struct SGB_MODEL_ENTRY : - public SGB_GROUP_ENTRY +struct SGB_MODEL_ENTRY : public SGB_GROUP_ENTRY { SGB_MODEL_HEADER header; SgbGroupEntryType type; diff --git a/deps/datReader/Exd.cpp b/deps/datReader/Exd.cpp index e82fcc96..79de150b 100644 --- a/deps/datReader/Exd.cpp +++ b/deps/datReader/Exd.cpp @@ -8,373 +8,378 @@ using xiv::utils::bparse::extract; -namespace xiv +namespace xiv::exd { - namespace exd - { + struct ExdHeader + { + char magic[0x4]; + uint16_t unknown; + uint16_t unknown2; + uint32_t index_size; + }; + + struct ExdRecordIndex + { + uint32_t id; + uint32_t offset; + }; +} + +namespace xiv::utils::bparse { +template<> + inline void reorder< xiv::exd::ExdHeader >( xiv::exd::ExdHeader& i_struct ) + { + for( int32_t i = 0; i < 0x4; ++i ) + { + xiv::utils::bparse::reorder( i_struct.magic[ i ] ); + } + i_struct.unknown = xiv::utils::bparse::byteswap( i_struct.unknown ); + xiv::utils::bparse::reorder( i_struct.unknown ); + i_struct.unknown2 = xiv::utils::bparse::byteswap( i_struct.unknown2 ); + xiv::utils::bparse::reorder( i_struct.unknown2 ); + i_struct.index_size = xiv::utils::bparse::byteswap( i_struct.index_size ); + xiv::utils::bparse::reorder( i_struct.index_size ); + } + + template<> + inline void reorder< xiv::exd::ExdRecordIndex >( xiv::exd::ExdRecordIndex& i_struct ) + { + i_struct.id = xiv::utils::bparse::byteswap( i_struct.id ); + xiv::utils::bparse::reorder( i_struct.id ); + i_struct.offset = xiv::utils::bparse::byteswap( i_struct.offset ); + xiv::utils::bparse::reorder( i_struct.offset ); + } +}; + +namespace xiv::exd +{ + Exd::Exd( std::shared_ptr< Exh > i_exh, const std::vector< std::shared_ptr< dat::File>>& i_files ) + { + _exh = i_exh; + _files = i_files; + + + // Iterates over all the files + const uint32_t member_count = _exh->get_members().size(); + for( auto& file_ptr : _files ) + { + // Get a stream + std::vector< char > dataCpy = file_ptr->get_data_sections().front(); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); + + // Extract the header and skip to the record indices + auto exd_header = extract< ExdHeader >( iss ); + iss.seekg( 0x20 ); + + // Preallocate and extract the record_indices + const uint32_t record_count = exd_header.index_size / sizeof( ExdRecordIndex ); + std::vector< ExdRecordIndex > record_indices; + record_indices.reserve( record_count ); + for( uint32_t i = 0; i < record_count; ++i ) + { + auto recordIndex = extract< ExdRecordIndex >( iss ); + _idCache[ recordIndex.id ] = ExdCacheEntry{ file_ptr, recordIndex.offset }; + } + } + } + + Exd::~Exd() + { + } + + const std::vector< Field > Exd::get_row( uint32_t id, uint32_t subRow ) + { + + auto cacheEntryIt = _idCache.find( id ); + if( cacheEntryIt == _idCache.end() ) + throw std::runtime_error( "Id not found: " + std::to_string( id ) ); + + // Iterates over all the files + const uint32_t member_count = _exh->get_members().size(); + auto& file_ptr = cacheEntryIt->second.file; + + std::vector< char > dataCpy = file_ptr->get_data_sections().front(); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); + + // Get the vector fields for the given record and preallocate it + auto fields = _data[ id ]; + fields.reserve( member_count ); + iss.seekg( cacheEntryIt->second.offset + 6 ); + + uint8_t subRows = *reinterpret_cast< uint8_t* >( &dataCpy[ cacheEntryIt->second.offset + 5 ] ); + + if( subRow >= subRows ) + throw std::runtime_error( "Out of bounds sub-row!" ); + + int offset = cacheEntryIt->second.offset + 6 + ( subRow * _exh->get_header().data_offset + 2 * ( subRow + 1 ) ); + + for( auto& member_entry : _exh->get_exh_members() ) + { + // Seek to the position of the member to extract. + // 6 is because we have uint32_t/uint16_t at the start of each record + iss.seekg( offset + member_entry.offset ); + + // Switch depending on the type to extract + switch( member_entry.type ) + { + case DataType::string: + // Extract the offset to the actual string + // Seek to it then extract the actual string + { + throw std::runtime_error( "String not implemented for variant 2!" ); + //auto string_offset = extract( iss, "string_offset", false ); + //iss.seekg( cacheEntryIt->second.offset + 6 + _exh->get_header().data_offset + string_offset ); + //fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); + } + break; + + case DataType::boolean: + fields.emplace_back( extract< bool >( iss, "bool" ) ); + break; + + case DataType::int8: + fields.emplace_back( extract< int8_t >( iss, "int8_t" ) ); + break; + + case DataType::uint8: + fields.emplace_back( extract< uint8_t >( iss, "uint8_t" ) ); + break; + + case DataType::int16: + fields.emplace_back( extract< int16_t >( iss, "int16_t", false ) ); + break; + + case DataType::uint16: + fields.emplace_back( extract< uint16_t >( iss, "uint16_t", false ) ); + break; + + case DataType::int32: + fields.emplace_back( extract< int32_t >( iss, "int32_t", false ) ); + break; + + case DataType::uint32: + fields.emplace_back( extract< uint32_t >( iss, "uint32_t", false ) ); + break; + + case DataType::float32: + fields.emplace_back( extract< float >( iss, "float", false ) ); + break; + + case DataType::uint64: + fields.emplace_back( extract< uint64_t >( iss, "uint64_t", false ) ); + break; + + default: + auto type = static_cast< uint16_t >( member_entry.type ); + if( type < 0x19 || type > 0x20 ) + throw std::runtime_error( "Unknown DataType: " + std::to_string( type ) ); + uint64_t val = extract< uint64_t >( iss, "bool" ); + int32_t shift = type - 0x19; + int32_t i = 1 << shift; + val &= i; + fields.emplace_back( ( val & i ) == i ); + break; + } + } + return fields; + + } + + + const std::vector< Field > Exd::get_row( uint32_t id ) + { + + auto cacheEntryIt = _idCache.find( id ); + if( cacheEntryIt == _idCache.end() ) + throw std::runtime_error( "Id not found: " + std::to_string( id ) ); + + // Iterates over all the files + const uint32_t member_count = _exh->get_members().size(); + auto& file_ptr = cacheEntryIt->second.file; + + std::vector< char > dataCpy = file_ptr->get_data_sections().front(); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); + + // Get the vector fields for the given record and preallocate it + auto fields = _data[ id ]; + fields.reserve( member_count ); + iss.seekg( cacheEntryIt->second.offset + 6 ); + + uint8_t subRows = *reinterpret_cast< uint8_t* >( &dataCpy[ cacheEntryIt->second.offset + 5 ] ); + + for( auto& member_entry : _exh->get_exh_members() ) + { + // Seek to the position of the member to extract. + // 6 is because we have uint32_t/uint16_t at the start of each record + iss.seekg( cacheEntryIt->second.offset + 6 + member_entry.offset ); + + // Switch depending on the type to extract + switch( member_entry.type ) + { + case DataType::string: + // Extract the offset to the actual string + // Seek to it then extract the actual string + { + auto string_offset = extract< uint32_t >( iss, "string_offset", false ); + iss.seekg( cacheEntryIt->second.offset + 6 + _exh->get_header().data_offset + string_offset ); + fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); + } + break; + + case DataType::boolean: + fields.emplace_back( extract< bool >( iss, "bool" ) ); + break; + + case DataType::int8: + fields.emplace_back( extract< int8_t >( iss, "int8_t" ) ); + break; + + case DataType::uint8: + fields.emplace_back( extract< uint8_t >( iss, "uint8_t" ) ); + break; + + case DataType::int16: + fields.emplace_back( extract< int16_t >( iss, "int16_t", false ) ); + break; + + case DataType::uint16: + fields.emplace_back( extract< uint16_t >( iss, "uint16_t", false ) ); + break; + + case DataType::int32: + fields.emplace_back( extract< int32_t >( iss, "int32_t", false ) ); + break; + + case DataType::uint32: + fields.emplace_back( extract< uint32_t >( iss, "uint32_t", false ) ); + break; + + case DataType::float32: + fields.emplace_back( extract< float >( iss, "float", false ) ); + break; + + case DataType::uint64: + fields.emplace_back( extract< uint64_t >( iss, "uint64_t", false ) ); + break; + + default: + auto type = static_cast< uint16_t >( member_entry.type ); + if( type < 0x19 || type > 0x20 ) + throw std::runtime_error( "Unknown DataType: " + std::to_string( type ) ); + uint64_t val = extract< uint64_t >( iss, "bool" ); + int32_t shift = type - 0x19; + int32_t i = 1 << shift; + val &= i; + fields.emplace_back( ( val & i ) == i ); + break; + } + } + return fields; + + } + + // Get all rows + const std::map< uint32_t, std::vector< Field>>& Exd::get_rows() + { + // Iterates over all the files + const uint32_t member_count = _exh->get_members().size(); + for( auto& file_ptr : _files ) + { + // Get a stream + std::vector< char > dataCpy = file_ptr->get_data_sections().front(); + std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); + + // Extract the header and skip to the record indices + auto exd_header = extract< ExdHeader >( iss ); + iss.seekg( 0x20 ); + + // Preallocate and extract the record_indices + const uint32_t record_count = exd_header.index_size / sizeof( ExdRecordIndex ); + std::vector< ExdRecordIndex > record_indices; + record_indices.reserve( record_count ); + for( uint32_t i = 0; i < record_count; ++i ) + { + record_indices.emplace_back( extract< ExdRecordIndex >( iss ) ); + } + + for( auto& record_index : record_indices ) + { + // Get the vector fields for the given record and preallocate it + auto& fields = _data[ record_index.id ]; + fields.reserve( member_count ); + + for( auto& member_entry : _exh->get_exh_members() ) + //for( auto& member_entry : _exh->get_members() ) + { + // Seek to the position of the member to extract. + // 6 is because we have uint32_t/uint16_t at the start of each record + iss.seekg( record_index.offset + 6 + member_entry.offset ); + + // Switch depending on the type to extract + switch( member_entry.type ) + { + case DataType::string: + // Extract the offset to the actual string + // Seek to it then extract the actual string + { + auto string_offset = extract< uint32_t >( iss, "string_offset", false ); + iss.seekg( record_index.offset + 6 + _exh->get_header().data_offset + string_offset ); + fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); + } + break; + + case DataType::boolean: + fields.emplace_back( extract< bool >( iss, "bool" ) ); + break; + + case DataType::int8: + fields.emplace_back( extract< int8_t >( iss, "int8_t" ) ); + break; + + case DataType::uint8: + fields.emplace_back( extract< uint8_t >( iss, "uint8_t" ) ); + break; + + case DataType::int16: + fields.emplace_back( extract< int16_t >( iss, "int16_t", false ) ); + break; + + case DataType::uint16: + fields.emplace_back( extract< uint16_t >( iss, "uint16_t", false ) ); + break; + + case DataType::int32: + fields.emplace_back( extract< int32_t >( iss, "int32_t", false ) ); + break; + + case DataType::uint32: + fields.emplace_back( extract< uint32_t >( iss, "uint32_t", false ) ); + break; + + case DataType::float32: + fields.emplace_back( extract< float >( iss, "float", false ) ); + break; + + case DataType::uint64: + fields.emplace_back( extract< uint64_t >( iss, "uint64_t", false ) ); + break; + + default: + auto type = static_cast< uint16_t >( member_entry.type ); + if( type < 0x19 || type > 0x20 ) + throw std::runtime_error( "Unknown DataType: " + std::to_string( type ) ); + uint64_t val = extract< uint64_t >( iss, "bool" ); + int32_t shift = type - 0x19; + int32_t i = 1 << shift; + val &= i; + fields.emplace_back( ( val & i ) == i ); + break; + } + } + } + } + return _data; + } - struct ExdHeader - { - char magic[0x4]; - uint16_t unknown; - uint16_t unknown2; - uint32_t index_size; - }; - - struct ExdRecordIndex - { - uint32_t id; - uint32_t offset; - }; - - } -} - -namespace xiv -{ - namespace utils - { - namespace bparse - { - template <> inline void reorder( xiv::exd::ExdHeader& i_struct ) { for( int32_t i = 0; i < 0x4; ++i ) { xiv::utils::bparse::reorder( i_struct.magic[i] ); } i_struct.unknown = xiv::utils::bparse::byteswap( i_struct.unknown ); xiv::utils::bparse::reorder( i_struct.unknown ); i_struct.unknown2 = xiv::utils::bparse::byteswap( i_struct.unknown2 ); xiv::utils::bparse::reorder( i_struct.unknown2 ); i_struct.index_size = xiv::utils::bparse::byteswap( i_struct.index_size ); xiv::utils::bparse::reorder( i_struct.index_size ); } - template <> inline void reorder( xiv::exd::ExdRecordIndex& i_struct ) { i_struct.id = xiv::utils::bparse::byteswap( i_struct.id ); xiv::utils::bparse::reorder( i_struct.id ); i_struct.offset = xiv::utils::bparse::byteswap( i_struct.offset ); xiv::utils::bparse::reorder( i_struct.offset ); } - } - } -}; - -namespace xiv -{ - namespace exd - { - - Exd::Exd( std::shared_ptr i_exh, const std::vector>& i_files ) - { - _exh = i_exh; - _files = i_files; - - - // Iterates over all the files - const uint32_t member_count = _exh->get_members().size(); - for ( auto &file_ptr : _files ) - { - // Get a stream - std::vector< char > dataCpy = file_ptr->get_data_sections().front(); - std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); - - // Extract the header and skip to the record indices - auto exd_header = extract< ExdHeader >( iss ); - iss.seekg( 0x20 ); - - // Preallocate and extract the record_indices - const uint32_t record_count = exd_header.index_size / sizeof( ExdRecordIndex ); - std::vector< ExdRecordIndex > record_indices; - record_indices.reserve( record_count ); - for ( uint32_t i = 0; i < record_count; ++i ) - { - auto recordIndex = extract< ExdRecordIndex >( iss ); - _idCache[recordIndex.id] = ExdCacheEntry{file_ptr, recordIndex.offset}; - } - } - } - - Exd::~Exd() - { - } - - const std::vector Exd::get_row( uint32_t id, uint32_t subRow ) - { - - auto cacheEntryIt = _idCache.find( id ); - if( cacheEntryIt == _idCache.end() ) - throw std::runtime_error( "Id not found: " + std::to_string( id ) ); - - // Iterates over all the files - const uint32_t member_count = _exh->get_members().size(); - auto& file_ptr = cacheEntryIt->second.file; - - std::vector< char > dataCpy = file_ptr->get_data_sections().front(); - std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); - - // Get the vector fields for the given record and preallocate it - auto fields = _data[id]; - fields.reserve( member_count ); - iss.seekg( cacheEntryIt->second.offset + 6 ); - - uint8_t subRows = *reinterpret_cast< uint8_t* >( &dataCpy[ cacheEntryIt->second.offset + 5 ] ); - - if( subRow >= subRows ) - throw std::runtime_error( "Out of bounds sub-row!" ); - - int offset = cacheEntryIt->second.offset + 6 + ( subRow * _exh->get_header().data_offset + 2 * ( subRow + 1 ) ); - - for( auto& member_entry : _exh->get_exh_members() ) - { - // Seek to the position of the member to extract. - // 6 is because we have uint32_t/uint16_t at the start of each record - iss.seekg( offset + member_entry.offset ); - - // Switch depending on the type to extract - switch( member_entry.type ) - { - case DataType::string: - // Extract the offset to the actual string - // Seek to it then extract the actual string - { - throw std::runtime_error( "String not implemented for variant 2!" ); - //auto string_offset = extract( iss, "string_offset", false ); - //iss.seekg( cacheEntryIt->second.offset + 6 + _exh->get_header().data_offset + string_offset ); - //fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); - } - break; - - case DataType::boolean: - fields.emplace_back( extract( iss, "bool" ) ); - break; - - case DataType::int8: - fields.emplace_back( extract( iss, "int8_t" ) ); - break; - - case DataType::uint8: - fields.emplace_back( extract( iss, "uint8_t" ) ); - break; - - case DataType::int16: - fields.emplace_back( extract( iss, "int16_t", false ) ); - break; - - case DataType::uint16: - fields.emplace_back( extract( iss, "uint16_t", false ) ); - break; - - case DataType::int32: - fields.emplace_back( extract( iss, "int32_t", false ) ); - break; - - case DataType::uint32: - fields.emplace_back( extract( iss, "uint32_t", false ) ); - break; - - case DataType::float32: - fields.emplace_back( extract( iss, "float", false ) ); - break; - - case DataType::uint64: - fields.emplace_back( extract( iss, "uint64_t", false ) ); - break; - - default: - auto type = static_cast< uint16_t >( member_entry.type ); - if( type < 0x19 || type > 0x20 ) - throw std::runtime_error("Unknown DataType: " + std::to_string( type )); - uint64_t val = extract< uint64_t >( iss, "bool" ); - int32_t shift = type - 0x19; - int32_t i = 1 << shift; - val &= i; - fields.emplace_back( ( val & i ) == i ); - break; - } - } - return fields; - - } - - - const std::vector Exd::get_row( uint32_t id ) - { - - auto cacheEntryIt = _idCache.find( id ); - if( cacheEntryIt == _idCache.end() ) - throw std::runtime_error( "Id not found: " + std::to_string( id ) ); - - // Iterates over all the files - const uint32_t member_count = _exh->get_members().size(); - auto& file_ptr = cacheEntryIt->second.file; - - std::vector< char > dataCpy = file_ptr->get_data_sections().front(); - std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); - - // Get the vector fields for the given record and preallocate it - auto fields = _data[id]; - fields.reserve( member_count ); - iss.seekg( cacheEntryIt->second.offset + 6 ); - - uint8_t subRows = *reinterpret_cast< uint8_t* >( &dataCpy[ cacheEntryIt->second.offset + 5 ] ); - - for( auto& member_entry : _exh->get_exh_members() ) - { - // Seek to the position of the member to extract. - // 6 is because we have uint32_t/uint16_t at the start of each record - iss.seekg( cacheEntryIt->second.offset + 6 + member_entry.offset ); - - // Switch depending on the type to extract - switch( member_entry.type ) - { - case DataType::string: - // Extract the offset to the actual string - // Seek to it then extract the actual string - { - auto string_offset = extract( iss, "string_offset", false ); - iss.seekg( cacheEntryIt->second.offset + 6 + _exh->get_header().data_offset + string_offset ); - fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); - } - break; - - case DataType::boolean: - fields.emplace_back( extract( iss, "bool" ) ); - break; - - case DataType::int8: - fields.emplace_back( extract( iss, "int8_t" ) ); - break; - - case DataType::uint8: - fields.emplace_back( extract( iss, "uint8_t" ) ); - break; - - case DataType::int16: - fields.emplace_back( extract( iss, "int16_t", false ) ); - break; - - case DataType::uint16: - fields.emplace_back( extract( iss, "uint16_t", false ) ); - break; - - case DataType::int32: - fields.emplace_back( extract( iss, "int32_t", false ) ); - break; - - case DataType::uint32: - fields.emplace_back( extract( iss, "uint32_t", false ) ); - break; - - case DataType::float32: - fields.emplace_back( extract( iss, "float", false ) ); - break; - - case DataType::uint64: - fields.emplace_back( extract( iss, "uint64_t", false ) ); - break; - - default: - auto type = static_cast< uint16_t >( member_entry.type ); - if( type < 0x19 || type > 0x20 ) - throw std::runtime_error("Unknown DataType: " + std::to_string( type )); - uint64_t val = extract< uint64_t >( iss, "bool" ); - int32_t shift = type - 0x19; - int32_t i = 1 << shift; - val &= i; - fields.emplace_back( ( val & i ) == i ); - break; - } - } - return fields; - - } - - // Get all rows - const std::map>& Exd::get_rows() - { - // Iterates over all the files - const uint32_t member_count = _exh->get_members().size(); - for( auto& file_ptr : _files ) - { - // Get a stream - std::vector< char > dataCpy = file_ptr->get_data_sections().front(); - std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); - - // Extract the header and skip to the record indices - auto exd_header = extract( iss ); - iss.seekg( 0x20 ); - - // Preallocate and extract the record_indices - const uint32_t record_count = exd_header.index_size / sizeof( ExdRecordIndex ); - std::vector record_indices; - record_indices.reserve( record_count ); - for( uint32_t i = 0; i < record_count; ++i ) - { - record_indices.emplace_back( extract( iss ) ); - } - - for( auto& record_index : record_indices ) - { - // Get the vector fields for the given record and preallocate it - auto& fields = _data[record_index.id]; - fields.reserve( member_count ); - - for( auto& member_entry : _exh->get_exh_members() ) - //for( auto& member_entry : _exh->get_members() ) - { - // Seek to the position of the member to extract. - // 6 is because we have uint32_t/uint16_t at the start of each record - iss.seekg( record_index.offset + 6 + member_entry.offset ); - - // Switch depending on the type to extract - switch( member_entry.type ) - { - case DataType::string: - // Extract the offset to the actual string - // Seek to it then extract the actual string - { - auto string_offset = extract( iss, "string_offset", false ); - iss.seekg( record_index.offset + 6 + _exh->get_header().data_offset + string_offset ); - fields.emplace_back( utils::bparse::extract_cstring( iss, "string" ) ); - } - break; - - case DataType::boolean: - fields.emplace_back( extract( iss, "bool" ) ); - break; - - case DataType::int8: - fields.emplace_back( extract( iss, "int8_t" ) ); - break; - - case DataType::uint8: - fields.emplace_back( extract( iss, "uint8_t" ) ); - break; - - case DataType::int16: - fields.emplace_back( extract( iss, "int16_t", false ) ); - break; - - case DataType::uint16: - fields.emplace_back( extract( iss, "uint16_t", false ) ); - break; - - case DataType::int32: - fields.emplace_back( extract( iss, "int32_t", false ) ); - break; - - case DataType::uint32: - fields.emplace_back( extract( iss, "uint32_t", false ) ); - break; - - case DataType::float32: - fields.emplace_back( extract( iss, "float", false ) ); - break; - - case DataType::uint64: - fields.emplace_back( extract( iss, "uint64_t", false ) ); - break; - - default: - auto type = static_cast< uint16_t >( member_entry.type ); - if( type < 0x19 || type > 0x20 ) - throw std::runtime_error("Unknown DataType: " + std::to_string( type )); - uint64_t val = extract< uint64_t >( iss, "bool" ); - int32_t shift = type - 0x19; - int32_t i = 1 << shift; - val &= i; - fields.emplace_back( ( val & i ) == i ); - break; - } - } - } - } - return _data; - } - - } } diff --git a/deps/datReader/Exd.h b/deps/datReader/Exd.h index c504176b..a16c135b 100644 --- a/deps/datReader/Exd.h +++ b/deps/datReader/Exd.h @@ -8,15 +8,13 @@ #include "File.h" -namespace xiv -{ -namespace exd +namespace xiv::exd { -class Exh; + class Exh; -// Field type containing all the possible types in the data files -using Field = std::variant< + // Field type containing all the possible types in the data files + using Field = std::variant< std::string, bool, int8_t, @@ -27,40 +25,44 @@ using Field = std::variant< uint32_t, float, uint64_t >; - -struct ExdCacheEntry -{ - std::shared_ptr file; - uint32_t offset; -}; -// Data for a given language -class Exd -{ -public: + struct ExdCacheEntry + { + std::shared_ptr< dat::File > file; + uint32_t offset; + }; + + // Data for a given language + class Exd + { + public: // i_exh: the header // i_files: the multiple exd files - Exd() {} - Exd(std::shared_ptr i_exh, const std::vector>& i_files); + Exd() + { + } + + Exd( std::shared_ptr< Exh > i_exh, const std::vector< std::shared_ptr< dat::File>>& i_files ); + ~Exd(); // Get a row by its id - const std::vector get_row(uint32_t id); + const std::vector< Field > get_row( uint32_t id ); // Get a row by its id and sub-row - const std::vector get_row(uint32_t id, uint32_t subRow); + const std::vector< Field > get_row( uint32_t id, uint32_t subRow ); + // Get all rows - const std::map>& get_rows(); + const std::map< uint32_t, std::vector< Field>>& get_rows(); -protected: + protected: // Data indexed by the ID of the row, the vector is field with the same order as exh.members - std::map> _data; - std::vector> _files; - std::shared_ptr _exh; + std::map< uint32_t, std::vector< Field>> _data; + std::vector< std::shared_ptr< dat::File>> _files; + std::shared_ptr< Exh > _exh; std::map< uint32_t, ExdCacheEntry > _idCache; -}; + }; -} } #endif // XIV_EXD_EXD_H diff --git a/deps/datReader/ExdCat.cpp b/deps/datReader/ExdCat.cpp index ddab260e..ebf75ec7 100644 --- a/deps/datReader/ExdCat.cpp +++ b/deps/datReader/ExdCat.cpp @@ -9,74 +9,73 @@ namespace { - // Suffix of the filenames given a language - std::map language_map = - {{xiv::exd::Language::none, ""}, - {xiv::exd::Language::ja, "_ja"}, - {xiv::exd::Language::en, "_en"}, - {xiv::exd::Language::de, "_de"}, - {xiv::exd::Language::fr, "_fr"}, - {xiv::exd::Language::chs, "_chs"}}; + // Suffix of the filenames given a language + std::map language_map = + { + {xiv::exd::Language::none, ""}, + {xiv::exd::Language::ja, "_ja"}, + {xiv::exd::Language::en, "_en"}, + {xiv::exd::Language::de, "_de"}, + {xiv::exd::Language::fr, "_fr"}, + {xiv::exd::Language::chs, "_chs"} + }; } -namespace xiv +namespace xiv::exd { - namespace exd - { + Cat::Cat( dat::GameData& i_game_data, const std::string& i_name ) : + _name( i_name ) + { + //XIV_INFO(xiv_exd_logger, "Initializing Cat with name: " << i_name); + // creates the header .exh + { + auto header_file = i_game_data.getFile( "exd/" + i_name + ".exh" ); + _header = std::shared_ptr< Exh >( new Exh( *header_file ) ); - Cat::Cat(dat::GameData& i_game_data, const std::string& i_name) : - _name(i_name) + } + + for( auto language: _header->get_languages() ) + { + // chs not yet in data files + if( language == Language::en || language == Language::none ) { - //XIV_INFO(xiv_exd_logger, "Initializing Cat with name: " << i_name); - // creates the header .exh - { - auto header_file = i_game_data.getFile("exd/" + i_name + ".exh"); - _header = std::shared_ptr< Exh >( new Exh( *header_file ) ); - - } - - for(auto language: _header->get_languages()) - { - // chs not yet in data files - if (language == Language::en || language == Language::none) - { - // Get all the files for a given category/language, in case of multiple range of IDs in separate files (like Quest) - std::vector> files; - for(auto& exd_def: _header->get_exd_defs()) - { - files.emplace_back( i_game_data.getFile("exd/" + i_name + "_" + std::to_string(exd_def.start_id) + language_map.at(language) + ".exd") ); - } - // Instantiate the data for this language - _data[language] = std::unique_ptr(new Exd(_header, files)); - } - } + // Get all the files for a given category/language, in case of multiple range of IDs in separate files (like Quest) + std::vector< std::shared_ptr< dat::File>> files; + for( auto& exd_def: _header->get_exd_defs() ) + { + files.emplace_back( i_game_data.getFile( + "exd/" + i_name + "_" + std::to_string( exd_def.start_id ) + language_map.at( language ) + ".exd" ) ); + } + // Instantiate the data for this language + _data[ language ] = std::make_unique< Exd >( _header, files ); } + } + } - Cat::~Cat() - { + Cat::~Cat() + { - } + } - const std::string& Cat::get_name() const - { - return _name; - } + const std::string& Cat::get_name() const + { + return _name; + } - const Exh& Cat::get_header() const - { - return *_header; - } + const Exh& Cat::get_header() const + { + return *_header; + } - const Exd& Cat::get_data_ln(Language i_language) const - { - auto ln_it = _data.find(i_language); - if (ln_it == _data.end()) - { - throw std::runtime_error("No data for language: " + std::to_string(uint16_t(i_language))); - } + const Exd& Cat::get_data_ln( Language i_language ) const + { + auto ln_it = _data.find( i_language ); + if( ln_it == _data.end() ) + { + throw std::runtime_error( "No data for language: " + std::to_string( uint16_t( i_language ) ) ); + } - return *(ln_it->second); - } + return *( ln_it->second ); + } - } } diff --git a/deps/datReader/ExdCat.h b/deps/datReader/ExdCat.h index af1090d8..e22ec036 100644 --- a/deps/datReader/ExdCat.h +++ b/deps/datReader/ExdCat.h @@ -4,7 +4,7 @@ #include #include -#include +#include #include "bparse.h" #include "Exd.h" diff --git a/deps/datReader/ExdData.cpp b/deps/datReader/ExdData.cpp index 3c4af47a..5307f5de 100644 --- a/deps/datReader/ExdData.cpp +++ b/deps/datReader/ExdData.cpp @@ -7,50 +7,47 @@ #include "ExdCat.h" -namespace xiv -{ -namespace exd +namespace xiv::exd { + +ExdData::ExdData( dat::GameData& i_game_data ) try : + _game_data( i_game_data ) { + //XIV_INFO(xiv_exd_logger, "Initializing ExdData"); -ExdData::ExdData(dat::GameData& i_game_data) try : - _game_data(i_game_data) -{ - //XIV_INFO(xiv_exd_logger, "Initializing ExdData"); + // Fetch the root.exl and get a stream from it + auto root_exl = i_game_data.getFile( "exd/root.exl" ); + std::vector< char > dataCpy = root_exl->get_data_sections().front(); + xiv::utils::stream::vectorwrapbuf< char > databuf( dataCpy ); + std::istream stream( &databuf ); - // Fetch the root.exl and get a stream from it - auto root_exl = i_game_data.getFile("exd/root.exl"); - std::vector< char > dataCpy = root_exl->get_data_sections().front(); - xiv::utils::stream::vectorwrapbuf databuf(dataCpy); - std::istream stream(&databuf); + // Iterates over the lines while skipping the first one + std::string line; + std::getline( stream, line ); // extract first line EXLT,2 + std::getline( stream, line ); - // Iterates over the lines while skipping the first one - std::string line; - std::getline(stream, line); // extract first line EXLT,2 - std::getline(stream, line); + // Until the EOF + while( !line.empty() ) + { + // Format is cat_name,XX + // XX being an internal identifier + // Get only the cat_name + auto sep = line.find( ',' ); + auto category = line.substr( 0, sep ); - // Until the EOF - while (!line.empty()) - { - // Format is cat_name,XX - // XX being an internal identifier - // Get only the cat_name - auto sep = line.find(','); - auto category = line.substr(0, sep); + // Add to the list of category name + // creates the empty category in the cats map + // instantiate the creation mutex for this category + _cat_names.push_back( category ); + _cats[ category ] = std::unique_ptr< Cat >(); + _cat_creation_mutexes[ category ] = std::make_unique< std::mutex >(); - // Add to the list of category name - // creates the empty category in the cats map - // instantiate the creation mutex for this category - _cat_names.push_back(category); - _cats[category] = std::unique_ptr(); - _cat_creation_mutexes[category] = std::unique_ptr(new std::mutex()); - - std::getline(stream, line); - } + std::getline( stream, line ); + } } -catch(std::exception& e) +catch( std::exception& e ) { - // In case of failure here, client is supposed to catch the exception because it is not recoverable on our side - throw std::runtime_error( "ExdData initialization failed: " + std::string( e.what() ) ); + // In case of failure here, client is supposed to catch the exception because it is not recoverable on our side + throw std::runtime_error( "ExdData initialization failed: " + std::string( e.what() ) ); } ExdData::~ExdData() @@ -58,43 +55,42 @@ ExdData::~ExdData() } -const std::vector& ExdData::get_cat_names() const +const std::vector< std::string >& ExdData::get_cat_names() const { - return _cat_names; + return _cat_names; } -const Cat& ExdData::get_category(const std::string& i_cat_name) +const Cat& ExdData::get_category( const std::string& i_cat_name ) { - // Get the category from its name - auto cat_it = _cats.find(i_cat_name); - if (cat_it == _cats.end()) - { - throw std::runtime_error("Category not found: " + i_cat_name); - } + // Get the category from its name + auto cat_it = _cats.find( i_cat_name ); + if( cat_it == _cats.end() ) + { + throw std::runtime_error( "Category not found: " + i_cat_name ); + } - if (cat_it->second) - { - // If valid return it - return *(cat_it->second); - } - else - { - // If not, create it and return it - create_category(i_cat_name); - return *(_cats[i_cat_name]); - } + if( cat_it->second ) + { + // If valid return it + return *( cat_it->second ); + } + else + { + // If not, create it and return it + create_category( i_cat_name ); + return *( _cats[ i_cat_name ] ); + } } -void ExdData::create_category(const std::string& i_cat_name) +void ExdData::create_category( const std::string& i_cat_name ) { - // Lock mutex in this scope - std::lock_guard lock(*(_cat_creation_mutexes[i_cat_name])); - // Maybe after unlocking it has already been created, so check (most likely if it blocked) - if (!_cats[i_cat_name]) - { - _cats[i_cat_name] = std::unique_ptr(new Cat(_game_data, i_cat_name)); - } + // Lock mutex in this scope + std::lock_guard< std::mutex > lock( *( _cat_creation_mutexes[ i_cat_name ] ) ); + // Maybe after unlocking it has already been created, so check (most likely if it blocked) + if( !_cats[ i_cat_name ] ) + { + _cats[ i_cat_name ] = std::make_unique< Cat >( _game_data, i_cat_name ); + } } } -} diff --git a/deps/datReader/ExdData.h b/deps/datReader/ExdData.h index c6ca6170..15092d6e 100644 --- a/deps/datReader/ExdData.h +++ b/deps/datReader/ExdData.h @@ -5,7 +5,7 @@ #include #include -#include +#include namespace xiv { @@ -34,7 +34,7 @@ namespace xiv const Cat& get_category(const std::string& i_cat_name); // Export in csv in base flder i_ouput_path - void export_as_csvs(const std::experimental::filesystem::path& i_output_path); + void export_as_csvs(const std::filesystem::path& i_output_path); protected: // Lazy instantiation of category diff --git a/deps/datReader/Exh.cpp b/deps/datReader/Exh.cpp index 0a829bec..a8c300b8 100644 --- a/deps/datReader/Exh.cpp +++ b/deps/datReader/Exh.cpp @@ -7,71 +7,69 @@ using xiv::utils::bparse::extract; -namespace xiv -{ -namespace exd -{ -Exh::Exh(const dat::File& i_file) +namespace xiv::exd { + + Exh::Exh( const dat::File& i_file ) + { // Get a stream from the file std::vector< char > dataCpy = i_file.get_data_sections().front(); std::istringstream iss( std::string( dataCpy.begin(), dataCpy.end() ) ); // Extract header and skip to member definitions - _header = extract(iss); - iss.seekg(0x20); + _header = extract< ExhHeader >( iss ); + iss.seekg( 0x20 ); // Extract all the members and feed the _members map - for (auto i = 0; i < _header.field_count; ++i) + for( auto i = 0; i < _header.field_count; ++i ) { - auto member = extract(iss); - _members[member.offset] = member; - _exh_defs.push_back( member ); + auto member = extract< ExhMember >( iss ); + _members[ member.offset ] = member; + _exh_defs.push_back( member ); } // Extract all the exd_defs - _exd_defs.reserve(_header.exd_count); - for (auto i = 0; i < _header.exd_count; ++i) + _exd_defs.reserve( _header.exd_count ); + for( auto i = 0; i < _header.exd_count; ++i ) { - _exd_defs.emplace_back(extract(iss)); + _exd_defs.emplace_back( extract< ExhExdDef >( iss ) ); } // Extract all the languages - _languages.reserve(_header.language_count); - for (auto i = 0; i < _header.language_count; ++i) + _languages.reserve( _header.language_count ); + for( auto i = 0; i < _header.language_count; ++i ) { - _languages.emplace_back(Language(extract(iss, "language"))); + _languages.emplace_back( Language( extract< uint16_t >( iss, "language" ) ) ); } -} + } -Exh::~Exh() -{ -} + Exh::~Exh() + { + } -const ExhHeader& Exh::get_header() const -{ + const ExhHeader& Exh::get_header() const + { return _header; -} + } -const std::vector& Exh::get_exd_defs() const -{ + const std::vector< ExhExdDef >& Exh::get_exd_defs() const + { return _exd_defs; -} + } -const std::vector& Exh::get_languages() const -{ + const std::vector< Language >& Exh::get_languages() const + { return _languages; -} + } -const std::map& Exh::get_members() const -{ + const std::map< uint32_t, ExhMember >& Exh::get_members() const + { return _members; -} + } -const std::vector& Exh::get_exh_members() const -{ - return _exh_defs; -} + const std::vector< ExhMember >& Exh::get_exh_members() const + { + return _exh_defs; + } } -} diff --git a/deps/datReader/Exh.h b/deps/datReader/Exh.h index be273185..37301d0b 100644 --- a/deps/datReader/Exh.h +++ b/deps/datReader/Exh.h @@ -5,99 +5,131 @@ #include "bparse.h" -namespace xiv +namespace xiv::exd { - namespace exd - { - enum class DataType : uint16_t - { - string = 0, - boolean = 1, - int8 = 2, - uint8 = 3, - int16 = 4, - uint16 = 5, - int32 = 6, - uint32 = 7, - float32 = 9, - uint64 = 11, - }; + enum class DataType : + uint16_t + { + string = 0, + boolean = 1, + int8 = 2, + uint8 = 3, + int16 = 4, + uint16 = 5, + int32 = 6, + uint32 = 7, + float32 = 9, + uint64 = 11, + }; - struct ExhHeader - { - char magic[0x4]; - uint16_t unknown; - uint16_t data_offset; - uint16_t field_count; - uint16_t exd_count; - uint16_t language_count; - uint16_t unknown1; - uint8_t u2; - uint8_t variant; - }; + struct ExhHeader + { + char magic[0x4]; + uint16_t unknown; + uint16_t data_offset; + uint16_t field_count; + uint16_t exd_count; + uint16_t language_count; + uint16_t unknown1; + uint8_t u2; + uint8_t variant; + }; - struct ExhMember - { - DataType type; - uint16_t offset; - }; + struct ExhMember + { + DataType type; + uint16_t offset; + }; - struct ExhExdDef - { - uint32_t start_id; - uint32_t count_id; - }; - } + struct ExhExdDef + { + uint32_t start_id; + uint32_t count_id; + }; +}; + +namespace xiv::utils::bparse { +template<> +inline void reorder< xiv::exd::ExhHeader >( xiv::exd::ExhHeader& i_struct ) +{ + for( int32_t i = 0; i < 0x4; ++i ) + { + xiv::utils::bparse::reorder( i_struct.magic[ i ] ); + } + i_struct.unknown = xiv::utils::bparse::byteswap( i_struct.unknown ); + xiv::utils::bparse::reorder( i_struct.unknown ); + i_struct.data_offset = xiv::utils::bparse::byteswap( i_struct.data_offset ); + xiv::utils::bparse::reorder( i_struct.data_offset ); + i_struct.field_count = xiv::utils::bparse::byteswap( i_struct.field_count ); + xiv::utils::bparse::reorder( i_struct.field_count ); + i_struct.exd_count = xiv::utils::bparse::byteswap( i_struct.exd_count ); + xiv::utils::bparse::reorder( i_struct.exd_count ); + i_struct.language_count = xiv::utils::bparse::byteswap( i_struct.language_count ); + xiv::utils::bparse::reorder( i_struct.language_count ); +} + +template<> +inline void reorder< xiv::exd::ExhMember >( xiv::exd::ExhMember& i_struct ) +{ + i_struct.type = xiv::utils::bparse::byteswap( i_struct.type ); + xiv::utils::bparse::reorder( i_struct.type ); + i_struct.offset = xiv::utils::bparse::byteswap( i_struct.offset ); + xiv::utils::bparse::reorder( i_struct.offset ); +} + +template<> +inline void reorder< xiv::exd::ExhExdDef >( xiv::exd::ExhExdDef& i_struct ) +{ + i_struct.start_id = xiv::utils::bparse::byteswap( i_struct.start_id ); + xiv::utils::bparse::reorder( i_struct.start_id ); + i_struct.count_id = xiv::utils::bparse::byteswap( i_struct.count_id ); + xiv::utils::bparse::reorder( i_struct.count_id ); +} }; namespace xiv { - namespace utils - { - namespace bparse - { - template <> inline void reorder( xiv::exd::ExhHeader& i_struct ) { for( int32_t i = 0; i < 0x4; ++i ) { xiv::utils::bparse::reorder( i_struct.magic[i] ); } i_struct.unknown = xiv::utils::bparse::byteswap( i_struct.unknown ); xiv::utils::bparse::reorder( i_struct.unknown ); i_struct.data_offset = xiv::utils::bparse::byteswap( i_struct.data_offset ); xiv::utils::bparse::reorder( i_struct.data_offset ); i_struct.field_count = xiv::utils::bparse::byteswap( i_struct.field_count ); xiv::utils::bparse::reorder( i_struct.field_count ); i_struct.exd_count = xiv::utils::bparse::byteswap( i_struct.exd_count ); xiv::utils::bparse::reorder( i_struct.exd_count ); i_struct.language_count = xiv::utils::bparse::byteswap( i_struct.language_count ); xiv::utils::bparse::reorder( i_struct.language_count ); } - template <> inline void reorder( xiv::exd::ExhMember& i_struct ) { i_struct.type = xiv::utils::bparse::byteswap( i_struct.type ); xiv::utils::bparse::reorder( i_struct.type ); i_struct.offset = xiv::utils::bparse::byteswap( i_struct.offset ); xiv::utils::bparse::reorder( i_struct.offset ); } - template <> inline void reorder( xiv::exd::ExhExdDef& i_struct ) { i_struct.start_id = xiv::utils::bparse::byteswap( i_struct.start_id ); xiv::utils::bparse::reorder( i_struct.start_id ); i_struct.count_id = xiv::utils::bparse::byteswap( i_struct.count_id ); xiv::utils::bparse::reorder( i_struct.count_id ); } - } - } -}; -namespace xiv -{ - namespace dat - { - class File; - } - namespace exd - { + namespace dat + { + class File; + } - enum Language : uint16_t; + namespace exd + { - // Header file for exd data - class Exh - { - public: - // The header file - Exh( const dat::File& i_file ); - ~Exh(); + enum Language : + uint16_t; - const ExhHeader& get_header() const; - const std::vector& get_exd_defs() const; - const std::vector& get_languages() const; - const std::map& get_members() const; - const std::vector& get_exh_members() const; + // Header file for exd data + class Exh + { + public: + // The header file + Exh( const dat::File& i_file ); - protected: - ExhHeader _header; - // Members of the datastruct ordered(indexed) by offset - std::map _members; - std::vector _exh_defs; - std::vector _exd_defs; - std::vector _languages; - }; + ~Exh(); - } + const ExhHeader& get_header() const; + + const std::vector< ExhExdDef >& get_exd_defs() const; + + const std::vector< Language >& get_languages() const; + + const std::map< uint32_t, ExhMember >& get_members() const; + + const std::vector< ExhMember >& get_exh_members() const; + + protected: + ExhHeader _header; + // Members of the datastruct ordered(indexed) by offset + std::map< uint32_t, ExhMember > _members; + std::vector< ExhMember > _exh_defs; + std::vector< ExhExdDef > _exd_defs; + std::vector< Language > _languages; + }; + + } } #endif // XIV_EXD_EXH_H diff --git a/deps/datReader/File.cpp b/deps/datReader/File.cpp index 9559159d..e83659c1 100644 --- a/deps/datReader/File.cpp +++ b/deps/datReader/File.cpp @@ -2,44 +2,41 @@ #include -namespace xiv -{ -namespace dat +namespace xiv::dat { -File::File() : - _type(FileType::empty) -{ -} + File::File() : + _type( FileType::empty ) + { + } -File::~File() -{ -} + File::~File() + { + } -FileType File::get_type() const -{ - return _type; -} + FileType File::get_type() const + { + return _type; + } -const std::vector>& File::get_data_sections() const -{ - return _data_sections; -} + const std::vector< std::vector< char>>& File::get_data_sections() const + { + return _data_sections; + } -std::vector>& File::access_data_sections() -{ - return _data_sections; -} + std::vector< std::vector< char>>& File::access_data_sections() + { + return _data_sections; + } -void File::exportToFile(const std::experimental::filesystem::path& i_path) const -{ - std::ofstream ofs( i_path.string(), std::ios_base::binary | std::ios_base::out ); - for( auto& data_section : _data_sections ) - { + void File::exportToFile( const std::filesystem::path& i_path ) const + { + std::ofstream ofs( i_path.string(), std::ios_base::binary | std::ios_base::out ); + for( auto& data_section : _data_sections ) + { ofs.write( data_section.data(), data_section.size() ); - } - ofs.close(); -} + } + ofs.close(); + } } -} diff --git a/deps/datReader/File.h b/deps/datReader/File.h index 1d09e78e..31c12fbe 100644 --- a/deps/datReader/File.h +++ b/deps/datReader/File.h @@ -3,54 +3,46 @@ #include -#include +#include #include #include "bparse.h" - -namespace xiv +namespace xiv::dat { - namespace dat - { - enum class FileType : uint32_t - { - empty = 1, - standard = 2, - model = 3, - texture = 4, - }; - } -}; + enum class FileType : + uint32_t + { + empty = 1, + standard = 2, + model = 3, + texture = 4, + }; -namespace xiv -{ - namespace dat - { + class Dat; - class Dat; + // Basic file from the dats + class File + { + friend class Dat; - // Basic file from the dats - class File - { - friend class Dat; - public: - File(); - ~File(); + public: + File(); - FileType get_type() const; + ~File(); - // Getters functions for the data in the file - const std::vector>& get_data_sections() const; - std::vector>& access_data_sections(); + FileType get_type() const; - void exportToFile( const std::experimental::filesystem::path& i_path ) const; + // Getters functions for the data in the file + const std::vector< std::vector< char>>& get_data_sections() const; - protected: - FileType _type; - std::vector> _data_sections; - }; + std::vector< std::vector< char>>& access_data_sections(); - } + void exportToFile( const std::filesystem::path& i_path ) const; + + protected: + FileType _type; + std::vector< std::vector< char>> _data_sections; + }; } #endif // XIV_DAT_FILE_H diff --git a/deps/datReader/GameData.cpp b/deps/datReader/GameData.cpp index 4b4a71e4..f3e56537 100644 --- a/deps/datReader/GameData.cpp +++ b/deps/datReader/GameData.cpp @@ -11,312 +11,315 @@ #include "DatCat.h" #include "File.h" -namespace -{ - // Relation between category number and category name - // These names are taken straight from the exe, it helps resolve dispatching when getting files by path +namespace { +// Relation between category number and category name +// These names are taken straight from the exe, it helps resolve dispatching when getting files by path - std::unordered_map< std::string, uint32_t > categoryNameToIdMap = - {{"common", 0x00}, - {"bgcommon", 0x01}, - {"bg", 0x02}, - {"cut", 0x03}, - {"chara", 0x04}, - {"shader", 0x05}, - {"ui", 0x06}, - {"sound", 0x07}, - {"vfx", 0x08}, - {"ui_script", 0x09}, - {"exd", 0x0A}, - {"game_script", 0x0B}, - {"music", 0x0C} - }; +std::unordered_map< std::string, uint32_t > categoryNameToIdMap = + { { "common", 0x00 }, + { "bgcommon", 0x01 }, + { "bg", 0x02 }, + { "cut", 0x03 }, + { "chara", 0x04 }, + { "shader", 0x05 }, + { "ui", 0x06 }, + { "sound", 0x07 }, + { "vfx", 0x08 }, + { "ui_script", 0x09 }, + { "exd", 0x0A }, + { "game_script", 0x0B }, + { "music", 0x0C } + }; - std::unordered_map< uint32_t, std::string > categoryIdToNameMap = - {{0x00, "common"}, - {0x01, "bgcommon"}, - {0x02, "bg"}, - {0x03, "cut"}, - {0x04, "chara"}, - {0x05, "shader"}, - {0x06, "ui"}, - {0x07, "sound"}, - {0x08, "vfx"}, - {0x09, "ui_script"}, - {0x0A, "exd"}, - {0x0B, "game_script"}, - {0x0C, "music"}}; +std::unordered_map< uint32_t, std::string > categoryIdToNameMap = + { { 0x00, "common" }, + { 0x01, "bgcommon" }, + { 0x02, "bg" }, + { 0x03, "cut" }, + { 0x04, "chara" }, + { 0x05, "shader" }, + { 0x06, "ui" }, + { 0x07, "sound" }, + { 0x08, "vfx" }, + { 0x09, "ui_script" }, + { 0x0A, "exd" }, + { 0x0B, "game_script" }, + { 0x0C, "music" } }; } -namespace xiv -{ -namespace dat +namespace xiv::dat { + GameData::GameData( const std::filesystem::path& path ) try : + m_path( path ) + { + int maxExLevel = 0; -GameData::GameData(const std::experimental::filesystem::path& path) try : - m_path(path) -{ - int maxExLevel = 0; + // msvc has retarded stdlib implementation + #ifdef _WIN32 + static constexpr auto sep = "\\"; + #else + static constexpr auto sep = std::filesystem::path::preferred_separator; + #endif - // msvc has retarded stdlib implementation -#ifdef _WIN32 - static constexpr auto sep = "\\"; -#else - static constexpr auto sep = std::experimental::filesystem::path::preferred_separator; -#endif - - // Determine which expansions are available - while( std::experimental::filesystem::exists( std::experimental::filesystem::path( m_path.string() + sep + "ex" + std::to_string( maxExLevel + 1 ) + sep + "ex" + std::to_string( maxExLevel + 1 ) + ".ver" ) ) ) - { + // Determine which expansions are available + while( std::filesystem::exists( std::filesystem::path( + m_path.string() + sep + "ex" + std::to_string( maxExLevel + 1 ) + sep + "ex" + std::to_string( maxExLevel + 1 ) + + ".ver" ) ) ) + { maxExLevel++; - } - + } - // Iterate over the files in path - for( auto it = std::experimental::filesystem::directory_iterator( m_path.string() + "//ffxiv" ); it != std::experimental::filesystem::directory_iterator(); ++it ) - { + + // Iterate over the files in path + for( auto it = std::filesystem::directory_iterator( m_path.string() + "//ffxiv" ); + it != std::filesystem::directory_iterator(); ++it ) + { // Get the filename of the current element auto filename = it->path().filename().string(); // If it contains ".win32.index" this is most likely a hit for a category - if( filename.find( ".win32.index" ) != std::string::npos && filename.find( ".win32.index2" ) == std::string::npos ) + if( filename.find( ".win32.index" ) != std::string::npos && filename.find( ".win32.index2" ) == std::string::npos ) { - // Format of indexes is XX0000.win32.index, so fetch the hex number for category number - std::istringstream iss( filename.substr( 0, 2 ) ); - uint32_t cat_nb; - iss >> std::hex >> cat_nb; + // Format of indexes is XX0000.win32.index, so fetch the hex number for category number + std::istringstream iss( filename.substr( 0, 2 ) ); + uint32_t cat_nb; + iss >> std::hex >> cat_nb; - // Add to the list of category number - // creates the empty category in the cats map - // instantiate the creation mutex for this category - m_catNums.push_back( cat_nb ); - m_cats[cat_nb] = std::unique_ptr(); - m_catCreationMutexes[cat_nb] = std::unique_ptr( new std::mutex() ); + // Add to the list of category number + // creates the empty category in the cats map + // instantiate the creation mutex for this category + m_catNums.push_back( cat_nb ); + m_cats[ cat_nb ] = std::unique_ptr< Cat >(); + m_catCreationMutexes[ cat_nb ] = std::make_unique< std::mutex >(); - // Check for expansion - for( int exNum = 1; exNum <= maxExLevel; exNum++ ) - { - const std::string path = m_path.string() + sep + buildDatStr( "ex" + std::to_string( exNum ), cat_nb, exNum, 0, "win32", "index" ); + // Check for expansion + for( int exNum = 1; exNum <= maxExLevel; exNum++ ) + { + const std::string path = + m_path.string() + sep + buildDatStr( "ex" + std::to_string( exNum ), cat_nb, exNum, 0, "win32", "index" ); - if( std::experimental::filesystem::exists( std::experimental::filesystem::path( path ) ) ) + if( std::filesystem::exists( std::filesystem::path( path ) ) ) + { + + int chunkCount = 0; + + for( int chunkTest = 0; chunkTest < 256; chunkTest++ ) { - - int chunkCount = 0; - - for(int chunkTest = 0; chunkTest < 256; chunkTest++ ) - { - if( std::experimental::filesystem::exists( m_path.string() + sep + buildDatStr( "ex" + std::to_string( exNum ), cat_nb, exNum, chunkTest, "win32", "index" ) ) ) - { - m_exCats[cat_nb].exNumToChunkMap[exNum].chunkToCatMap[chunkTest] = std::unique_ptr(); - chunkCount++; - } - } - + if( std::filesystem::exists( m_path.string() + sep + + buildDatStr( "ex" + std::to_string( exNum ), cat_nb, exNum, chunkTest, "win32", + "index" ) ) ) + { + m_exCats[ cat_nb ].exNumToChunkMap[ exNum ].chunkToCatMap[ chunkTest ] = std::unique_ptr< Cat >(); + chunkCount++; + } } - } + + } + } } - } + } -} -catch( std::exception& e ) -{ - // In case of failure here, client is supposed to catch the exception because it is not recoverable on our side - throw std::runtime_error( "GameData initialization failed: " + std::string( e.what() ) ); -} + } + catch( std::exception& e ) + { + // In case of failure here, client is supposed to catch the exception because it is not recoverable on our side + throw std::runtime_error( "GameData initialization failed: " + std::string( e.what() ) ); + } -GameData::~GameData() -{ + GameData::~GameData() + { -} + } -const std::string GameData::buildDatStr( const std::string folder, const int cat, const int exNum, const int chunk, const std::string platform, const std::string type ) -{ - char dat[1024]; - sprintf( dat, "%s/%02x%02x%02x.%s.%s", folder.c_str(), cat, exNum, chunk, platform.c_str(), type.c_str() ); - return std::string( dat ); -} + const std::string GameData::buildDatStr( const std::string folder, const int cat, const int exNum, const int chunk, + const std::string platform, const std::string type ) + { + char dat[1024]; + sprintf( dat, "%s/%02x%02x%02x.%s.%s", folder.c_str(), cat, exNum, chunk, platform.c_str(), type.c_str() ); + return std::string( dat ); + } -const std::vector& GameData::getCatNumbers() const -{ + const std::vector< uint32_t >& GameData::getCatNumbers() const + { return m_catNums; -} + } -std::unique_ptr GameData::getFile(const std::string& path) -{ - // Get the hashes, the category from the path then call the getFile of the category - uint32_t dirHash; - uint32_t filenameHash; - getHashes( path, dirHash, filenameHash ); + std::unique_ptr< File > GameData::getFile( const std::string& path ) + { + // Get the hashes, the category from the path then call the getFile of the category + uint32_t dirHash; + uint32_t filenameHash; + getHashes( path, dirHash, filenameHash ); - return getCategoryFromPath( path ).getFile( dirHash, filenameHash ); -} + return getCategoryFromPath( path ).getFile( dirHash, filenameHash ); + } -bool GameData::doesFileExist(const std::string& path) -{ - uint32_t dirHash; - uint32_t filenameHash; - getHashes( path, dirHash, filenameHash ); + bool GameData::doesFileExist( const std::string& path ) + { + uint32_t dirHash; + uint32_t filenameHash; + getHashes( path, dirHash, filenameHash ); - return getCategoryFromPath( path ).doesFileExist( dirHash, filenameHash ); -} + return getCategoryFromPath( path ).doesFileExist( dirHash, filenameHash ); + } -bool GameData::doesDirExist(const std::string& i_path) -{ - uint32_t dirHash; - uint32_t filenameHash; - getHashes( i_path, dirHash, filenameHash ); + bool GameData::doesDirExist( const std::string& i_path ) + { + uint32_t dirHash; + uint32_t filenameHash; + getHashes( i_path, dirHash, filenameHash ); - return getCategoryFromPath( i_path ).doesDirExist( dirHash ); -} + return getCategoryFromPath( i_path ).doesDirExist( dirHash ); + } -const Cat& GameData::getCategory(uint32_t catNum) -{ - // Check that the category number exists - auto catIt = m_cats.find( catNum ); - if( catIt == m_cats.end() ) - { + const Cat& GameData::getCategory( uint32_t catNum ) + { + // Check that the category number exists + auto catIt = m_cats.find( catNum ); + if( catIt == m_cats.end() ) + { throw std::runtime_error( "Category not found: " + std::to_string( catNum ) ); - } + } - // If it exists and already instantiated return it - if( catIt->second ) - { + // If it exists and already instantiated return it + if( catIt->second ) + { return *( catIt->second ); - } - else - { + } + else + { // Else create it and return it createCategory( catNum ); - return *( m_cats[catNum] ); - } -} + return *( m_cats[ catNum ] ); + } + } -const Cat& GameData::getCategory(const std::string& catName) -{ - // Find the category number from the name - auto categoryNameToIdMapIt = ::categoryNameToIdMap.find( catName ); - if( categoryNameToIdMapIt == ::categoryNameToIdMap.end() ) - { + const Cat& GameData::getCategory( const std::string& catName ) + { + // Find the category number from the name + auto categoryNameToIdMapIt = ::categoryNameToIdMap.find( catName ); + if( categoryNameToIdMapIt == ::categoryNameToIdMap.end() ) + { throw std::runtime_error( "Category not found: " + catName ); - } + } - // From the category number return the category - return getCategory( categoryNameToIdMapIt->second ); -} + // From the category number return the category + return getCategory( categoryNameToIdMapIt->second ); + } -const Cat& GameData::getExCategory( const std::string& catName, uint32_t exNum, const std::string& path ) -{ - // Find the category number from the name - auto categoryMapIt = ::categoryNameToIdMap.find( catName ); - if( categoryMapIt == ::categoryNameToIdMap.end() ) - { + const Cat& GameData::getExCategory( const std::string& catName, uint32_t exNum, const std::string& path ) + { + // Find the category number from the name + auto categoryMapIt = ::categoryNameToIdMap.find( catName ); + if( categoryMapIt == ::categoryNameToIdMap.end() ) + { throw std::runtime_error( "Category not found: " + catName ); - } + } - uint32_t dirHash; - uint32_t filenameHash; - getHashes( path, dirHash, filenameHash ); + uint32_t dirHash; + uint32_t filenameHash; + getHashes( path, dirHash, filenameHash ); - for( auto const& chunk : m_exCats[categoryMapIt->second].exNumToChunkMap[exNum].chunkToCatMap ) - { + for( auto const& chunk : m_exCats[ categoryMapIt->second ].exNumToChunkMap[ exNum ].chunkToCatMap ) + { if( !chunk.second ) - createExCategory( categoryMapIt->second ); + createExCategory( categoryMapIt->second ); if( chunk.second->doesFileExist( dirHash, filenameHash ) ) { - return *( chunk.second ); + return *( chunk.second ); } - } + } - throw std::runtime_error( "Chunk not found for path: " + path ); -} + throw std::runtime_error( "Chunk not found for path: " + path ); + } -const Cat& GameData::getCategoryFromPath(const std::string& path) -{ - // Find the first / in the string, paths are in the format CAT_NAME/..../.../../.... - auto firstSlashPos = path.find( '/' ); - if( firstSlashPos == std::string::npos ) - { + const Cat& GameData::getCategoryFromPath( const std::string& path ) + { + // Find the first / in the string, paths are in the format CAT_NAME/..../.../../.... + auto firstSlashPos = path.find( '/' ); + if( firstSlashPos == std::string::npos ) + { throw std::runtime_error( "Path does not have a / char: " + path ); - } + } - if( path.substr( firstSlashPos + 1, 2) == "ex" ) - { + if( path.substr( firstSlashPos + 1, 2 ) == "ex" ) + { return getExCategory( path.substr( 0, firstSlashPos ), std::stoi( path.substr( firstSlashPos + 3, 1 ) ), path ); - } - else - { + } + else + { // From the sub string found beforethe first / get the category return getCategory( path.substr( 0, firstSlashPos ) ); - } -} + } + } -void GameData::getHashes(const std::string& path, uint32_t& dirHash, uint32_t& filenameHash) const -{ - // Convert the path to lowercase before getting the hashes - std::string pathLower; - pathLower.resize( path.size() ); - std::transform( path.begin(), path.end(), pathLower.begin(), ::tolower ); + void GameData::getHashes( const std::string& path, uint32_t& dirHash, uint32_t& filenameHash ) const + { + // Convert the path to lowercase before getting the hashes + std::string pathLower; + pathLower.resize( path.size() ); + std::transform( path.begin(), path.end(), pathLower.begin(), ::tolower ); - // Find last / to separate dir from filename - auto lastSlashPos = pathLower.rfind( '/' ); - if( lastSlashPos == std::string::npos ) - { + // Find last / to separate dir from filename + auto lastSlashPos = pathLower.rfind( '/' ); + if( lastSlashPos == std::string::npos ) + { throw std::runtime_error( "Path does not have a / char: " + path ); - } + } - std::string dirPart = pathLower.substr( 0, lastSlashPos ); - std::string filenamePart = pathLower.substr( lastSlashPos + 1 ); + std::string dirPart = pathLower.substr( 0, lastSlashPos ); + std::string filenamePart = pathLower.substr( lastSlashPos + 1 ); - // Get the crc32 values from zlib, to compensate the final XOR 0xFFFFFFFF that isnot done in the exe we just reXOR - dirHash = crc32( 0, reinterpret_cast( dirPart.data() ), dirPart.size() ) ^ 0xFFFFFFFF; - filenameHash = crc32( 0, reinterpret_cast( filenamePart.data() ), filenamePart.size() ) ^ 0xFFFFFFFF; -} + // Get the crc32 values from zlib, to compensate the final XOR 0xFFFFFFFF that isnot done in the exe we just reXOR + dirHash = crc32( 0, reinterpret_cast( dirPart.data() ), dirPart.size() ) ^ 0xFFFFFFFF; + filenameHash = crc32( 0, reinterpret_cast( filenamePart.data() ), filenamePart.size() ) ^ 0xFFFFFFFF; + } -void GameData::createCategory(uint32_t catNum) -{ - // Lock mutex in this scope - std::lock_guard lock( *( m_catCreationMutexes[catNum] ) ); - // Maybe after unlocking it has already been created, so check (most likely if it blocked) - if( !m_cats[catNum] ) - { + void GameData::createCategory( uint32_t catNum ) + { + // Lock mutex in this scope + std::lock_guard< std::mutex > lock( *( m_catCreationMutexes[ catNum ] ) ); + // Maybe after unlocking it has already been created, so check (most likely if it blocked) + if( !m_cats[ catNum ] ) + { // Get the category name if we have it std::string catName; auto categoryMapIt = ::categoryIdToNameMap.find( catNum ); if( categoryMapIt != ::categoryIdToNameMap.end() ) { - catName = categoryMapIt->second; + catName = categoryMapIt->second; } // Actually creates the category - m_cats[catNum] = std::unique_ptr( new Cat( m_path, catNum, catName ) ); - } -} + m_cats[ catNum ] = std::make_unique< Cat >( m_path, catNum, catName ); + } + } -void GameData::createExCategory( uint32_t catNum ) -{ - // Maybe after unlocking it has already been created, so check (most likely if it blocked) - if( !m_exCats[catNum].exNumToChunkMap[1].chunkToCatMap[0] ) - { + void GameData::createExCategory( uint32_t catNum ) + { + // Maybe after unlocking it has already been created, so check (most likely if it blocked) + if( !m_exCats[ catNum ].exNumToChunkMap[ 1 ].chunkToCatMap[ 0 ] ) + { // Get the category name if we have it std::string catName; auto categoryMapIt = ::categoryIdToNameMap.find( catNum ); if( categoryMapIt != ::categoryIdToNameMap.end() ) { - catName = categoryMapIt->second; + catName = categoryMapIt->second; } - for( auto const& ex : m_exCats[catNum].exNumToChunkMap ) + for( auto const& ex : m_exCats[ catNum ].exNumToChunkMap ) { - for( auto const& chunk : m_exCats[catNum].exNumToChunkMap[ex.first].chunkToCatMap ) - { - // Actually creates the category - m_exCats[catNum].exNumToChunkMap[ex.first].chunkToCatMap[chunk.first] = std::unique_ptr( new Cat( m_path, catNum, catName, ex.first, chunk.first ) ); - } + for( auto const& chunk : m_exCats[ catNum ].exNumToChunkMap[ ex.first ].chunkToCatMap ) + { + // Actually creates the category + m_exCats[ catNum ].exNumToChunkMap[ ex.first ].chunkToCatMap[ chunk.first ] = std::unique_ptr< Cat >( + new Cat( m_path, catNum, catName, ex.first, chunk.first ) ); + } } - } -} + } + } } -} diff --git a/deps/datReader/GameData.h b/deps/datReader/GameData.h index 2b64fafd..53b7f021 100644 --- a/deps/datReader/GameData.h +++ b/deps/datReader/GameData.h @@ -5,80 +5,88 @@ #include #include -#include +#include -namespace xiv -{ -namespace dat +namespace xiv::dat { -class Cat; -class File; + class Cat; -// Interface to all the datfiles - Main entry point -// All the paths to files/dirs inside the dats are case-insensitive -class GameData -{ -public: - // This should be the path in which the .index/.datX files are located - GameData( const std::experimental::filesystem::path& path ); - ~GameData(); + class File; - static const std::string buildDatStr( const std::string folder, const int cat, const int exNum, const int chunk, const std::string platform, const std::string type ); + // Interface to all the datfiles - Main entry point + // All the paths to files/dirs inside the dats are case-insensitive + class GameData + { + public: + // This should be the path in which the .index/.datX files are located + GameData( const std::filesystem::path& path ); - // Returns all the scanned category number available in the path - const std::vector& getCatNumbers() const; + ~GameData(); - // Return a specific category by its number (see getCatNumbers() for loops) - const Cat& getCategory( uint32_t catNum ); - // Return a specific category by it's name (e.g.: "exd"/"game_script"/ etc...) - const Cat& getCategory( const std::string& catName ); + static const std::string + buildDatStr( const std::string folder, const int cat, const int exNum, const int chunk, const std::string platform, + const std::string type ); - const Cat& getExCategory( const std::string& catName, uint32_t exNum, const std::string& path ); + // Returns all the scanned category number available in the path + const std::vector< uint32_t >& getCatNumbers() const; - // Retrieve a file from the dats given its filename - std::unique_ptr getFile( const std::string& path ); + // Return a specific category by its number (see getCatNumbers() for loops) + const Cat& getCategory( uint32_t catNum ); - // Checks that a file exists - bool doesFileExist( const std::string& path ); + // Return a specific category by it's name (e.g.: "exd"/"game_script"/ etc...) + const Cat& getCategory( const std::string& catName ); - // Checks that a dir exists, there must be a trailing / in the path - // Note that it won't work for dirs that don't contain any file - // e.g.: - "ui/icon/" will return False - // - "ui/icon/000000/" will return True - bool doesDirExist( const std::string& path ); + const Cat& getExCategory( const std::string& catName, uint32_t exNum, const std::string& path ); -protected: - // Return a specific category given a path (calls const Cat& getCategory(const std::string& catName)) - const Cat& getCategoryFromPath( const std::string& path ); + // Retrieve a file from the dats given its filename + std::unique_ptr< File > getFile( const std::string& path ); - // From a full path, returns the dirHash and the filenameHash - void getHashes( const std::string& path, uint32_t& dirHash, uint32_t& filenameHash ) const; + // Checks that a file exists + bool doesFileExist( const std::string& path ); - // Lazy instantiation of category - void createCategory( uint32_t catNum ); + // Checks that a dir exists, there must be a trailing / in the path + // Note that it won't work for dirs that don't contain any file + // e.g.: - "ui/icon/" will return False + // - "ui/icon/000000/" will return True + bool doesDirExist( const std::string& path ); - void createExCategory( uint32_t catNum ); + protected: + // Return a specific category given a path (calls const Cat& getCategory(const std::string& catName)) + const Cat& getCategoryFromPath( const std::string& path ); - // Path given to constructor, pointing to the folder with the .index/.datX files - const std::experimental::filesystem::path m_path; + // From a full path, returns the dirHash and the filenameHash + void getHashes( const std::string& path, uint32_t& dirHash, uint32_t& filenameHash ) const; - // Stored categories, indexed by their number, categories are instantiated and parsed individually when they are needed - std::unordered_map> m_cats; + // Lazy instantiation of category + void createCategory( uint32_t catNum ); - // List of all the categories numbers, is equal to m_cats.keys() - std::vector m_catNums; + void createExCategory( uint32_t catNum ); - // Map of all EX categories and their chunks, "CatNum - (ExNum - (ChunkNum - Cat))" - // Map of all EX categories and their chunks, "CatNum - (ExNum - (ChunkNum - Cat))" - using ChunkToCatMap = struct { std::unordered_map< uint32_t, std::unique_ptr< Cat > > chunkToCatMap; }; - using ExNumToChunkMap = struct { std::unordered_map< uint32_t, ChunkToCatMap > exNumToChunkMap; }; - using CatNumToExNumMap = std::unordered_map< uint32_t, ExNumToChunkMap >; - CatNumToExNumMap m_exCats; - std::unordered_map> m_catCreationMutexes; -}; + // Path given to constructor, pointing to the folder with the .index/.datX files + const std::filesystem::path m_path; + + // Stored categories, indexed by their number, categories are instantiated and parsed individually when they are needed + std::unordered_map< uint32_t, std::unique_ptr< Cat>> m_cats; + + // List of all the categories numbers, is equal to m_cats.keys() + std::vector< uint32_t > m_catNums; + + // Map of all EX categories and their chunks, "CatNum - (ExNum - (ChunkNum - Cat))" + // Map of all EX categories and their chunks, "CatNum - (ExNum - (ChunkNum - Cat))" + using ChunkToCatMap = struct + { + std::unordered_map< uint32_t, std::unique_ptr< Cat > > chunkToCatMap; + }; + using ExNumToChunkMap = struct + { + std::unordered_map< uint32_t, ChunkToCatMap > exNumToChunkMap; + }; + using CatNumToExNumMap = std::unordered_map< uint32_t, ExNumToChunkMap >; + CatNumToExNumMap m_exCats; + std::unordered_map< uint32_t, std::unique_ptr< std::mutex>> m_catCreationMutexes; + }; -} } #endif // XIV_DAT_GAMEDATA_H diff --git a/deps/datReader/Index.cpp b/deps/datReader/Index.cpp index 92dfb5da..d46b20c6 100644 --- a/deps/datReader/Index.cpp +++ b/deps/datReader/Index.cpp @@ -2,166 +2,154 @@ #include "bparse.h" -namespace xiv +namespace xiv::dat { -namespace dat -{ - struct IndexBlockRecord - { - uint32_t offset; - uint32_t size; - SqPackBlockHash blockHash; - }; + struct IndexBlockRecord + { + uint32_t offset; + uint32_t size; + SqPackBlockHash blockHash; + }; - struct IndexHashTableEntry - { - uint32_t filenameHash; - uint32_t dirHash; - uint32_t datOffset; - uint32_t padding; - }; -} + struct IndexHashTableEntry + { + uint32_t filenameHash; + uint32_t dirHash; + uint32_t datOffset; + uint32_t padding; + }; } -namespace xiv +namespace xiv::utils::bparse { -namespace utils -{ -namespace bparse -{ - template <> - inline void reorder(xiv::dat::IndexBlockRecord& i_struct) - { - xiv::utils::bparse::reorder(i_struct.offset); - xiv::utils::bparse::reorder(i_struct.size); - xiv::utils::bparse::reorder(i_struct.blockHash); - } + template<> + inline void reorder< xiv::dat::IndexBlockRecord >( xiv::dat::IndexBlockRecord& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.offset ); + xiv::utils::bparse::reorder( i_struct.size ); + xiv::utils::bparse::reorder( i_struct.blockHash ); + } - template <> - inline void reorder(xiv::dat::IndexHashTableEntry& i_struct) - { - xiv::utils::bparse::reorder(i_struct.filenameHash); - xiv::utils::bparse::reorder(i_struct.dirHash); - xiv::utils::bparse::reorder(i_struct.datOffset); - xiv::utils::bparse::reorder(i_struct.padding); - } + template<> + inline void reorder< xiv::dat::IndexHashTableEntry >( xiv::dat::IndexHashTableEntry& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.filenameHash ); + xiv::utils::bparse::reorder( i_struct.dirHash ); + xiv::utils::bparse::reorder( i_struct.datOffset ); + xiv::utils::bparse::reorder( i_struct.padding ); + } } -} -}; using xiv::utils::bparse::extract; -namespace xiv -{ -namespace dat +namespace xiv::dat { -Index::Index(const std::experimental::filesystem::path& path) : - SqPack( path ) -{ - if( !m_handle ) + Index::Index( const std::filesystem::path& path ) : + SqPack( path ) + { + if( !m_handle ) throw new std::runtime_error( "Failed to load Index at " + path.string() ); - // Hash Table record - auto hashTableBlockRecord = extract( m_handle ); - isIndexBlockValid( hashTableBlockRecord ); + // Hash Table record + auto hashTableBlockRecord = extract< IndexBlockRecord >( m_handle ); + isIndexBlockValid( hashTableBlockRecord ); - // Save the posin the stream to go back to it later on - auto pos = m_handle.tellg(); + // Save the posin the stream to go back to it later on + auto pos = m_handle.tellg(); - // Seek to the pos of the hash table in the file - m_handle.seekg( hashTableBlockRecord.offset ); + // Seek to the pos of the hash table in the file + m_handle.seekg( hashTableBlockRecord.offset ); - // Preallocate and extract the index_hash_table_entries - std::vector indexHashTableEntries; - extract( m_handle, hashTableBlockRecord.size / sizeof( IndexHashTableEntry ), - indexHashTableEntries ); + // Preallocate and extract the index_hash_table_entries + std::vector< IndexHashTableEntry > indexHashTableEntries; + extract< IndexHashTableEntry >( m_handle, hashTableBlockRecord.size / sizeof( IndexHashTableEntry ), + indexHashTableEntries ); - // Feed the correct entry in the HashTable for each index_hash_table_entry - for( auto& indexHashTableEntry : indexHashTableEntries ) - { - auto& hashTableEntry = m_hashTable[indexHashTableEntry.dirHash][indexHashTableEntry.filenameHash]; + // Feed the correct entry in the HashTable for each index_hash_table_entry + for( auto& indexHashTableEntry : indexHashTableEntries ) + { + auto& hashTableEntry = m_hashTable[ indexHashTableEntry.dirHash ][ indexHashTableEntry.filenameHash ]; // The dat number is found in the offset, last four bits hashTableEntry.datNum = ( indexHashTableEntry.datOffset & 0xF ) / 0x2; // The offset in the dat file, needs to strip the dat number indicator - hashTableEntry.datOffset = ( indexHashTableEntry.datOffset & 0xFFFFFFF0 ) * 0x08; + hashTableEntry.datOffset = ( indexHashTableEntry.datOffset - ( indexHashTableEntry.datOffset & 0x000F ) ) * 0x08; hashTableEntry.dirHash = indexHashTableEntry.dirHash; hashTableEntry.filenameHash = indexHashTableEntry.filenameHash; - } + } - // Come back to where we were before reading the HashTable - m_handle.seekg( pos ); + // Come back to where we were before reading the HashTable + m_handle.seekg( pos ); - // Dat Count - m_datCount = extract( m_handle, "dat_count" ); + // Dat Count + m_datCount = extract< uint32_t >( m_handle, "dat_count" ); - // Free List - isIndexBlockValid( extract( m_handle ) ); + // Free List + isIndexBlockValid( extract< IndexBlockRecord >( m_handle ) ); - // Dir Hash Table - isIndexBlockValid( extract( m_handle ) ); -} + // Dir Hash Table + isIndexBlockValid( extract< IndexBlockRecord >( m_handle ) ); + } -Index::~Index() -{ -} + Index::~Index() + { + } -uint32_t Index::getDatCount() const -{ - return m_datCount; -} + uint32_t Index::getDatCount() const + { + return m_datCount; + } -const Index::HashTable& Index::getHashTable() const -{ - return m_hashTable; -} + const Index::HashTable& Index::getHashTable() const + { + return m_hashTable; + } -bool Index::doesFileExist( uint32_t dir_hash, uint32_t filename_hash ) const -{ - auto dir_it = getHashTable().find( dir_hash ); - if( dir_it != getHashTable().end() ) - { + bool Index::doesFileExist( uint32_t dir_hash, uint32_t filename_hash ) const + { + auto dir_it = getHashTable().find( dir_hash ); + if( dir_it != getHashTable().end() ) + { return ( dir_it->second.find( filename_hash ) != dir_it->second.end() ); - } - return false; -} + } + return false; + } -bool Index::doesDirExist( uint32_t dir_hash ) const -{ - return ( getHashTable().find( dir_hash ) != getHashTable().end() ); -} + bool Index::doesDirExist( uint32_t dir_hash ) const + { + return ( getHashTable().find( dir_hash ) != getHashTable().end() ); + } -const Index::DirHashTable& Index::getDirHashTable( uint32_t dir_hash ) const -{ - auto dir_it = getHashTable().find( dir_hash ); - if( dir_it == getHashTable().end() ) - { + const Index::DirHashTable& Index::getDirHashTable( uint32_t dir_hash ) const + { + auto dir_it = getHashTable().find( dir_hash ); + if( dir_it == getHashTable().end() ) + { throw std::runtime_error( "dirHash not found" ); - } - else - { + } + else + { return dir_it->second; - } -} + } + } -const Index::HashTableEntry& Index::getHashTableEntry( uint32_t dir_hash, uint32_t filename_hash ) const -{ - auto& dirHashTable = getDirHashTable( dir_hash ); - auto file_it = dirHashTable.find( filename_hash ); - if( file_it == dirHashTable.end() ) - { + const Index::HashTableEntry& Index::getHashTableEntry( uint32_t dir_hash, uint32_t filename_hash ) const + { + auto& dirHashTable = getDirHashTable( dir_hash ); + auto file_it = dirHashTable.find( filename_hash ); + if( file_it == dirHashTable.end() ) + { throw std::runtime_error( "filenameHash not found" ); - } - else - { + } + else + { return file_it->second; - } -} + } + } -void Index::isIndexBlockValid( const IndexBlockRecord& i_index_block_record ) -{ - isBlockValid( i_index_block_record.offset, i_index_block_record.size, i_index_block_record.blockHash ); -} + void Index::isIndexBlockValid( const IndexBlockRecord& i_index_block_record ) + { + isBlockValid( i_index_block_record.offset, i_index_block_record.size, i_index_block_record.blockHash ); + } } -} diff --git a/deps/datReader/Index.h b/deps/datReader/Index.h index 0dc565b7..d98b96a6 100644 --- a/deps/datReader/Index.h +++ b/deps/datReader/Index.h @@ -5,55 +5,59 @@ #include -#include +#include -namespace xiv { -namespace dat { - -struct IndexBlockRecord; - -class Index : public SqPack +namespace xiv::dat { -public: - // Full path to the index file - Index( const std::experimental::filesystem::path& i_path ); - virtual ~Index(); - // An entry in the hash table, representing a file in a given dat - struct HashTableEntry - { + struct IndexBlockRecord; + + class Index : + public SqPack + { + public: + // Full path to the index file + Index( const std::filesystem::path& i_path ); + + virtual ~Index(); + + // An entry in the hash table, representing a file in a given dat + struct HashTableEntry + { uint32_t datNum; uint32_t dirHash; uint32_t filenameHash; uint32_t datOffset; - }; + }; - // HashTable has dir hashes -> filename hashes -> HashTableEntry - using DirHashTable = std::unordered_map< uint32_t, HashTableEntry >; - using HashTable = std::unordered_map< uint32_t, DirHashTable >; + // HashTable has dir hashes -> filename hashes -> HashTableEntry + using DirHashTable = std::unordered_map< uint32_t, HashTableEntry >; + using HashTable = std::unordered_map< uint32_t, DirHashTable >; - // Get the number of dat files the index is linked to - uint32_t getDatCount() const; + // Get the number of dat files the index is linked to + uint32_t getDatCount() const; - bool doesFileExist( uint32_t dir_hash, uint32_t filename_hash ) const; - bool doesDirExist( uint32_t dir_hash ) const; + bool doesFileExist( uint32_t dir_hash, uint32_t filename_hash ) const; - // Returns the whole HashTable - const HashTable& getHashTable() const; - // Returns the hash table for a specific dir - const DirHashTable& getDirHashTable( uint32_t dir_hash ) const; - // Returns the HashTableEntry for a given file given its hashes - const HashTableEntry& getHashTableEntry( uint32_t dir_hash, uint32_t filename_hash ) const; + bool doesDirExist( uint32_t dir_hash ) const; -protected: - // Checks that the block is valid with regards to its hash - void isIndexBlockValid( const IndexBlockRecord& i_index_block_record ); + // Returns the whole HashTable + const HashTable& getHashTable() const; - uint32_t m_datCount; - HashTable m_hashTable; -}; + // Returns the hash table for a specific dir + const DirHashTable& getDirHashTable( uint32_t dir_hash ) const; + + // Returns the HashTableEntry for a given file given its hashes + const HashTableEntry& getHashTableEntry( uint32_t dir_hash, uint32_t filename_hash ) const; + + protected: + // Checks that the block is valid with regards to its hash + void isIndexBlockValid( const IndexBlockRecord& i_index_block_record ); + + uint32_t m_datCount; + HashTable m_hashTable; + }; -} } #endif // XIV_DAT_INDEX_H diff --git a/deps/datReader/SqPack.cpp b/deps/datReader/SqPack.cpp index ede929aa..fb8c244a 100644 --- a/deps/datReader/SqPack.cpp +++ b/deps/datReader/SqPack.cpp @@ -1,76 +1,78 @@ #include "SqPack.h" -namespace xiv { -namespace dat { - struct SqPackHeader - { - char magic[0x8]; - uint32_t zero; - uint32_t size; - uint32_t version; - uint32_t type; - }; +namespace xiv::dat { + enum PlatformId : + uint8_t + { + Win32, + PS3, + PS4 + }; - struct SqPackIndexHeader - { - uint32_t size; - uint32_t type; - }; -} -} -namespace xiv { -namespace utils { -namespace bparse { - template <> - inline void reorder(xiv::dat::SqPackHeader& i_struct) - { - for (int32_t i = 0; i < 0x8; ++i) - { - xiv::utils::bparse::reorder(i_struct.magic[i]); - } - xiv::utils::bparse::reorder(i_struct.zero); - xiv::utils::bparse::reorder(i_struct.size); - xiv::utils::bparse::reorder(i_struct.version); - xiv::utils::bparse::reorder(i_struct.type); - } + struct SqPackHeader + { + char magic[0x8]; + PlatformId platformId; + uint8_t padding0[3]; + uint32_t size; + uint32_t version; + uint32_t type; + }; - template <> - inline void reorder(xiv::dat::SqPackIndexHeader& i_struct) - { - xiv::utils::bparse::reorder(i_struct.size); - xiv::utils::bparse::reorder(i_struct.type); - } + struct SqPackIndexHeader + { + uint32_t size; + uint32_t type; + }; } + +namespace xiv::utils:: bparse +{ + template<> + inline void reorder< xiv::dat::SqPackHeader >( xiv::dat::SqPackHeader& i_struct ) + { + for( int32_t i = 0; i < 0x8; ++i ) + { + xiv::utils::bparse::reorder( i_struct.magic[ i ] ); + } + xiv::utils::bparse::reorder( i_struct.platformId ); + xiv::utils::bparse::reorder( i_struct.size ); + xiv::utils::bparse::reorder( i_struct.version ); + xiv::utils::bparse::reorder( i_struct.type ); + } + + template<> + inline void reorder< xiv::dat::SqPackIndexHeader >( xiv::dat::SqPackIndexHeader& i_struct ) + { + xiv::utils::bparse::reorder( i_struct.size ); + xiv::utils::bparse::reorder( i_struct.type ); + } } -}; using xiv::utils::bparse::extract; -namespace xiv -{ -namespace dat +namespace xiv::dat { - SqPack::SqPack( const std::experimental::filesystem::path& path ) : - // Open the file - m_handle( path.string(), std::ios_base::in | std::ios_base::binary ) - { - // Extract the header - extract( m_handle ); + // Open the file + SqPack::SqPack( const std::filesystem::path& path ) : + m_handle( path.string(), std::ios_base::in | std::ios_base::binary ) + { + // Extract the header + extract< SqPackHeader >( m_handle ); - // Skip until the IndexHeader the extract it - m_handle.seekg( 0x400 ); - extract( m_handle ); - } + // Skip until the IndexHeader the extract it + m_handle.seekg( 0x400 ); + extract< SqPackIndexHeader >( m_handle ); + } - SqPack::~SqPack() - { - } + SqPack::~SqPack() + { + } - void SqPack::isBlockValid( uint32_t i_offset, uint32_t i_size, const SqPackBlockHash& i_block_hash ) - { - // TODO - } + void SqPack::isBlockValid( uint32_t i_offset, uint32_t i_size, const SqPackBlockHash& i_block_hash ) + { + // TODO + } } -} diff --git a/deps/datReader/SqPack.h b/deps/datReader/SqPack.h index cc7feab3..4c6e34c4 100644 --- a/deps/datReader/SqPack.h +++ b/deps/datReader/SqPack.h @@ -3,64 +3,56 @@ #include -#include +#include #include "bparse.h" -namespace xiv +namespace xiv::dat { - namespace dat - { - - struct SqPackBlockHash - { - uint8_t hash[0x14]; - uint32_t padding[0xB]; - }; - - } + struct SqPackBlockHash + { + uint8_t hash[0x14]; + uint32_t padding[0xB]; + }; } -namespace xiv { - namespace utils { - namespace bparse { - template <> inline void reorder( xiv::dat::SqPackBlockHash& i_struct ) - { - for( auto i = 0; i < 0x14; ++i ) - { - xiv::utils::bparse::reorder( i_struct.hash[i] ); - } - for( auto i = 0; i < 0xB; ++i ) - { - xiv::utils::bparse::reorder( i_struct.padding[i] ); - } - } - } - } + +namespace xiv::utils::bparse +{ + template<> + inline void reorder< xiv::dat::SqPackBlockHash >( xiv::dat::SqPackBlockHash& i_struct ) + { + for( auto i = 0; i < 0x14; ++i ) + { + xiv::utils::bparse::reorder( i_struct.hash[ i ] ); + } + for( auto i = 0; i < 0xB; ++i ) + { + xiv::utils::bparse::reorder( i_struct.padding[ i ] ); + } + } }; -namespace xiv -{ -namespace dat +namespace xiv::dat { -class SqPack -{ + class SqPack + { -public: - // Full path to the sqpack file - SqPack( const std::experimental::filesystem::path& i_path ); - virtual ~SqPack(); + public: + // Full path to the sqpack file + SqPack( const std::filesystem::path& i_path ); -protected: - // Checks that a given block is valid iven its hash - void isBlockValid( uint32_t i_offset, uint32_t i_size, const SqPackBlockHash& i_block_hash ); + virtual ~SqPack(); - // File handle - std::ifstream m_handle; - }; + protected: + // Checks that a given block is valid iven its hash + void isBlockValid( uint32_t i_offset, uint32_t i_size, const SqPackBlockHash& i_block_hash ); + + // File handle + std::ifstream m_handle; + }; -} } #endif // XIV_DAT_SQPACK_H diff --git a/deps/datReader/bparse.h b/deps/datReader/bparse.h index f26d2faa..e3fd13f6 100644 --- a/deps/datReader/bparse.h +++ b/deps/datReader/bparse.h @@ -6,98 +6,96 @@ #include #include -namespace xiv -{ -namespace utils -{ -namespace bparse +namespace xiv::utils::bparse { -// Internal macro for byteswapping -template -void byteswap_impl(char (&bytes)[N]) -{ - for( auto p = std::begin( bytes ), end = std::end( bytes ) - 1; p < end; ++p, --end ) - { + // Internal macro for byteswapping + template< int N > + void byteswap_impl( char (& bytes)[N] ) + { + for( auto p = std::begin( bytes ), end = std::end( bytes ) - 1; p < end; ++p, --end ) + { std::swap( *p, *end ); - } -} + } + } -// byteswapping any type (no pointers to array) -template -T byteswap(T value) -{ - byteswap_impl(*reinterpret_cast(&value)); + // byteswapping any type (no pointers to array) + template< typename T > + T byteswap( T value ) + { + byteswap_impl( *reinterpret_cast(&value) ); return value; -} + } -// Read a struct from a stream -template -void read(std::istream& i_stream, StructType& i_struct) -{ - static_assert( std::is_pod::value, "StructType must be a POD to be able to use read." ); - i_stream.read( reinterpret_cast( &i_struct ), sizeof( StructType ) ); -} + // Read a struct from a stream + template< typename StructType > + void read( std::istream& i_stream, StructType& i_struct ) + { + static_assert( std::is_pod< StructType >::value, "StructType must be a POD to be able to use read." ); + i_stream.read( reinterpret_cast( &i_struct ), sizeof( StructType ) ); + } -// By default a type does not need reordering -template void reorder(StructType& i_struct) {} + // By default a type does not need reordering + template< typename StructType > + void reorder( StructType& i_struct ) + { + } -// "Overload" for passed struct as arg -template -void extract(std::istream& i_stream, StructType& o_struct) -{ - read( i_stream, o_struct ); - reorder( o_struct ); -} + // "Overload" for passed struct as arg + template< typename StructType > + void extract( std::istream& i_stream, StructType& o_struct ) + { + read( i_stream, o_struct ); + reorder( o_struct ); + } -// This should not copy because of RVO -// Extract a struct from a stream and log it -template -StructType extract( std::istream& i_stream ) -{ - StructType temp_struct; - extract( i_stream, temp_struct ); - return temp_struct; -} + // This should not copy because of RVO + // Extract a struct from a stream and log it + template< typename StructType > + StructType extract( std::istream& i_stream ) + { + StructType temp_struct; + extract< StructType >( i_stream, temp_struct ); + return temp_struct; + } -template -void extract(std::istream& i_stream, uint32_t i_size, std::vector& o_structs ) -{ - o_structs.reserve( i_size ); - for( uint32_t i = 0; i < i_size; ++i ) - { - o_structs.emplace_back( extract( i_stream ) ); - } -} + template< typename StructType > + void extract( std::istream& i_stream, uint32_t i_size, std::vector< StructType >& o_structs ) + { + o_structs.reserve( i_size ); + for( uint32_t i = 0; i < i_size; ++i ) + { + o_structs.emplace_back( extract< StructType >( i_stream ) ); + } + } -// For simple (integral) types just provide name and endianness directly -template -StructType extract(std::istream& i_stream, const std::string& i_name, bool i_is_le = true) -{ - StructType temp_struct; - read( i_stream, temp_struct ); - if( !i_is_le ) - { + // For simple (integral) types just provide name and endianness directly + template< typename StructType > + StructType extract( std::istream& i_stream, const std::string& i_name, bool i_is_le = true ) + { + StructType temp_struct; + read( i_stream, temp_struct ); + if( !i_is_le ) + { temp_struct = byteswap( temp_struct ); - } - return temp_struct; -} + } + return temp_struct; + } -template -void extract(std::istream& i_stream, const std::string& i_name, uint32_t i_size, std::vector& o_structs, bool i_is_le = true) -{ - o_structs.reserve( i_size ); - for( uint32_t i = 0; i < i_size; ++i ) - { - o_structs.emplace_back( extract( i_stream, i_name ) ); - } -} + template< typename StructType > + void extract( std::istream& i_stream, const std::string& i_name, uint32_t i_size, std::vector< StructType >& o_structs, + bool i_is_le = true ) + { + o_structs.reserve( i_size ); + for( uint32_t i = 0; i < i_size; ++i ) + { + o_structs.emplace_back( extract< StructType >( i_stream, i_name ) ); + } + } -// For cstrings -std::string extract_cstring( std::istream& i_stream, const std::string& i_name ); + // For cstrings + std::string extract_cstring( std::istream& i_stream, const std::string& i_name ); -} -} } #endif // XIV_UTILS_BPARSE_H diff --git a/deps/datReader/conv.cpp b/deps/datReader/conv.cpp index 40b94080..b591045b 100644 --- a/deps/datReader/conv.cpp +++ b/deps/datReader/conv.cpp @@ -1,8 +1,8 @@ #include "conv.h" -namespace xiv { -namespace utils { -namespace conv { +namespace xiv::utils::conv +{ + float half2float( const uint16_t i_value ) { uint32_t t1; @@ -30,6 +30,4 @@ namespace conv { } } -} -} diff --git a/deps/datReader/conv.h b/deps/datReader/conv.h index c0a4529b..b8f3326f 100644 --- a/deps/datReader/conv.h +++ b/deps/datReader/conv.h @@ -5,13 +5,11 @@ #include #include -namespace xiv { -namespace utils { -namespace conv { +namespace xiv::utils::conv +{ float half2float( const uint16_t i_value ); + float ubyte2float( const uint8_t i_value ); } -} -} #endif // XIV_UTILS_CONV_H diff --git a/deps/datReader/crc32.cpp b/deps/datReader/crc32.cpp index 7b9490d9..c861cebc 100644 --- a/deps/datReader/crc32.cpp +++ b/deps/datReader/crc32.cpp @@ -65,116 +65,111 @@ namespace internal } } -namespace xiv -{ -namespace utils -{ -namespace crc32 +namespace xiv::utils::crc32 { -uint32_t compute(const std::string& i_input, uint32_t init_crc) -{ + uint32_t compute( const std::string& i_input, uint32_t init_crc ) + { // Classical crc stuff - auto& crc_table = internal::get_crc_table(); + auto& crc_table = internal::get_crc_table(); auto crc = init_crc; - for(std::size_t i = 0; i < i_input.size(); ++i) + for( std::size_t i = 0; i < i_input.size(); ++i ) { - crc = crc_table[(crc ^ i_input[i]) & 0xFF] ^ (crc >> 8); + crc = crc_table[ ( crc ^ i_input[ i ] ) & 0xFF ] ^ ( crc >> 8 ); } return crc; -} + } -uint32_t rev_compute(const std::string& i_input, uint32_t init_crc) -{ - auto& rev_crc_table = internal::get_rev_crc_table(); + uint32_t rev_compute( const std::string& i_input, uint32_t init_crc ) + { + auto& rev_crc_table = internal::get_rev_crc_table(); auto crc = init_crc; const auto input_size = i_input.size(); // Reverse crc - for(auto i = input_size; i > 0; --i) + for( auto i = input_size; i > 0; --i ) { - crc = rev_crc_table[crc >> 24] ^ ((crc << 8) & 0xFFFFFF00) ^ i_input[input_size - i - 1]; + crc = rev_crc_table[ crc >> 24 ] ^ ( ( crc << 8 ) & 0xFFFFFF00 ) ^ i_input[ input_size - i - 1 ]; } // Compute the 4 bytes needed for this init_crc - for (auto i = 0; i < 4; ++i) + for( auto i = 0; i < 4; ++i ) { - crc = rev_crc_table[crc >> 24] ^ ((crc << 8) & 0xFFFFFF00); + crc = rev_crc_table[ crc >> 24 ] ^ ( ( crc << 8 ) & 0xFFFFFF00 ); } return crc; -} + } -void generate_hashes_1(std::string& i_format, const uint32_t i_first_index, std::vector& o_hashes) -{ - char* str = const_cast(i_format.data()); - const uint32_t str_size = i_format.size(); + void generate_hashes_1( std::string& i_format, const uint32_t i_first_index, std::vector< uint32_t >& o_hashes ) + { + char* str = const_cast(i_format.data()); + const uint32_t str_size = i_format.size(); - o_hashes.resize(10000); + o_hashes.resize( 10000 ); - uint32_t i = 0; - for (char a = '0'; a <= '9'; ++a) - { - str[i_first_index] = a; - for (char b = '0'; b <= '9'; ++b) - { - str[i_first_index + 1] = b; - for (char c = '0'; c <= '9'; ++c) - { - str[i_first_index + 2] = c; - for (char d = '0'; d <= '9'; ++d) - { - str[i_first_index + 3] = d; - o_hashes[i] = ::crc32(0, reinterpret_cast(&(str[0])), str_size) ^ 0xFFFFFFFF; - ++i; - } - } - } - } -} + uint32_t i = 0; + for( char a = '0'; a <= '9'; ++a ) + { + str[ i_first_index ] = a; + for( char b = '0'; b <= '9'; ++b ) + { + str[ i_first_index + 1 ] = b; + for( char c = '0'; c <= '9'; ++c ) + { + str[ i_first_index + 2 ] = c; + for( char d = '0'; d <= '9'; ++d ) + { + str[ i_first_index + 3 ] = d; + o_hashes[ i ] = ::crc32( 0, reinterpret_cast(&( str[ 0 ] )), str_size ) ^ 0xFFFFFFFF; + ++i; + } + } + } + } + } -void generate_hashes_2(std::string& i_format, const uint32_t i_first_index, const uint32_t i_second_index, std::vector& o_hashes) -{ - char* str = const_cast(i_format.data()); - const uint32_t str_size = i_format.size(); + void generate_hashes_2( std::string& i_format, const uint32_t i_first_index, const uint32_t i_second_index, + std::vector< uint32_t >& o_hashes ) + { + char* str = const_cast(i_format.data()); + const uint32_t str_size = i_format.size(); - o_hashes.resize(100000000); + o_hashes.resize( 100000000 ); - uint32_t i = 0; - for (char a = '0'; a <= '9'; ++a) - { - str[i_first_index] = a; - for (char b = '0'; b <= '9'; ++b) - { - str[i_first_index + 1] = b; - for (char c = '0'; c <= '9'; ++c) - { - str[i_first_index + 2] = c; - for (char d = '0'; d <= '9'; ++d) - { - str[i_first_index + 3] = d; - for (char e = '0'; e <= '9'; ++e) - { - str[i_second_index] = e; - for (char f = '0'; f <= '9'; ++f) - { - str[i_second_index + 1] = f; - for (char g = '0'; g <= '9'; ++g) - { - str[i_second_index + 2] = g; - for (char h = '0'; h <= '9'; ++h) - { - str[i_second_index + 3] = h; - o_hashes[i] = ::crc32(0, reinterpret_cast(&(str[0])), str_size) ^ 0xFFFFFFFF; - ++i; - } - } - } - } - } - } - } - } -} + uint32_t i = 0; + for( char a = '0'; a <= '9'; ++a ) + { + str[ i_first_index ] = a; + for( char b = '0'; b <= '9'; ++b ) + { + str[ i_first_index + 1 ] = b; + for( char c = '0'; c <= '9'; ++c ) + { + str[ i_first_index + 2 ] = c; + for( char d = '0'; d <= '9'; ++d ) + { + str[ i_first_index + 3 ] = d; + for( char e = '0'; e <= '9'; ++e ) + { + str[ i_second_index ] = e; + for( char f = '0'; f <= '9'; ++f ) + { + str[ i_second_index + 1 ] = f; + for( char g = '0'; g <= '9'; ++g ) + { + str[ i_second_index + 2 ] = g; + for( char h = '0'; h <= '9'; ++h ) + { + str[ i_second_index + 3 ] = h; + o_hashes[ i ] = ::crc32( 0, reinterpret_cast(&( str[ 0 ] )), str_size ) ^ 0xFFFFFFFF; + ++i; + } + } + } + } + } + } + } + } + } } -} -} diff --git a/deps/datReader/crc32.h b/deps/datReader/crc32.h index e8c59286..7d4894b7 100644 --- a/deps/datReader/crc32.h +++ b/deps/datReader/crc32.h @@ -5,9 +5,8 @@ #include #include -namespace xiv { -namespace utils { -namespace crc32 { +namespace xiv::utils::crc32 +{ // Normal crc32 computation from a given intial crc value, use zlib.crc32 instead, the final XOR 0xFFFFFFFF is not done uint32_t compute( const std::string& i_input, uint32_t init_crc = 0xFFFFFFFF ); @@ -17,10 +16,10 @@ namespace crc32 { uint32_t rev_compute( const std::string& i_input, uint32_t init_crc = 0 ); void generate_hashes_1( std::string& i_format, const uint32_t i_first_index, std::vector< uint32_t >& o_hashes ); - void generate_hashes_2( std::string& i_format, const uint32_t i_first_index, const uint32_t i_second_index, std::vector< uint32_t >& o_hashes ); -} -} + void generate_hashes_2( std::string& i_format, const uint32_t i_first_index, const uint32_t i_second_index, + std::vector< uint32_t >& o_hashes ); + } #endif // XIV_UTILS_CRC32_H diff --git a/deps/datReader/stream.cpp b/deps/datReader/stream.cpp index 0a38fbfc..b9019a6a 100644 --- a/deps/datReader/stream.cpp +++ b/deps/datReader/stream.cpp @@ -4,13 +4,7 @@ #include #include -namespace xiv -{ -namespace utils -{ -namespace stream +namespace xiv::utils::stream { } -} -} diff --git a/deps/datReader/stream.h b/deps/datReader/stream.h index c0b98074..37b9f28e 100644 --- a/deps/datReader/stream.h +++ b/deps/datReader/stream.h @@ -5,23 +5,17 @@ #include #include -namespace xiv +namespace xiv::utils::stream { -namespace utils -{ -namespace stream -{ -template > -class vectorwrapbuf : public std::basic_streambuf -{ -public: - vectorwrapbuf(std::vector &vec) + template< typename CharT, typename TraitsT = std::char_traits< CharT > > + class vectorwrapbuf : + public std::basic_streambuf< CharT, TraitsT > + { + public: + vectorwrapbuf( std::vector< CharT >& vec ) { - this->setg(vec.data(), vec.data(), vec.data() + vec.size()); + this->setg( vec.data(), vec.data(), vec.data() + vec.size() ); } -}; + }; } -} -} - #endif // XIV_UTILS_STREAM_H diff --git a/deps/datReader/zlib.cpp b/deps/datReader/zlib.cpp index 9f75d929..29396b99 100644 --- a/deps/datReader/zlib.cpp +++ b/deps/datReader/zlib.cpp @@ -4,32 +4,28 @@ #include #include -namespace xiv -{ -namespace utils -{ -namespace zlib +namespace xiv::utils::zlib { -void compress(const std::vector& in, std::vector& out) -{ + void compress( const std::vector< char >& in, std::vector< char >& out ) + { // Fetching upper bound for out size - auto out_size = compressBound(in.size()); - out.resize(out_size); + auto out_size = compressBound( in.size() ); + out.resize( out_size ); - auto ret = compress2(reinterpret_cast(out.data()), &out_size, - reinterpret_cast(in.data()), in.size(), Z_BEST_COMPRESSION); + auto ret = compress2( reinterpret_cast(out.data()), &out_size, + reinterpret_cast(in.data()), in.size(), Z_BEST_COMPRESSION ); - if (ret != Z_OK) + if( ret != Z_OK ) { - throw std::runtime_error("Error at zlib uncompress: " + std::to_string(ret)); + throw std::runtime_error( "Error at zlib uncompress: " + std::to_string( ret ) ); } - out.resize(out_size); -} + out.resize( out_size ); + } -void no_header_decompress(uint8_t* in, uint32_t in_size, uint8_t* out, uint32_t out_size) -{ + void no_header_decompress( uint8_t* in, uint32_t in_size, uint8_t* out, uint32_t out_size ) + { z_stream strm; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; @@ -38,10 +34,10 @@ void no_header_decompress(uint8_t* in, uint32_t in_size, uint8_t* out, uint32_t strm.next_in = Z_NULL; // Init with -15 because we do not have header in this compressed data - auto ret = inflateInit2(&strm, -15); - if (ret != Z_OK) + auto ret = inflateInit2( &strm, -15 ); + if( ret != Z_OK ) { - throw std::runtime_error("Error at zlib init: " + std::to_string(ret)); + throw std::runtime_error( "Error at zlib init: " + std::to_string( ret ) ); } // Set pointers to the right addresses @@ -50,16 +46,14 @@ void no_header_decompress(uint8_t* in, uint32_t in_size, uint8_t* out, uint32_t strm.next_out = out; // Effectively decompress data - ret = inflate(&strm, Z_NO_FLUSH); - if (ret != Z_STREAM_END) + ret = inflate( &strm, Z_NO_FLUSH ); + if( ret != Z_STREAM_END ) { - throw std::runtime_error("Error at zlib inflate: " + std::to_string(ret)); + throw std::runtime_error( "Error at zlib inflate: " + std::to_string( ret ) ); } // Clean up - inflateEnd(&strm); -} + inflateEnd( &strm ); + } } -} -} diff --git a/deps/datReader/zlib.h b/deps/datReader/zlib.h index 942efaf9..7c93a5a3 100644 --- a/deps/datReader/zlib.h +++ b/deps/datReader/zlib.h @@ -4,18 +4,13 @@ #include #include -namespace xiv -{ -namespace utils -{ -namespace zlib +namespace xiv::utils::zlib { -void compress(const std::vector& in, std::vector& out); -void no_header_decompress(uint8_t* in, uint32_t in_size, uint8_t* out, uint32_t out_size); + void compress( const std::vector< char >& in, std::vector< char >& out ); + + void no_header_decompress( uint8_t* in, uint32_t in_size, uint8_t* out, uint32_t out_size ); -} -} } #endif // XIV_UTILS_ZLIB_H diff --git a/deps/ffxiv-actions b/deps/ffxiv-actions new file mode 160000 index 00000000..dde9b5bb --- /dev/null +++ b/deps/ffxiv-actions @@ -0,0 +1 @@ +Subproject commit dde9b5bbfc7c0197de0b0b49b982a0ee9fe761ab diff --git a/deps/mysqlConnector/Connection.cpp b/deps/mysqlConnector/Connection.cpp index 9b317dc9..df6a28f0 100644 --- a/deps/mysqlConnector/Connection.cpp +++ b/deps/mysqlConnector/Connection.cpp @@ -4,6 +4,10 @@ #include "PreparedStatement.h" #include +#ifdef _MSC_VER + // fixes compile error when compiling with vs2019 + #include +#endif #include Mysql::Connection::Connection( std::shared_ptr< MySqlBase > pBase, diff --git a/deps/mysqlConnector/Connection.h b/deps/mysqlConnector/Connection.h index 1283ead5..43cc6e07 100644 --- a/deps/mysqlConnector/Connection.h +++ b/deps/mysqlConnector/Connection.h @@ -3,6 +3,8 @@ #include #include +#include + #include "MysqlCommon.h" typedef struct st_mysql MYSQL; diff --git a/deps/stackwalker/CMakeLists.txt b/deps/stackwalker/CMakeLists.txt deleted file mode 100644 index d0111465..00000000 --- a/deps/stackwalker/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.0.2) -project(Sapphire) - -if( WIN32 ) - - file( GLOB STACKWALKER_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h*" ) - file( GLOB STACKWALKER_SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.c*" ) - - add_library( stackwalker ${STACKWALKER_INCLUDE_FILES} ${STACKWALKER_SOURCE_FILES} ) - -endif() \ No newline at end of file diff --git a/deps/stackwalker/StackWalker.cpp b/deps/stackwalker/StackWalker.cpp deleted file mode 100644 index 7008ac67..00000000 --- a/deps/stackwalker/StackWalker.cpp +++ /dev/null @@ -1,1469 +0,0 @@ -/********************************************************************** - * - * StackWalker.cpp - * https://github.com/JochenKalmbach/StackWalker - * - * Old location: http://stackwalker.codeplex.com/ - * - * - * History: - * 2005-07-27 v1 - First public release on http://www.codeproject.com/ - * http://www.codeproject.com/threads/StackWalker.asp - * 2005-07-28 v2 - Changed the params of the constructor and ShowCallstack - * (to simplify the usage) - * 2005-08-01 v3 - Changed to use 'CONTEXT_FULL' instead of CONTEXT_ALL - * (should also be enough) - * - Changed to compile correctly with the PSDK of VC7.0 - * (GetFileVersionInfoSizeA and GetFileVersionInfoA is wrongly defined: - * it uses LPSTR instead of LPCSTR as first parameter) - * - Added declarations to support VC5/6 without using 'dbghelp.h' - * - Added a 'pUserData' member to the ShowCallstack function and the - * PReadProcessMemoryRoutine declaration (to pass some user-defined data, - * which can be used in the readMemoryFunction-callback) - * 2005-08-02 v4 - OnSymInit now also outputs the OS-Version by default - * - Added example for doing an exception-callstack-walking in main.cpp - * (thanks to owillebo: http://www.codeproject.com/script/profile/whos_who.asp?id=536268) - * 2005-08-05 v5 - Removed most Lint (http://www.gimpel.com/) errors... thanks to Okko Willeboordse! - * 2008-08-04 v6 - Fixed Bug: Missing LEAK-end-tag - * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=2502890#xx2502890xx - * Fixed Bug: Compiled with "WIN32_LEAN_AND_MEAN" - * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=1824718#xx1824718xx - * Fixed Bug: Compiling with "/Wall" - * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=2638243#xx2638243xx - * Fixed Bug: Now checking SymUseSymSrv - * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=1388979#xx1388979xx - * Fixed Bug: Support for recursive function calls - * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=1434538#xx1434538xx - * Fixed Bug: Missing FreeLibrary call in "GetModuleListTH32" - * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=1326923#xx1326923xx - * Fixed Bug: SymDia is number 7, not 9! - * 2008-09-11 v7 For some (undocumented) reason, dbhelp.h is needing a packing of 8! - * Thanks to Teajay which reported the bug... - * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=2718933#xx2718933xx - * 2008-11-27 v8 Debugging Tools for Windows are now stored in a different directory - * Thanks to Luiz Salamon which reported this "bug"... - * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=2822736#xx2822736xx - * 2009-04-10 v9 License slightly corrected ( replaced) - * 2009-11-01 v10 Moved to http://stackwalker.codeplex.com/ - * 2009-11-02 v11 Now try to use IMAGEHLP_MODULE64_V3 if available - * 2010-04-15 v12 Added support for VS2010 RTM - * 2010-05-25 v13 Now using secure MyStrcCpy. Thanks to luke.simon: - * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=3477467#xx3477467xx - * 2013-01-07 v14 Runtime Check Error VS2010 Debug Builds fixed: - * http://stackwalker.codeplex.com/workitem/10511 - * - * - * LICENSE (http://www.opensource.org/licenses/bsd-license.php) - * - * Copyright (c) 2005-2013, Jochen Kalmbach - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * Neither the name of Jochen Kalmbach nor the names of its contributors may be - * used to endorse or promote products derived from this software without - * specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - **********************************************************************/ - -#include "StackWalker.h" - -#include -#include -#include -#include -#pragma comment(lib, "version.lib") // for "VerQueryValue" -#pragma warning(disable : 4826) - - -// If VC7 and later, then use the shipped 'dbghelp.h'-file -#pragma pack(push, 8) -#if _MSC_VER >= 1300 -#include -#else -// inline the important dbghelp.h-declarations... -typedef enum -{ - SymNone = 0, - SymCoff, - SymCv, - SymPdb, - SymExport, - SymDeferred, - SymSym, - SymDia, - SymVirtual, - NumSymTypes -} SYM_TYPE; -typedef struct _IMAGEHLP_LINE64 -{ - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE64) - PVOID Key; // internal - DWORD LineNumber; // line number in file - PCHAR FileName; // full filename - DWORD64 Address; // first instruction of line -} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; -typedef struct _IMAGEHLP_MODULE64 -{ - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) - DWORD64 BaseOfImage; // base load address of module - DWORD ImageSize; // virtual size of the loaded module - DWORD TimeDateStamp; // date/time stamp from pe header - DWORD CheckSum; // checksum from the pe header - DWORD NumSyms; // number of symbols in the symbol table - SYM_TYPE SymType; // type of symbols loaded - CHAR ModuleName[32]; // module name - CHAR ImageName[256]; // image name - CHAR LoadedImageName[256]; // symbol file name -} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; -typedef struct _IMAGEHLP_SYMBOL64 -{ - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL64) - DWORD64 Address; // virtual address including dll base address - DWORD Size; // estimated size of symbol, can be zero - DWORD Flags; // info about the symbols, see the SYMF defines - DWORD MaxNameLength; // maximum size of symbol name in 'Name' - CHAR Name[1]; // symbol name (null terminated string) -} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; -typedef enum -{ - AddrMode1616, - AddrMode1632, - AddrModeReal, - AddrModeFlat -} ADDRESS_MODE; -typedef struct _tagADDRESS64 -{ - DWORD64 Offset; - WORD Segment; - ADDRESS_MODE Mode; -} ADDRESS64, *LPADDRESS64; -typedef struct _KDHELP64 -{ - DWORD64 Thread; - DWORD ThCallbackStack; - DWORD ThCallbackBStore; - DWORD NextCallback; - DWORD FramePointer; - DWORD64 KiCallUserMode; - DWORD64 KeUserCallbackDispatcher; - DWORD64 SystemRangeStart; - DWORD64 Reserved[8]; -} KDHELP64, *PKDHELP64; -typedef struct _tagSTACKFRAME64 -{ - ADDRESS64 AddrPC; // program counter - ADDRESS64 AddrReturn; // return address - ADDRESS64 AddrFrame; // frame pointer - ADDRESS64 AddrStack; // stack pointer - ADDRESS64 AddrBStore; // backing store pointer - PVOID FuncTableEntry; // pointer to pdata/fpo or NULL - DWORD64 Params[4]; // possible arguments to the function - BOOL Far; // WOW far call - BOOL Virtual; // is this a virtual frame? - DWORD64 Reserved[3]; - KDHELP64 KdHelp; -} STACKFRAME64, *LPSTACKFRAME64; -typedef BOOL(__stdcall* PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE hProcess, - DWORD64 qwBaseAddress, - PVOID lpBuffer, - DWORD nSize, - LPDWORD lpNumberOfBytesRead); -typedef PVOID(__stdcall* PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE hProcess, DWORD64 AddrBase); -typedef DWORD64(__stdcall* PGET_MODULE_BASE_ROUTINE64)(HANDLE hProcess, DWORD64 Address); -typedef DWORD64(__stdcall* PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE hProcess, - HANDLE hThread, - LPADDRESS64 lpaddr); - -// clang-format off -#define SYMOPT_CASE_INSENSITIVE 0x00000001 -#define SYMOPT_UNDNAME 0x00000002 -#define SYMOPT_DEFERRED_LOADS 0x00000004 -#define SYMOPT_NO_CPP 0x00000008 -#define SYMOPT_LOAD_LINES 0x00000010 -#define SYMOPT_OMAP_FIND_NEAREST 0x00000020 -#define SYMOPT_LOAD_ANYTHING 0x00000040 -#define SYMOPT_IGNORE_CVREC 0x00000080 -#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100 -#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 -#define SYMOPT_EXACT_SYMBOLS 0x00000400 -#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 -#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 -#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 -#define SYMOPT_PUBLICS_ONLY 0x00004000 -#define SYMOPT_NO_PUBLICS 0x00008000 -#define SYMOPT_AUTO_PUBLICS 0x00010000 -#define SYMOPT_NO_IMAGE_SEARCH 0x00020000 -#define SYMOPT_SECURE 0x00040000 -#define SYMOPT_DEBUG 0x80000000 -#define UNDNAME_COMPLETE (0x0000) // Enable full undecoration -#define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for primary declaration; -// clang-format on - -#endif // _MSC_VER < 1300 -#pragma pack(pop) - -// Some missing defines (for VC5/6): -#ifndef INVALID_FILE_ATTRIBUTES -#define INVALID_FILE_ATTRIBUTES ((DWORD)-1) -#endif - -// secure-CRT_functions are only available starting with VC8 -#if _MSC_VER < 1400 -#define strcpy_s(dst, len, src) strcpy(dst, src) -#define strncpy_s(dst, len, src, maxLen) strncpy(dst, len, src) -#define strcat_s(dst, len, src) strcat(dst, src) -#define _snprintf_s _snprintf -#define _tcscat_s _tcscat -#endif - -static void MyStrCpy(char* szDest, size_t nMaxDestSize, const char* szSrc) -{ - if (nMaxDestSize <= 0) - return; - strncpy_s(szDest, nMaxDestSize, szSrc, _TRUNCATE); - // INFO: _TRUNCATE will ensure that it is null-terminated; - // but with older compilers (<1400) it uses "strncpy" and this does not!) - szDest[nMaxDestSize - 1] = 0; -} // MyStrCpy - -// Normally it should be enough to use 'CONTEXT_FULL' (better would be 'CONTEXT_ALL') -#define USED_CONTEXT_FLAGS CONTEXT_FULL - -class StackWalkerInternal -{ -public: - StackWalkerInternal(StackWalker* parent, HANDLE hProcess) - { - m_parent = parent; - m_hDbhHelp = NULL; - pSC = NULL; - m_hProcess = hProcess; - m_szSymPath = NULL; - pSFTA = NULL; - pSGLFA = NULL; - pSGMB = NULL; - pSGMI = NULL; - pSGO = NULL; - pSGSFA = NULL; - pSI = NULL; - pSLM = NULL; - pSSO = NULL; - pSW = NULL; - pUDSN = NULL; - pSGSP = NULL; - } - ~StackWalkerInternal() - { - if (pSC != NULL) - pSC(m_hProcess); // SymCleanup - if (m_hDbhHelp != NULL) - FreeLibrary(m_hDbhHelp); - m_hDbhHelp = NULL; - m_parent = NULL; - if (m_szSymPath != NULL) - free(m_szSymPath); - m_szSymPath = NULL; - } - BOOL Init(LPCSTR szSymPath) - { - if (m_parent == NULL) - return FALSE; - // Dynamically load the Entry-Points for dbghelp.dll: - // First try to load the newest one from - TCHAR szTemp[4096]; - // But before we do this, we first check if the ".local" file exists - if (GetModuleFileName(NULL, szTemp, 4096) > 0) - { - _tcscat_s(szTemp, _T(".local")); - if (GetFileAttributes(szTemp) == INVALID_FILE_ATTRIBUTES) - { - // ".local" file does not exist, so we can try to load the dbghelp.dll from the "Debugging Tools for Windows" - // Ok, first try the new path according to the architecture: -#ifdef _M_IX86 - if ((m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0)) - { - _tcscat_s(szTemp, _T("\\Debugging Tools for Windows (x86)\\dbghelp.dll")); - // now check if the file exists: - if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES) - { - m_hDbhHelp = LoadLibrary(szTemp); - } - } -#elif _M_X64 - if ((m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0)) - { - _tcscat_s(szTemp, _T("\\Debugging Tools for Windows (x64)\\dbghelp.dll")); - // now check if the file exists: - if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES) - { - m_hDbhHelp = LoadLibrary(szTemp); - } - } -#elif _M_IA64 - if ((m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0)) - { - _tcscat_s(szTemp, _T("\\Debugging Tools for Windows (ia64)\\dbghelp.dll")); - // now check if the file exists: - if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES) - { - m_hDbhHelp = LoadLibrary(szTemp); - } - } -#endif - // If still not found, try the old directories... - if ((m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0)) - { - _tcscat_s(szTemp, _T("\\Debugging Tools for Windows\\dbghelp.dll")); - // now check if the file exists: - if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES) - { - m_hDbhHelp = LoadLibrary(szTemp); - } - } -#if defined _M_X64 || defined _M_IA64 - // Still not found? Then try to load the (old) 64-Bit version: - if ((m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0)) - { - _tcscat_s(szTemp, _T("\\Debugging Tools for Windows 64-Bit\\dbghelp.dll")); - if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES) - { - m_hDbhHelp = LoadLibrary(szTemp); - } - } -#endif - } - } - if (m_hDbhHelp == NULL) // if not already loaded, try to load a default-one - m_hDbhHelp = LoadLibrary(_T("dbghelp.dll")); - if (m_hDbhHelp == NULL) - return FALSE; - pSI = (tSI)GetProcAddress(m_hDbhHelp, "SymInitialize"); - pSC = (tSC)GetProcAddress(m_hDbhHelp, "SymCleanup"); - - pSW = (tSW)GetProcAddress(m_hDbhHelp, "StackWalk64"); - pSGO = (tSGO)GetProcAddress(m_hDbhHelp, "SymGetOptions"); - pSSO = (tSSO)GetProcAddress(m_hDbhHelp, "SymSetOptions"); - - pSFTA = (tSFTA)GetProcAddress(m_hDbhHelp, "SymFunctionTableAccess64"); - pSGLFA = (tSGLFA)GetProcAddress(m_hDbhHelp, "SymGetLineFromAddr64"); - pSGMB = (tSGMB)GetProcAddress(m_hDbhHelp, "SymGetModuleBase64"); - pSGMI = (tSGMI)GetProcAddress(m_hDbhHelp, "SymGetModuleInfo64"); - pSGSFA = (tSGSFA)GetProcAddress(m_hDbhHelp, "SymGetSymFromAddr64"); - pUDSN = (tUDSN)GetProcAddress(m_hDbhHelp, "UnDecorateSymbolName"); - pSLM = (tSLM)GetProcAddress(m_hDbhHelp, "SymLoadModule64"); - pSGSP = (tSGSP)GetProcAddress(m_hDbhHelp, "SymGetSearchPath"); - - if (pSC == NULL || pSFTA == NULL || pSGMB == NULL || pSGMI == NULL || pSGO == NULL || - pSGSFA == NULL || pSI == NULL || pSSO == NULL || pSW == NULL || pUDSN == NULL || - pSLM == NULL) - { - FreeLibrary(m_hDbhHelp); - m_hDbhHelp = NULL; - pSC = NULL; - return FALSE; - } - - // SymInitialize - if (szSymPath != NULL) - m_szSymPath = _strdup(szSymPath); - if (this->pSI(m_hProcess, m_szSymPath, FALSE) == FALSE) - this->m_parent->OnDbgHelpErr("SymInitialize", GetLastError(), 0); - - DWORD symOptions = this->pSGO(); // SymGetOptions - symOptions |= SYMOPT_LOAD_LINES; - symOptions |= SYMOPT_FAIL_CRITICAL_ERRORS; - //symOptions |= SYMOPT_NO_PROMPTS; - // SymSetOptions - symOptions = this->pSSO(symOptions); - - char buf[StackWalker::STACKWALK_MAX_NAMELEN] = {0}; - if (this->pSGSP != NULL) - { - if (this->pSGSP(m_hProcess, buf, StackWalker::STACKWALK_MAX_NAMELEN) == FALSE) - this->m_parent->OnDbgHelpErr("SymGetSearchPath", GetLastError(), 0); - } - char szUserName[1024] = {0}; - DWORD dwSize = 1024; - GetUserNameA(szUserName, &dwSize); - this->m_parent->OnSymInit(buf, symOptions, szUserName); - - return TRUE; - } - - StackWalker* m_parent; - - HMODULE m_hDbhHelp; - HANDLE m_hProcess; - LPSTR m_szSymPath; - -#pragma pack(push, 8) - typedef struct IMAGEHLP_MODULE64_V3 - { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) - DWORD64 BaseOfImage; // base load address of module - DWORD ImageSize; // virtual size of the loaded module - DWORD TimeDateStamp; // date/time stamp from pe header - DWORD CheckSum; // checksum from the pe header - DWORD NumSyms; // number of symbols in the symbol table - SYM_TYPE SymType; // type of symbols loaded - CHAR ModuleName[32]; // module name - CHAR ImageName[256]; // image name - CHAR LoadedImageName[256]; // symbol file name - // new elements: 07-Jun-2002 - CHAR LoadedPdbName[256]; // pdb file name - DWORD CVSig; // Signature of the CV record in the debug directories - CHAR CVData[MAX_PATH * 3]; // Contents of the CV record - DWORD PdbSig; // Signature of PDB - GUID PdbSig70; // Signature of PDB (VC 7 and up) - DWORD PdbAge; // DBI age of pdb - BOOL PdbUnmatched; // loaded an unmatched pdb - BOOL DbgUnmatched; // loaded an unmatched dbg - BOOL LineNumbers; // we have line number information - BOOL GlobalSymbols; // we have internal symbol information - BOOL TypeInfo; // we have type information - // new elements: 17-Dec-2003 - BOOL SourceIndexed; // pdb supports source server - BOOL Publics; // contains public symbols - }; - - typedef struct IMAGEHLP_MODULE64_V2 - { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) - DWORD64 BaseOfImage; // base load address of module - DWORD ImageSize; // virtual size of the loaded module - DWORD TimeDateStamp; // date/time stamp from pe header - DWORD CheckSum; // checksum from the pe header - DWORD NumSyms; // number of symbols in the symbol table - SYM_TYPE SymType; // type of symbols loaded - CHAR ModuleName[32]; // module name - CHAR ImageName[256]; // image name - CHAR LoadedImageName[256]; // symbol file name - }; -#pragma pack(pop) - - // SymCleanup() - typedef BOOL(__stdcall* tSC)(IN HANDLE hProcess); - tSC pSC; - - // SymFunctionTableAccess64() - typedef PVOID(__stdcall* tSFTA)(HANDLE hProcess, DWORD64 AddrBase); - tSFTA pSFTA; - - // SymGetLineFromAddr64() - typedef BOOL(__stdcall* tSGLFA)(IN HANDLE hProcess, - IN DWORD64 dwAddr, - OUT PDWORD pdwDisplacement, - OUT PIMAGEHLP_LINE64 Line); - tSGLFA pSGLFA; - - // SymGetModuleBase64() - typedef DWORD64(__stdcall* tSGMB)(IN HANDLE hProcess, IN DWORD64 dwAddr); - tSGMB pSGMB; - - // SymGetModuleInfo64() - typedef BOOL(__stdcall* tSGMI)(IN HANDLE hProcess, - IN DWORD64 dwAddr, - OUT IMAGEHLP_MODULE64_V3* ModuleInfo); - tSGMI pSGMI; - - // SymGetOptions() - typedef DWORD(__stdcall* tSGO)(VOID); - tSGO pSGO; - - // SymGetSymFromAddr64() - typedef BOOL(__stdcall* tSGSFA)(IN HANDLE hProcess, - IN DWORD64 dwAddr, - OUT PDWORD64 pdwDisplacement, - OUT PIMAGEHLP_SYMBOL64 Symbol); - tSGSFA pSGSFA; - - // SymInitialize() - typedef BOOL(__stdcall* tSI)(IN HANDLE hProcess, IN PSTR UserSearchPath, IN BOOL fInvadeProcess); - tSI pSI; - - // SymLoadModule64() - typedef DWORD64(__stdcall* tSLM)(IN HANDLE hProcess, - IN HANDLE hFile, - IN PSTR ImageName, - IN PSTR ModuleName, - IN DWORD64 BaseOfDll, - IN DWORD SizeOfDll); - tSLM pSLM; - - // SymSetOptions() - typedef DWORD(__stdcall* tSSO)(IN DWORD SymOptions); - tSSO pSSO; - - // StackWalk64() - typedef BOOL(__stdcall* tSW)(DWORD MachineType, - HANDLE hProcess, - HANDLE hThread, - LPSTACKFRAME64 StackFrame, - PVOID ContextRecord, - PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, - PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, - PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, - PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress); - tSW pSW; - - // UnDecorateSymbolName() - typedef DWORD(__stdcall WINAPI* tUDSN)(PCSTR DecoratedName, - PSTR UnDecoratedName, - DWORD UndecoratedLength, - DWORD Flags); - tUDSN pUDSN; - - typedef BOOL(__stdcall WINAPI* tSGSP)(HANDLE hProcess, PSTR SearchPath, DWORD SearchPathLength); - tSGSP pSGSP; - -private: -// **************************************** ToolHelp32 ************************ -#define MAX_MODULE_NAME32 255 -#define TH32CS_SNAPMODULE 0x00000008 -#pragma pack(push, 8) - typedef struct tagMODULEENTRY32 - { - DWORD dwSize; - DWORD th32ModuleID; // This module - DWORD th32ProcessID; // owning process - DWORD GlblcntUsage; // Global usage count on the module - DWORD ProccntUsage; // Module usage count in th32ProcessID's context - BYTE* modBaseAddr; // Base address of module in th32ProcessID's context - DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr - HMODULE hModule; // The hModule of this module in th32ProcessID's context - char szModule[MAX_MODULE_NAME32 + 1]; - char szExePath[MAX_PATH]; - } MODULEENTRY32; - typedef MODULEENTRY32* PMODULEENTRY32; - typedef MODULEENTRY32* LPMODULEENTRY32; -#pragma pack(pop) - - BOOL GetModuleListTH32(HANDLE hProcess, DWORD pid) - { - // CreateToolhelp32Snapshot() - typedef HANDLE(__stdcall * tCT32S)(DWORD dwFlags, DWORD th32ProcessID); - // Module32First() - typedef BOOL(__stdcall * tM32F)(HANDLE hSnapshot, LPMODULEENTRY32 lpme); - // Module32Next() - typedef BOOL(__stdcall * tM32N)(HANDLE hSnapshot, LPMODULEENTRY32 lpme); - - // try both dlls... - const TCHAR* dllname[] = {_T("kernel32.dll"), _T("tlhelp32.dll")}; - HINSTANCE hToolhelp = NULL; - tCT32S pCT32S = NULL; - tM32F pM32F = NULL; - tM32N pM32N = NULL; - - HANDLE hSnap; - MODULEENTRY32 me; - me.dwSize = sizeof(me); - BOOL keepGoing; - size_t i; - - for (i = 0; i < (sizeof(dllname) / sizeof(dllname[0])); i++) - { - hToolhelp = LoadLibrary(dllname[i]); - if (hToolhelp == NULL) - continue; - pCT32S = (tCT32S)GetProcAddress(hToolhelp, "CreateToolhelp32Snapshot"); - pM32F = (tM32F)GetProcAddress(hToolhelp, "Module32First"); - pM32N = (tM32N)GetProcAddress(hToolhelp, "Module32Next"); - if ((pCT32S != NULL) && (pM32F != NULL) && (pM32N != NULL)) - break; // found the functions! - FreeLibrary(hToolhelp); - hToolhelp = NULL; - } - - if (hToolhelp == NULL) - return FALSE; - - hSnap = pCT32S(TH32CS_SNAPMODULE, pid); - if (hSnap == (HANDLE)-1) - { - FreeLibrary(hToolhelp); - return FALSE; - } - - keepGoing = !!pM32F(hSnap, &me); - int cnt = 0; - while (keepGoing) - { - this->LoadModule(hProcess, me.szExePath, me.szModule, (DWORD64)me.modBaseAddr, - me.modBaseSize); - cnt++; - keepGoing = !!pM32N(hSnap, &me); - } - CloseHandle(hSnap); - FreeLibrary(hToolhelp); - if (cnt <= 0) - return FALSE; - return TRUE; - } // GetModuleListTH32 - - // **************************************** PSAPI ************************ - typedef struct _MODULEINFO - { - LPVOID lpBaseOfDll; - DWORD SizeOfImage; - LPVOID EntryPoint; - } MODULEINFO, *LPMODULEINFO; - - BOOL GetModuleListPSAPI(HANDLE hProcess) - { - // EnumProcessModules() - typedef BOOL(__stdcall * tEPM)(HANDLE hProcess, HMODULE * lphModule, DWORD cb, - LPDWORD lpcbNeeded); - // GetModuleFileNameEx() - typedef DWORD(__stdcall * tGMFNE)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename, - DWORD nSize); - // GetModuleBaseName() - typedef DWORD(__stdcall * tGMBN)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename, - DWORD nSize); - // GetModuleInformation() - typedef BOOL(__stdcall * tGMI)(HANDLE hProcess, HMODULE hModule, LPMODULEINFO pmi, DWORD nSize); - - HINSTANCE hPsapi; - tEPM pEPM; - tGMFNE pGMFNE; - tGMBN pGMBN; - tGMI pGMI; - - DWORD i; - //ModuleEntry e; - DWORD cbNeeded; - MODULEINFO mi; - HMODULE* hMods = 0; - char* tt = NULL; - char* tt2 = NULL; - const SIZE_T TTBUFLEN = 8096; - int cnt = 0; - - hPsapi = LoadLibrary(_T("psapi.dll")); - if (hPsapi == NULL) - return FALSE; - - pEPM = (tEPM)GetProcAddress(hPsapi, "EnumProcessModules"); - pGMFNE = (tGMFNE)GetProcAddress(hPsapi, "GetModuleFileNameExA"); - pGMBN = (tGMFNE)GetProcAddress(hPsapi, "GetModuleBaseNameA"); - pGMI = (tGMI)GetProcAddress(hPsapi, "GetModuleInformation"); - if ((pEPM == NULL) || (pGMFNE == NULL) || (pGMBN == NULL) || (pGMI == NULL)) - { - // we couldn't find all functions - FreeLibrary(hPsapi); - return FALSE; - } - - hMods = (HMODULE*)malloc(sizeof(HMODULE) * (TTBUFLEN / sizeof(HMODULE))); - tt = (char*)malloc(sizeof(char) * TTBUFLEN); - tt2 = (char*)malloc(sizeof(char) * TTBUFLEN); - if ((hMods == NULL) || (tt == NULL) || (tt2 == NULL)) - goto cleanup; - - if (!pEPM(hProcess, hMods, TTBUFLEN, &cbNeeded)) - { - //_ftprintf(fLogFile, _T("%lu: EPM failed, GetLastError = %lu\n"), g_dwShowCount, gle ); - goto cleanup; - } - - if (cbNeeded > TTBUFLEN) - { - //_ftprintf(fLogFile, _T("%lu: More than %lu module handles. Huh?\n"), g_dwShowCount, lenof( hMods ) ); - goto cleanup; - } - - for (i = 0; i < cbNeeded / sizeof(hMods[0]); i++) - { - // base address, size - pGMI(hProcess, hMods[i], &mi, sizeof(mi)); - // image file name - tt[0] = 0; - pGMFNE(hProcess, hMods[i], tt, TTBUFLEN); - // module name - tt2[0] = 0; - pGMBN(hProcess, hMods[i], tt2, TTBUFLEN); - - DWORD dwRes = this->LoadModule(hProcess, tt, tt2, (DWORD64)mi.lpBaseOfDll, mi.SizeOfImage); - if (dwRes != ERROR_SUCCESS) - this->m_parent->OnDbgHelpErr("LoadModule", dwRes, 0); - cnt++; - } - - cleanup: - if (hPsapi != NULL) - FreeLibrary(hPsapi); - if (tt2 != NULL) - free(tt2); - if (tt != NULL) - free(tt); - if (hMods != NULL) - free(hMods); - - return cnt != 0; - } // GetModuleListPSAPI - - DWORD LoadModule(HANDLE hProcess, LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size) - { - CHAR* szImg = _strdup(img); - CHAR* szMod = _strdup(mod); - DWORD result = ERROR_SUCCESS; - if ((szImg == NULL) || (szMod == NULL)) - result = ERROR_NOT_ENOUGH_MEMORY; - else - { - if (pSLM(hProcess, 0, szImg, szMod, baseAddr, size) == 0) - result = GetLastError(); - } - ULONGLONG fileVersion = 0; - if ((m_parent != NULL) && (szImg != NULL)) - { - // try to retrieve the file-version: - if ((this->m_parent->m_options & StackWalker::RetrieveFileVersion) != 0) - { - VS_FIXEDFILEINFO* fInfo = NULL; - DWORD dwHandle; - DWORD dwSize = GetFileVersionInfoSizeA(szImg, &dwHandle); - if (dwSize > 0) - { - LPVOID vData = malloc(dwSize); - if (vData != NULL) - { - if (GetFileVersionInfoA(szImg, dwHandle, dwSize, vData) != 0) - { - UINT len; - TCHAR szSubBlock[] = _T("\\"); - if (VerQueryValue(vData, szSubBlock, (LPVOID*)&fInfo, &len) == 0) - fInfo = NULL; - else - { - fileVersion = - ((ULONGLONG)fInfo->dwFileVersionLS) + ((ULONGLONG)fInfo->dwFileVersionMS << 32); - } - } - free(vData); - } - } - } - - // Retrieve some additional-infos about the module - IMAGEHLP_MODULE64_V3 Module; - const char* szSymType = "-unknown-"; - if (this->GetModuleInfo(hProcess, baseAddr, &Module) != FALSE) - { - switch (Module.SymType) - { - case SymNone: - szSymType = "-nosymbols-"; - break; - case SymCoff: // 1 - szSymType = "COFF"; - break; - case SymCv: // 2 - szSymType = "CV"; - break; - case SymPdb: // 3 - szSymType = "PDB"; - break; - case SymExport: // 4 - szSymType = "-exported-"; - break; - case SymDeferred: // 5 - szSymType = "-deferred-"; - break; - case SymSym: // 6 - szSymType = "SYM"; - break; - case 7: // SymDia: - szSymType = "DIA"; - break; - case 8: //SymVirtual: - szSymType = "Virtual"; - break; - } - } - LPCSTR pdbName = Module.LoadedImageName; - if (Module.LoadedPdbName[0] != 0) - pdbName = Module.LoadedPdbName; - this->m_parent->OnLoadModule(img, mod, baseAddr, size, result, szSymType, pdbName, - fileVersion); - } - if (szImg != NULL) - free(szImg); - if (szMod != NULL) - free(szMod); - return result; - } - -public: - BOOL LoadModules(HANDLE hProcess, DWORD dwProcessId) - { - // first try toolhelp32 - if (GetModuleListTH32(hProcess, dwProcessId)) - return true; - // then try psapi - return GetModuleListPSAPI(hProcess); - } - - BOOL GetModuleInfo(HANDLE hProcess, DWORD64 baseAddr, IMAGEHLP_MODULE64_V3* pModuleInfo) - { - memset(pModuleInfo, 0, sizeof(IMAGEHLP_MODULE64_V3)); - if (this->pSGMI == NULL) - { - SetLastError(ERROR_DLL_INIT_FAILED); - return FALSE; - } - // First try to use the larger ModuleInfo-Structure - pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3); - void* pData = malloc( - 4096); // reserve enough memory, so the bug in v6.3.5.1 does not lead to memory-overwrites... - if (pData == NULL) - { - SetLastError(ERROR_NOT_ENOUGH_MEMORY); - return FALSE; - } - memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V3)); - static bool s_useV3Version = true; - if (s_useV3Version) - { - if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*)pData) != FALSE) - { - // only copy as much memory as is reserved... - memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V3)); - pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3); - free(pData); - return TRUE; - } - s_useV3Version = false; // to prevent unnecessary calls with the larger struct... - } - - // could not retrieve the bigger structure, try with the smaller one (as defined in VC7.1)... - pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2); - memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V2)); - if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*)pData) != FALSE) - { - // only copy as much memory as is reserved... - memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V2)); - pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2); - free(pData); - return TRUE; - } - free(pData); - SetLastError(ERROR_DLL_INIT_FAILED); - return FALSE; - } -}; - -// ############################################################# -StackWalker::StackWalker(DWORD dwProcessId, HANDLE hProcess) -{ - this->m_options = OptionsAll; - this->m_modulesLoaded = FALSE; - this->m_hProcess = hProcess; - this->m_sw = new StackWalkerInternal(this, this->m_hProcess); - this->m_dwProcessId = dwProcessId; - this->m_szSymPath = NULL; - this->m_MaxRecursionCount = 1000; -} -StackWalker::StackWalker(int options, LPCSTR szSymPath, DWORD dwProcessId, HANDLE hProcess) -{ - this->m_options = options; - this->m_modulesLoaded = FALSE; - this->m_hProcess = hProcess; - this->m_sw = new StackWalkerInternal(this, this->m_hProcess); - this->m_dwProcessId = dwProcessId; - if (szSymPath != NULL) - { - this->m_szSymPath = _strdup(szSymPath); - this->m_options |= SymBuildPath; - } - else - this->m_szSymPath = NULL; - this->m_MaxRecursionCount = 1000; -} - -StackWalker::~StackWalker() -{ - if (m_szSymPath != NULL) - free(m_szSymPath); - m_szSymPath = NULL; - if (this->m_sw != NULL) - delete this->m_sw; - this->m_sw = NULL; -} - -BOOL StackWalker::LoadModules() -{ - if (this->m_sw == NULL) - { - SetLastError(ERROR_DLL_INIT_FAILED); - return FALSE; - } - if (m_modulesLoaded != FALSE) - return TRUE; - - // Build the sym-path: - char* szSymPath = NULL; - if ((this->m_options & SymBuildPath) != 0) - { - const size_t nSymPathLen = 4096; - szSymPath = (char*)malloc(nSymPathLen); - if (szSymPath == NULL) - { - SetLastError(ERROR_NOT_ENOUGH_MEMORY); - return FALSE; - } - szSymPath[0] = 0; - // Now first add the (optional) provided sympath: - if (this->m_szSymPath != NULL) - { - strcat_s(szSymPath, nSymPathLen, this->m_szSymPath); - strcat_s(szSymPath, nSymPathLen, ";"); - } - - strcat_s(szSymPath, nSymPathLen, ".;"); - - const size_t nTempLen = 1024; - char szTemp[nTempLen]; - // Now add the current directory: - if (GetCurrentDirectoryA(nTempLen, szTemp) > 0) - { - szTemp[nTempLen - 1] = 0; - strcat_s(szSymPath, nSymPathLen, szTemp); - strcat_s(szSymPath, nSymPathLen, ";"); - } - - // Now add the path for the main-module: - if (GetModuleFileNameA(NULL, szTemp, nTempLen) > 0) - { - szTemp[nTempLen - 1] = 0; - for (char* p = (szTemp + strlen(szTemp) - 1); p >= szTemp; --p) - { - // locate the rightmost path separator - if ((*p == '\\') || (*p == '/') || (*p == ':')) - { - *p = 0; - break; - } - } // for (search for path separator...) - if (strlen(szTemp) > 0) - { - strcat_s(szSymPath, nSymPathLen, szTemp); - strcat_s(szSymPath, nSymPathLen, ";"); - } - } - if (GetEnvironmentVariableA("_NT_SYMBOL_PATH", szTemp, nTempLen) > 0) - { - szTemp[nTempLen - 1] = 0; - strcat_s(szSymPath, nSymPathLen, szTemp); - strcat_s(szSymPath, nSymPathLen, ";"); - } - if (GetEnvironmentVariableA("_NT_ALTERNATE_SYMBOL_PATH", szTemp, nTempLen) > 0) - { - szTemp[nTempLen - 1] = 0; - strcat_s(szSymPath, nSymPathLen, szTemp); - strcat_s(szSymPath, nSymPathLen, ";"); - } - if (GetEnvironmentVariableA("SYSTEMROOT", szTemp, nTempLen) > 0) - { - szTemp[nTempLen - 1] = 0; - strcat_s(szSymPath, nSymPathLen, szTemp); - strcat_s(szSymPath, nSymPathLen, ";"); - // also add the "system32"-directory: - strcat_s(szTemp, nTempLen, "\\system32"); - strcat_s(szSymPath, nSymPathLen, szTemp); - strcat_s(szSymPath, nSymPathLen, ";"); - } - - if ((this->m_options & SymUseSymSrv) != 0) - { - if (GetEnvironmentVariableA("SYSTEMDRIVE", szTemp, nTempLen) > 0) - { - szTemp[nTempLen - 1] = 0; - strcat_s(szSymPath, nSymPathLen, "SRV*"); - strcat_s(szSymPath, nSymPathLen, szTemp); - strcat_s(szSymPath, nSymPathLen, "\\websymbols"); - strcat_s(szSymPath, nSymPathLen, "*http://msdl.microsoft.com/download/symbols;"); - } - else - strcat_s(szSymPath, nSymPathLen, - "SRV*c:\\websymbols*http://msdl.microsoft.com/download/symbols;"); - } - } // if SymBuildPath - - // First Init the whole stuff... - BOOL bRet = this->m_sw->Init(szSymPath); - if (szSymPath != NULL) - free(szSymPath); - szSymPath = NULL; - if (bRet == FALSE) - { - this->OnDbgHelpErr("Error while initializing dbghelp.dll", 0, 0); - SetLastError(ERROR_DLL_INIT_FAILED); - return FALSE; - } - - bRet = this->m_sw->LoadModules(this->m_hProcess, this->m_dwProcessId); - if (bRet != FALSE) - m_modulesLoaded = TRUE; - return bRet; -} - -// The following is used to pass the "userData"-Pointer to the user-provided readMemoryFunction -// This has to be done due to a problem with the "hProcess"-parameter in x64... -// Because this class is in no case multi-threading-enabled (because of the limitations -// of dbghelp.dll) it is "safe" to use a static-variable -static StackWalker::PReadProcessMemoryRoutine s_readMemoryFunction = NULL; -static LPVOID s_readMemoryFunction_UserData = NULL; - -BOOL StackWalker::ShowCallstack(HANDLE hThread, - const CONTEXT* context, - PReadProcessMemoryRoutine readMemoryFunction, - LPVOID pUserData) -{ - CONTEXT c; - CallstackEntry csEntry; - IMAGEHLP_SYMBOL64* pSym = NULL; - StackWalkerInternal::IMAGEHLP_MODULE64_V3 Module; - IMAGEHLP_LINE64 Line; - int frameNum; - bool bLastEntryCalled = true; - int curRecursionCount = 0; - - if (m_modulesLoaded == FALSE) - this->LoadModules(); // ignore the result... - - if (this->m_sw->m_hDbhHelp == NULL) - { - SetLastError(ERROR_DLL_INIT_FAILED); - return FALSE; - } - - s_readMemoryFunction = readMemoryFunction; - s_readMemoryFunction_UserData = pUserData; - - if (context == NULL) - { - // If no context is provided, capture the context - // See: https://stackwalker.codeplex.com/discussions/446958 -#if _WIN32_WINNT <= 0x0501 - // If we need to support XP, we need to use the "old way", because "GetThreadId" is not available! - if (hThread == GetCurrentThread()) -#else - if (GetThreadId(hThread) == GetCurrentThreadId()) -#endif - { - GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, USED_CONTEXT_FLAGS); - } - else - { - SuspendThread(hThread); - memset(&c, 0, sizeof(CONTEXT)); - c.ContextFlags = USED_CONTEXT_FLAGS; - - // TODO: Detect if you want to get a thread context of a different process, which is running a different processor architecture... - // This does only work if we are x64 and the target process is x64 or x86; - // It cannot work, if this process is x64 and the target process is x64... this is not supported... - // See also: http://www.howzatt.demon.co.uk/articles/DebuggingInWin64.html - if (GetThreadContext(hThread, &c) == FALSE) - { - ResumeThread(hThread); - return FALSE; - } - } - } - else - c = *context; - - // init STACKFRAME for first call - STACKFRAME64 s; // in/out stackframe - memset(&s, 0, sizeof(s)); - DWORD imageType; -#ifdef _M_IX86 - // normally, call ImageNtHeader() and use machine info from PE header - imageType = IMAGE_FILE_MACHINE_I386; - s.AddrPC.Offset = c.Eip; - s.AddrPC.Mode = AddrModeFlat; - s.AddrFrame.Offset = c.Ebp; - s.AddrFrame.Mode = AddrModeFlat; - s.AddrStack.Offset = c.Esp; - s.AddrStack.Mode = AddrModeFlat; -#elif _M_X64 - imageType = IMAGE_FILE_MACHINE_AMD64; - s.AddrPC.Offset = c.Rip; - s.AddrPC.Mode = AddrModeFlat; - s.AddrFrame.Offset = c.Rsp; - s.AddrFrame.Mode = AddrModeFlat; - s.AddrStack.Offset = c.Rsp; - s.AddrStack.Mode = AddrModeFlat; -#elif _M_IA64 - imageType = IMAGE_FILE_MACHINE_IA64; - s.AddrPC.Offset = c.StIIP; - s.AddrPC.Mode = AddrModeFlat; - s.AddrFrame.Offset = c.IntSp; - s.AddrFrame.Mode = AddrModeFlat; - s.AddrBStore.Offset = c.RsBSP; - s.AddrBStore.Mode = AddrModeFlat; - s.AddrStack.Offset = c.IntSp; - s.AddrStack.Mode = AddrModeFlat; -#else -#error "Platform not supported!" -#endif - - pSym = (IMAGEHLP_SYMBOL64*)malloc(sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN); - if (!pSym) - goto cleanup; // not enough memory... - memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN); - pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); - pSym->MaxNameLength = STACKWALK_MAX_NAMELEN; - - memset(&Line, 0, sizeof(Line)); - Line.SizeOfStruct = sizeof(Line); - - memset(&Module, 0, sizeof(Module)); - Module.SizeOfStruct = sizeof(Module); - - for (frameNum = 0;; ++frameNum) - { - // get next stack frame (StackWalk64(), SymFunctionTableAccess64(), SymGetModuleBase64()) - // if this returns ERROR_INVALID_ADDRESS (487) or ERROR_NOACCESS (998), you can - // assume that either you are done, or that the stack is so hosed that the next - // deeper frame could not be found. - // CONTEXT need not to be supplied if imageTyp is IMAGE_FILE_MACHINE_I386! - if (!this->m_sw->pSW(imageType, this->m_hProcess, hThread, &s, &c, myReadProcMem, - this->m_sw->pSFTA, this->m_sw->pSGMB, NULL)) - { - // INFO: "StackWalk64" does not set "GetLastError"... - this->OnDbgHelpErr("StackWalk64", 0, s.AddrPC.Offset); - break; - } - - csEntry.offset = s.AddrPC.Offset; - csEntry.name[0] = 0; - csEntry.undName[0] = 0; - csEntry.undFullName[0] = 0; - csEntry.offsetFromSmybol = 0; - csEntry.offsetFromLine = 0; - csEntry.lineFileName[0] = 0; - csEntry.lineNumber = 0; - csEntry.loadedImageName[0] = 0; - csEntry.moduleName[0] = 0; - if (s.AddrPC.Offset == s.AddrReturn.Offset) - { - if ((this->m_MaxRecursionCount > 0) && (curRecursionCount > m_MaxRecursionCount)) - { - this->OnDbgHelpErr("StackWalk64-Endless-Callstack!", 0, s.AddrPC.Offset); - break; - } - curRecursionCount++; - } - else - curRecursionCount = 0; - if (s.AddrPC.Offset != 0) - { - // we seem to have a valid PC - // show procedure info (SymGetSymFromAddr64()) - if (this->m_sw->pSGSFA(this->m_hProcess, s.AddrPC.Offset, &(csEntry.offsetFromSmybol), - pSym) != FALSE) - { - MyStrCpy(csEntry.name, STACKWALK_MAX_NAMELEN, pSym->Name); - // UnDecorateSymbolName() - this->m_sw->pUDSN(pSym->Name, csEntry.undName, STACKWALK_MAX_NAMELEN, UNDNAME_NAME_ONLY); - this->m_sw->pUDSN(pSym->Name, csEntry.undFullName, STACKWALK_MAX_NAMELEN, UNDNAME_COMPLETE); - } - else - { - this->OnDbgHelpErr("SymGetSymFromAddr64", GetLastError(), s.AddrPC.Offset); - } - - // show line number info, NT5.0-method (SymGetLineFromAddr64()) - if (this->m_sw->pSGLFA != NULL) - { // yes, we have SymGetLineFromAddr64() - if (this->m_sw->pSGLFA(this->m_hProcess, s.AddrPC.Offset, &(csEntry.offsetFromLine), - &Line) != FALSE) - { - csEntry.lineNumber = Line.LineNumber; - MyStrCpy(csEntry.lineFileName, STACKWALK_MAX_NAMELEN, Line.FileName); - } - else - { - this->OnDbgHelpErr("SymGetLineFromAddr64", GetLastError(), s.AddrPC.Offset); - } - } // yes, we have SymGetLineFromAddr64() - - // show module info (SymGetModuleInfo64()) - if (this->m_sw->GetModuleInfo(this->m_hProcess, s.AddrPC.Offset, &Module) != FALSE) - { // got module info OK - switch (Module.SymType) - { - case SymNone: - csEntry.symTypeString = "-nosymbols-"; - break; - case SymCoff: - csEntry.symTypeString = "COFF"; - break; - case SymCv: - csEntry.symTypeString = "CV"; - break; - case SymPdb: - csEntry.symTypeString = "PDB"; - break; - case SymExport: - csEntry.symTypeString = "-exported-"; - break; - case SymDeferred: - csEntry.symTypeString = "-deferred-"; - break; - case SymSym: - csEntry.symTypeString = "SYM"; - break; -#if API_VERSION_NUMBER >= 9 - case SymDia: - csEntry.symTypeString = "DIA"; - break; -#endif - case 8: //SymVirtual: - csEntry.symTypeString = "Virtual"; - break; - default: - //_snprintf( ty, sizeof(ty), "symtype=%ld", (long) Module.SymType ); - csEntry.symTypeString = NULL; - break; - } - - MyStrCpy(csEntry.moduleName, STACKWALK_MAX_NAMELEN, Module.ModuleName); - csEntry.baseOfImage = Module.BaseOfImage; - MyStrCpy(csEntry.loadedImageName, STACKWALK_MAX_NAMELEN, Module.LoadedImageName); - } // got module info OK - else - { - this->OnDbgHelpErr("SymGetModuleInfo64", GetLastError(), s.AddrPC.Offset); - } - } // we seem to have a valid PC - - CallstackEntryType et = nextEntry; - if (frameNum == 0) - et = firstEntry; - bLastEntryCalled = false; - this->OnCallstackEntry(et, csEntry); - - if (s.AddrReturn.Offset == 0) - { - bLastEntryCalled = true; - this->OnCallstackEntry(lastEntry, csEntry); - SetLastError(ERROR_SUCCESS); - break; - } - } // for ( frameNum ) - -cleanup: - if (pSym) - free(pSym); - - if (bLastEntryCalled == false) - this->OnCallstackEntry(lastEntry, csEntry); - - if (context == NULL) - ResumeThread(hThread); - - return TRUE; -} - -BOOL StackWalker::ShowObject(LPVOID pObject) -{ - // Load modules if not done yet - if (m_modulesLoaded == FALSE) - this->LoadModules(); // ignore the result... - - // Verify that the DebugHelp.dll was actually found - if (this->m_sw->m_hDbhHelp == NULL) - { - SetLastError(ERROR_DLL_INIT_FAILED); - return FALSE; - } - - // SymGetSymFromAddr64() is required - if (this->m_sw->pSGSFA == NULL) - return FALSE; - - // Show object info (SymGetSymFromAddr64()) - DWORD64 dwAddress = DWORD64(pObject); - DWORD64 dwDisplacement = 0; - IMAGEHLP_SYMBOL64* pSym = - (IMAGEHLP_SYMBOL64*)malloc(sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN); - memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN); - pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); - pSym->MaxNameLength = STACKWALK_MAX_NAMELEN; - if (this->m_sw->pSGSFA(this->m_hProcess, dwAddress, &dwDisplacement, pSym) == FALSE) - { - this->OnDbgHelpErr("SymGetSymFromAddr64", GetLastError(), dwAddress); - return FALSE; - } - // Object name output - this->OnOutput(pSym->Name); - - free(pSym); - return TRUE; -}; - -BOOL __stdcall StackWalker::myReadProcMem(HANDLE hProcess, - DWORD64 qwBaseAddress, - PVOID lpBuffer, - DWORD nSize, - LPDWORD lpNumberOfBytesRead) -{ - if (s_readMemoryFunction == NULL) - { - SIZE_T st; - BOOL bRet = ReadProcessMemory(hProcess, (LPVOID)qwBaseAddress, lpBuffer, nSize, &st); - *lpNumberOfBytesRead = (DWORD)st; - //printf("ReadMemory: hProcess: %p, baseAddr: %p, buffer: %p, size: %d, read: %d, result: %d\n", hProcess, (LPVOID) qwBaseAddress, lpBuffer, nSize, (DWORD) st, (DWORD) bRet); - return bRet; - } - else - { - return s_readMemoryFunction(hProcess, qwBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead, - s_readMemoryFunction_UserData); - } -} - -void StackWalker::OnLoadModule(LPCSTR img, - LPCSTR mod, - DWORD64 baseAddr, - DWORD size, - DWORD result, - LPCSTR symType, - LPCSTR pdbName, - ULONGLONG fileVersion) -{ - CHAR buffer[STACKWALK_MAX_NAMELEN]; - size_t maxLen = STACKWALK_MAX_NAMELEN; -#if _MSC_VER >= 1400 - maxLen = _TRUNCATE; -#endif - if (fileVersion == 0) - _snprintf_s(buffer, maxLen, "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s'\n", - img, mod, (LPVOID)baseAddr, size, result, symType, pdbName); - else - { - DWORD v4 = (DWORD)(fileVersion & 0xFFFF); - DWORD v3 = (DWORD)((fileVersion >> 16) & 0xFFFF); - DWORD v2 = (DWORD)((fileVersion >> 32) & 0xFFFF); - DWORD v1 = (DWORD)((fileVersion >> 48) & 0xFFFF); - _snprintf_s( - buffer, maxLen, - "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s', fileVersion: %d.%d.%d.%d\n", - img, mod, (LPVOID)baseAddr, size, result, symType, pdbName, v1, v2, v3, v4); - } - buffer[STACKWALK_MAX_NAMELEN - 1] = 0; // be sure it is NULL terminated - OnOutput(buffer); -} - -void StackWalker::OnCallstackEntry(CallstackEntryType eType, CallstackEntry& entry) -{ - CHAR buffer[STACKWALK_MAX_NAMELEN]; - size_t maxLen = STACKWALK_MAX_NAMELEN; -#if _MSC_VER >= 1400 - maxLen = _TRUNCATE; -#endif - if ((eType != lastEntry) && (entry.offset != 0)) - { - if (entry.name[0] == 0) - MyStrCpy(entry.name, STACKWALK_MAX_NAMELEN, "(function-name not available)"); - if (entry.undName[0] != 0) - MyStrCpy(entry.name, STACKWALK_MAX_NAMELEN, entry.undName); - if (entry.undFullName[0] != 0) - MyStrCpy(entry.name, STACKWALK_MAX_NAMELEN, entry.undFullName); - if (entry.lineFileName[0] == 0) - { - MyStrCpy(entry.lineFileName, STACKWALK_MAX_NAMELEN, "(filename not available)"); - if (entry.moduleName[0] == 0) - MyStrCpy(entry.moduleName, STACKWALK_MAX_NAMELEN, "(module-name not available)"); - _snprintf_s(buffer, maxLen, "%p (%s): %s: %s\n", (LPVOID)entry.offset, entry.moduleName, - entry.lineFileName, entry.name); - } - else - _snprintf_s(buffer, maxLen, "%s (%d): %s\n", entry.lineFileName, entry.lineNumber, - entry.name); - buffer[STACKWALK_MAX_NAMELEN - 1] = 0; - OnOutput(buffer); - } -} - -void StackWalker::OnDbgHelpErr(LPCSTR szFuncName, DWORD gle, DWORD64 addr) -{ - CHAR buffer[STACKWALK_MAX_NAMELEN]; - size_t maxLen = STACKWALK_MAX_NAMELEN; -#if _MSC_VER >= 1400 - maxLen = _TRUNCATE; -#endif - _snprintf_s(buffer, maxLen, "ERROR: %s, GetLastError: %d (Address: %p)\n", szFuncName, gle, - (LPVOID)addr); - buffer[STACKWALK_MAX_NAMELEN - 1] = 0; - OnOutput(buffer); -} - -void StackWalker::OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName) -{ - CHAR buffer[STACKWALK_MAX_NAMELEN]; - size_t maxLen = STACKWALK_MAX_NAMELEN; -#if _MSC_VER >= 1400 - maxLen = _TRUNCATE; -#endif - _snprintf_s(buffer, maxLen, "SymInit: Symbol-SearchPath: '%s', symOptions: %d, UserName: '%s'\n", - szSearchPath, symOptions, szUserName); - buffer[STACKWALK_MAX_NAMELEN - 1] = 0; - OnOutput(buffer); - // Also display the OS-version -#if _MSC_VER <= 1200 - OSVERSIONINFOA ver; - ZeroMemory(&ver, sizeof(OSVERSIONINFOA)); - ver.dwOSVersionInfoSize = sizeof(ver); - if (GetVersionExA(&ver) != FALSE) - { - _snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s)\n", ver.dwMajorVersion, - ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion); - buffer[STACKWALK_MAX_NAMELEN - 1] = 0; - OnOutput(buffer); - } -#else - OSVERSIONINFOEXA ver; - ZeroMemory(&ver, sizeof(OSVERSIONINFOEXA)); - ver.dwOSVersionInfoSize = sizeof(ver); -#if _MSC_VER >= 1900 -#pragma warning(push) -#pragma warning(disable : 4996) -#endif - if (GetVersionExA((OSVERSIONINFOA*)&ver) != FALSE) - { - _snprintf_s(buffer, maxLen, "OS-Version: %d.%d.%d (%s) 0x%x-0x%x\n", ver.dwMajorVersion, - ver.dwMinorVersion, ver.dwBuildNumber, ver.szCSDVersion, ver.wSuiteMask, - ver.wProductType); - buffer[STACKWALK_MAX_NAMELEN - 1] = 0; - OnOutput(buffer); - } -#if _MSC_VER >= 1900 -#pragma warning(pop) -#endif -#endif -} - -void StackWalker::OnOutput(LPCSTR buffer) -{ - OutputDebugStringA(buffer); -} diff --git a/deps/stackwalker/StackWalker.h b/deps/stackwalker/StackWalker.h deleted file mode 100644 index 0a004d96..00000000 --- a/deps/stackwalker/StackWalker.h +++ /dev/null @@ -1,255 +0,0 @@ -#ifndef __STACKWALKER_H__ -#define __STACKWALKER_H__ - -#if defined(_MSC_VER) - -/********************************************************************** - * - * StackWalker.h - * - * - * - * LICENSE (http://www.opensource.org/licenses/bsd-license.php) - * - * Copyright (c) 2005-2009, Jochen Kalmbach - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * Neither the name of Jochen Kalmbach nor the names of its contributors may be - * used to endorse or promote products derived from this software without - * specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * **********************************************************************/ -// #pragma once is supported starting with _MSC_VER 1000, -// so we need not to check the version (because we only support _MSC_VER >= 1100)! -#pragma once - -#include - -#if _MSC_VER >= 1900 -#pragma warning(disable : 4091) -#endif - -// special defines for VC5/6 (if no actual PSDK is installed): -#if _MSC_VER < 1300 -typedef unsigned __int64 DWORD64, *PDWORD64; -#if defined(_WIN64) -typedef unsigned __int64 SIZE_T, *PSIZE_T; -#else -typedef unsigned long SIZE_T, *PSIZE_T; -#endif -#endif // _MSC_VER < 1300 - -class StackWalkerInternal; // forward -class StackWalker -{ -public: - typedef enum StackWalkOptions - { - // No addition info will be retrieved - // (only the address is available) - RetrieveNone = 0, - - // Try to get the symbol-name - RetrieveSymbol = 1, - - // Try to get the line for this symbol - RetrieveLine = 2, - - // Try to retrieve the module-infos - RetrieveModuleInfo = 4, - - // Also retrieve the version for the DLL/EXE - RetrieveFileVersion = 8, - - // Contains all the above - RetrieveVerbose = 0xF, - - // Generate a "good" symbol-search-path - SymBuildPath = 0x10, - - // Also use the public Microsoft-Symbol-Server - SymUseSymSrv = 0x20, - - // Contains all the above "Sym"-options - SymAll = 0x30, - - // Contains all options (default) - OptionsAll = 0x3F - } StackWalkOptions; - - StackWalker(int options = OptionsAll, // 'int' is by design, to combine the enum-flags - LPCSTR szSymPath = NULL, - DWORD dwProcessId = GetCurrentProcessId(), - HANDLE hProcess = GetCurrentProcess()); - StackWalker(DWORD dwProcessId, HANDLE hProcess); - virtual ~StackWalker(); - - typedef BOOL(__stdcall* PReadProcessMemoryRoutine)( - HANDLE hProcess, - DWORD64 qwBaseAddress, - PVOID lpBuffer, - DWORD nSize, - LPDWORD lpNumberOfBytesRead, - LPVOID pUserData // optional data, which was passed in "ShowCallstack" - ); - - BOOL LoadModules(); - - BOOL ShowCallstack( - HANDLE hThread = GetCurrentThread(), - const CONTEXT* context = NULL, - PReadProcessMemoryRoutine readMemoryFunction = NULL, - LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback - ); - - BOOL ShowObject(LPVOID pObject); - -#if _MSC_VER >= 1300 - // due to some reasons, the "STACKWALK_MAX_NAMELEN" must be declared as "public" - // in older compilers in order to use it... starting with VC7 we can declare it as "protected" -protected: -#endif - enum - { - STACKWALK_MAX_NAMELEN = 1024 - }; // max name length for found symbols - -protected: - // Entry for each Callstack-Entry - typedef struct CallstackEntry - { - DWORD64 offset; // if 0, we have no valid entry - CHAR name[STACKWALK_MAX_NAMELEN]; - CHAR undName[STACKWALK_MAX_NAMELEN]; - CHAR undFullName[STACKWALK_MAX_NAMELEN]; - DWORD64 offsetFromSmybol; - DWORD offsetFromLine; - DWORD lineNumber; - CHAR lineFileName[STACKWALK_MAX_NAMELEN]; - DWORD symType; - LPCSTR symTypeString; - CHAR moduleName[STACKWALK_MAX_NAMELEN]; - DWORD64 baseOfImage; - CHAR loadedImageName[STACKWALK_MAX_NAMELEN]; - } CallstackEntry; - - typedef enum CallstackEntryType - { - firstEntry, - nextEntry, - lastEntry - } CallstackEntryType; - - virtual void OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName); - virtual void OnLoadModule(LPCSTR img, - LPCSTR mod, - DWORD64 baseAddr, - DWORD size, - DWORD result, - LPCSTR symType, - LPCSTR pdbName, - ULONGLONG fileVersion); - virtual void OnCallstackEntry(CallstackEntryType eType, CallstackEntry& entry); - virtual void OnDbgHelpErr(LPCSTR szFuncName, DWORD gle, DWORD64 addr); - virtual void OnOutput(LPCSTR szText); - - StackWalkerInternal* m_sw; - HANDLE m_hProcess; - DWORD m_dwProcessId; - BOOL m_modulesLoaded; - LPSTR m_szSymPath; - - int m_options; - int m_MaxRecursionCount; - - static BOOL __stdcall myReadProcMem(HANDLE hProcess, - DWORD64 qwBaseAddress, - PVOID lpBuffer, - DWORD nSize, - LPDWORD lpNumberOfBytesRead); - - friend StackWalkerInternal; -}; // class StackWalker - -// The "ugly" assembler-implementation is needed for systems before XP -// If you have a new PSDK and you only compile for XP and later, then you can use -// the "RtlCaptureContext" -// Currently there is no define which determines the PSDK-Version... -// So we just use the compiler-version (and assumes that the PSDK is -// the one which was installed by the VS-IDE) - -// INFO: If you want, you can use the RtlCaptureContext if you only target XP and later... -// But I currently use it in x64/IA64 environments... -//#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400) - -#if defined(_M_IX86) -#ifdef CURRENT_THREAD_VIA_EXCEPTION -// TODO: The following is not a "good" implementation, -// because the callstack is only valid in the "__except" block... -#define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \ - do \ - { \ - memset(&c, 0, sizeof(CONTEXT)); \ - EXCEPTION_POINTERS* pExp = NULL; \ - __try \ - { \ - throw 0; \ - } \ - __except (((pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER \ - : EXCEPTION_EXECUTE_HANDLER)) \ - { \ - } \ - if (pExp != NULL) \ - memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \ - c.ContextFlags = contextFlags; \ - } while (0); -#else -// clang-format off -// The following should be enough for walking the callstack... -#define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \ - do \ - { \ - memset(&c, 0, sizeof(CONTEXT)); \ - c.ContextFlags = contextFlags; \ - __asm call x \ - __asm x: pop eax \ - __asm mov c.Eip, eax \ - __asm mov c.Ebp, ebp \ - __asm mov c.Esp, esp \ - } while (0) -// clang-format on -#endif - -#else - -// The following is defined for x86 (XP and higher), x64 and IA64: -#define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \ - do \ - { \ - memset(&c, 0, sizeof(CONTEXT)); \ - c.ContextFlags = contextFlags; \ - RtlCaptureContext(&c); \ - } while (0); -#endif - -#endif //defined(_MSC_VER) - -#endif // __STACKWALKER_H__ diff --git a/deps/watchdog/Watchdog.h b/deps/watchdog/Watchdog.h index d9f7aa25..e64a21f0 100644 --- a/deps/watchdog/Watchdog.h +++ b/deps/watchdog/Watchdog.h @@ -31,8 +31,8 @@ #include #include -#include -namespace ci { namespace fs = std::experimental::filesystem; } +#include +namespace ci { namespace fs = std::filesystem; } //! Exception for when Watchdog can't locate a file or parse the wildcard class WatchedFileSystemExc : public std::exception { @@ -319,7 +319,7 @@ protected: std::string mFilter; std::function mCallback; std::function&)> mListCallback; - std::map< std::string, std::experimental::filesystem::file_time_type > mModificationTimes; + std::map< std::string, std::filesystem::file_time_type > mModificationTimes; }; std::mutex mMutex; diff --git a/sql/migrations/20190706035254_ConvertFixedSizeDataToBlobs.sql b/sql/migrations/20190706035254_ConvertFixedSizeDataToBlobs.sql new file mode 100644 index 00000000..97b617b5 --- /dev/null +++ b/sql/migrations/20190706035254_ConvertFixedSizeDataToBlobs.sql @@ -0,0 +1,15 @@ +-- Migration generated at 2019/07/06 03:52:54 +-- 20190706035254_ConvertFixedSizeDataToBlobs.sql + +ALTER TABLE `charainfo` + CHANGE COLUMN `TitleList` `TitleList` BLOB NULL DEFAULT NULL AFTER `ActiveTitle`, + CHANGE COLUMN `Achievement` `Achievement` BLOB NULL DEFAULT NULL AFTER `TitleList`, + CHANGE COLUMN `Aetheryte` `Aetheryte` BLOB NULL DEFAULT NULL AFTER `Achievement`, + CHANGE COLUMN `HowTo` `HowTo` BLOB NULL DEFAULT NULL AFTER `Aetheryte`, + CHANGE COLUMN `Minions` `Minions` BLOB NULL DEFAULT NULL AFTER `HowTo`, + CHANGE COLUMN `Mounts` `Mounts` BLOB NULL DEFAULT NULL AFTER `Minions`, + CHANGE COLUMN `Orchestrion` `Orchestrion` BLOB NULL DEFAULT NULL AFTER `Mounts`, + CHANGE COLUMN `QuestCompleteFlags` `QuestCompleteFlags` BLOB NULL DEFAULT NULL AFTER `ConfigFlags`, + CHANGE COLUMN `QuestTracking` `QuestTracking` BLOB NULL DEFAULT NULL AFTER `OpeningSequence`, + CHANGE COLUMN `Discovery` `Discovery` BLOB NULL DEFAULT NULL AFTER `GrandCompanyRank`, + CHANGE COLUMN `Unlocks` `Unlocks` BLOB NULL DEFAULT NULL AFTER `Pose`; diff --git a/sql/schema/inserts.sql b/sql/schema/inserts.sql index bcecda18..cb94763b 100644 --- a/sql/schema/inserts.sql +++ b/sql/schema/inserts.sql @@ -424,4383 +424,6 @@ INSERT IGNORE INTO `bnpctemplate` ( `Name`, `bNPCBaseId`, `bNPCNameId`, `mainWea INSERT IGNORE INTO `bnpctemplate` ( `Name`, `bNPCBaseId`, `bNPCNameId`, `mainWeaponModel`, `secWeaponModel`, `aggressionMode`, `enemyType`, `pose`, `modelChara`, `displayFlags`, `Look`, `Models`) VALUES ( "servantofthesage_8754", 8754, 7205, 0, 0, 3, 4, 0, 2270, 262147, UNHEX( '0000000000000000000000000000000000000000000000000000'), UNHEX( '00000000000000000000000000000000000000000000000000000000000000000000000000000000') ); INSERT IGNORE INTO `bnpctemplate` ( `Name`, `bNPCBaseId`, `bNPCNameId`, `mainWeaponModel`, `secWeaponModel`, `aggressionMode`, `enemyType`, `pose`, `modelChara`, `displayFlags`, `Look`, `Models`) VALUES ( "saitaisui_8780", 8780, 7206, 4295302988, 0, 1, 4, 0, 2218, 12, UNHEX( '0000000000000000000000000000000000000000000000000000'), UNHEX( '00000000000000000000000000000000000000000000000000000000000000000000000000000000') ); -INSERT INTO `discoveryinfo` (`id`, `map_id`, `discover_id`) VALUES -(1367775, 4, 2), -(1367776, 4, 2), -(1367777, 4, 2), -(1367778, 4, 1), -(1367779, 4, 2), -(1367780, 4, 3), -(1367785, 4, 3), -(1367793, 4, 2), -(1367798, 4, 1), -(1367800, 4, 2), -(1367801, 4, 2), -(1367823, 4, 2), -(1420009, 4, 5), -(1420010, 4, 5), -(1420011, 4, 2), -(1420012, 4, 5), -(1420013, 4, 5), -(1436587, 4, 2), -(1436597, 4, 5), -(1436598, 4, 5), -(1436599, 4, 5), -(1436600, 4, 2), -(1436601, 4, 2), -(1436602, 4, 2), -(1436603, 4, 2), -(1436604, 4, 2), -(1436605, 4, 2), -(1436606, 4, 2), -(2052662, 4, 7), -(2052668, 4, 8), -(2052672, 4, 13), -(2052682, 4, 9), -(2052693, 4, 12), -(2052695, 4, 12), -(2052698, 4, 10), -(2052699, 4, 10), -(2052705, 4, 11), -(2052706, 4, 11), -(2052708, 4, 10), -(2052710, 4, 6), -(2052711, 4, 6), -(2052714, 4, 5), -(2052716, 4, 5), -(2052721, 4, 5), -(2052722, 4, 5), -(2052724, 4, 5), -(2065858, 9, 1), -(2065859, 9, 6), -(2065860, 9, 6), -(2065861, 9, 3), -(2065866, 9, 4), -(2065867, 9, 4), -(2065868, 9, 4), -(2065869, 9, 4), -(2065870, 9, 4), -(2065871, 9, 2), -(2065872, 9, 7), -(2065873, 9, 9), -(2065875, 9, 9), -(2065877, 9, 5), -(2065879, 9, 3), -(2065880, 9, 5), -(2065882, 9, 8), -(2065883, 9, 8), -(2065961, 5, 1), -(2065962, 5, 1), -(2065963, 5, 1), -(2065970, 5, 2), -(2065974, 5, 17), -(2065975, 5, 13), -(2065981, 5, 16), -(2065986, 5, 4), -(2065987, 5, 5), -(2065988, 5, 5), -(2065992, 5, 4), -(2065994, 5, 4), -(2065995, 5, 5), -(2065996, 5, 4), -(2065997, 5, 3), -(2065998, 5, 3), -(2065999, 5, 3), -(2066000, 5, 3), -(2066001, 5, 3), -(2066002, 5, 6), -(2066003, 5, 6), -(2066004, 5, 7), -(2066007, 5, 7), -(2066011, 5, 7), -(2066013, 5, 9), -(2066018, 5, 10), -(2066019, 5, 10), -(2066021, 5, 10), -(2066022, 5, 12), -(2066023, 5, 12), -(2066024, 5, 15), -(2066027, 5, 11), -(2066029, 5, 19), -(2066030, 5, 18), -(2112183, 9, 6), -(2112184, 9, 6), -(2112186, 9, 7), -(2112188, 9, 5), -(2112189, 9, 4), -(2152921, 4, 3), -(2152922, 4, 3), -(2152923, 4, 4), -(2152925, 4, 4), -(2152926, 4, 1), -(2152928, 4, 2), -(2152930, 4, 5), -(2152931, 4, 5), -(2152933, 4, 5), -(2152934, 4, 5), -(2152935, 4, 5), -(2152936, 4, 5), -(2152937, 4, 5), -(2152938, 4, 5), -(2152939, 4, 8), -(2152941, 4, 8), -(2152942, 4, 8), -(2152943, 4, 8), -(2152944, 4, 7), -(2152945, 4, 7), -(2152946, 4, 7), -(2152949, 4, 7), -(2152950, 4, 7), -(2152951, 4, 7), -(2152952, 4, 7), -(2152953, 4, 7), -(2152954, 4, 7), -(2152955, 4, 8), -(2152956, 4, 9), -(2152957, 4, 11), -(2152963, 4, 11), -(2152965, 4, 11), -(2152966, 4, 13), -(2152967, 4, 13), -(2264614, 7, 1), -(2264620, 7, 1), -(2264625, 7, 1), -(2264626, 7, 2), -(2264633, 7, 3), -(2264634, 7, 3), -(2264636, 7, 3), -(2264637, 7, 3), -(2264640, 7, 10), -(2264642, 7, 10), -(2264643, 7, 10), -(2264649, 7, 11), -(2264653, 7, 12), -(2264660, 7, 12), -(2264662, 7, 13), -(2264669, 7, 2), -(2264671, 7, 14), -(2264672, 7, 15), -(2264673, 7, 16), -(2264674, 7, 4), -(2264675, 7, 5), -(2264676, 7, 6), -(2264682, 7, 8), -(2264685, 7, 9), -(2264705, 7, 1), -(2264721, 7, 1), -(2264728, 7, 1), -(2264731, 7, 3), -(2264736, 7, 8), -(2264772, 7, 16), -(2264773, 7, 7), -(2264775, 7, 11), -(2264791, 7, 15), -(2264796, 7, 3), -(2264798, 7, 16), -(2264807, 7, 1), -(2280307, 6, 1), -(2280313, 6, 2), -(2280316, 6, 3), -(2280318, 6, 3), -(2280320, 6, 4), -(2280327, 6, 4), -(2280330, 6, 4), -(2280347, 6, 5), -(2280351, 6, 5), -(2280358, 6, 5), -(2280362, 6, 6), -(2280365, 6, 7), -(2280369, 6, 7), -(2280371, 6, 8), -(2280375, 6, 15), -(2280388, 6, 13), -(2280391, 6, 14), -(2280395, 6, 14), -(2280400, 6, 9), -(2280402, 6, 10), -(2280403, 6, 10), -(2280404, 6, 12), -(2280406, 6, 11), -(2280409, 6, 1), -(2280410, 6, 2), -(2280414, 6, 4), -(2280425, 6, 3), -(2280426, 6, 3), -(2280428, 6, 2), -(2280430, 6, 9), -(2280432, 6, 9), -(2280448, 6, 10), -(2280451, 6, 12), -(2280453, 6, 11), -(2280455, 6, 7), -(2280456, 6, 5), -(2280458, 6, 8), -(2280461, 6, 16), -(2280464, 6, 6), -(2299601, 6, 6), -(2308332, 5, 1), -(2308333, 5, 3), -(2308340, 5, 3), -(2308346, 5, 3), -(2308354, 5, 5), -(2308355, 5, 4), -(2308361, 5, 8), -(2308363, 5, 16), -(2308364, 5, 13), -(2308366, 5, 17), -(2341847, 7, 4), -(2341870, 7, 6), -(2341892, 7, 10), -(2349784, 4, 5), -(2349791, 4, 2), -(2349792, 4, 5), -(2349794, 4, 5), -(2349857, 4, 5), -(2349858, 4, 5), -(2349860, 4, 5), -(2351856, 6, 4), -(2351858, 6, 4), -(2351870, 6, 4), -(2381027, 6, 4), -(2381028, 6, 4), -(2381029, 6, 10), -(2381030, 6, 8), -(2381031, 6, 6), -(2381032, 6, 7), -(2381033, 6, 4), -(2381034, 6, 4), -(2381035, 6, 4), -(2381036, 6, 4), -(2381037, 6, 4), -(2381038, 6, 4), -(2381039, 6, 7), -(2381040, 6, 13), -(2381041, 6, 7), -(2381044, 6, 4), -(2422825, 6, 4), -(2453661, 6, 4), -(2453677, 7, 1), -(2453678, 7, 13), -(2453679, 7, 15), -(2453681, 7, 13), -(2453682, 7, 13), -(2453685, 7, 5), -(2453686, 7, 8), -(2453687, 7, 8), -(2453688, 7, 8), -(2453689, 7, 8), -(2453690, 7, 8), -(2465005, 4, 4), -(2465008, 4, 6), -(2465009, 4, 6), -(2465010, 4, 2), -(2465013, 4, 2), -(2465017, 4, 10), -(2465018, 4, 13), -(2465019, 4, 10), -(2465025, 4, 9), -(2465028, 4, 9), -(2465029, 4, 9), -(2465059, 5, 3), -(2465060, 5, 19), -(2465061, 5, 19), -(2465064, 5, 12), -(2465069, 5, 15), -(2465072, 5, 17), -(2496282, 4, 11), -(2496289, 4, 5), -(2496437, 4, 2), -(2499345, 7, 1), -(2563317, 5, 1), -(2563790, 6, 5), -(2563792, 6, 5), -(2563798, 6, 4), -(2563804, 6, 12), -(2563859, 6, 9), -(2563867, 6, 9), -(2563868, 6, 9), -(2563872, 6, 9), -(2563875, 6, 9), -(2563882, 7, 1), -(2564149, 4, 11), -(2564152, 4, 11), -(2564171, 4, 11), -(2622826, 4, 5), -(2622881, 4, 11), -(2622884, 4, 11), -(2622886, 4, 11), -(2652480, 4, 1), -(2652490, 4, 1), -(2763450, 6, 7), -(2763451, 6, 7), -(2763452, 6, 7), -(2927639, 5, 6), -(3643234, 16, 1), -(3643236, 16, 1), -(3643414, 16, 2), -(3643415, 16, 2), -(3643457, 16, 3), -(3643485, 16, 3), -(3643486, 16, 3), -(3643487, 16, 3), -(3643488, 16, 3), -(3643489, 16, 4), -(3643491, 16, 6), -(3643495, 16, 7), -(3643496, 16, 7), -(3643498, 16, 7), -(3643499, 16, 7), -(3643500, 16, 10), -(3643501, 16, 7), -(3643502, 16, 10), -(3643503, 16, 10), -(3643504, 16, 10), -(3643505, 16, 10), -(3643506, 16, 9), -(3643507, 16, 9), -(3643509, 16, 8), -(3643556, 16, 2), -(3643588, 16, 2), -(3643589, 16, 2), -(3643590, 16, 1), -(3643597, 16, 3), -(3643598, 16, 4), -(3643602, 16, 5), -(3643604, 16, 9), -(3643605, 16, 8), -(3643606, 16, 10), -(3643607, 16, 8), -(3643649, 21, 1), -(3643706, 21, 1), -(3643707, 21, 3), -(3643708, 21, 1), -(3643709, 21, 2), -(3643715, 21, 4), -(3643728, 21, 4), -(3643815, 21, 5), -(3643825, 21, 5), -(3643831, 21, 3), -(3643841, 21, 6), -(3643859, 21, 7), -(3643862, 21, 5), -(3643864, 21, 8), -(3643865, 21, 5), -(3643871, 21, 8), -(3643879, 21, 6), -(3645046, 21, 10), -(3645058, 21, 10), -(3645548, 21, 9), -(3645576, 21, 9), -(3645590, 21, 11), -(3645591, 21, 9), -(3645607, 21, 9), -(3645675, 21, 11), -(3645684, 21, 11), -(3645746, 21, 12), -(3645751, 21, 13), -(3645793, 21, 12), -(3645800, 21, 12), -(3646818, 21, 1), -(3646820, 21, 1), -(3646848, 21, 3), -(3646849, 21, 3), -(3647060, 21, 4), -(3647062, 21, 5), -(3647073, 21, 6), -(3647079, 21, 7), -(3647131, 21, 8), -(3647136, 21, 10), -(3647138, 21, 6), -(3647142, 21, 9), -(3647308, 21, 12), -(3649749, 21, 6), -(3649760, 21, 6), -(3692932, 16, 2), -(3692933, 16, 1), -(3692941, 16, 7), -(3692942, 16, 2), -(3692943, 16, 7), -(3692944, 16, 7), -(3692948, 16, 2), -(3692961, 16, 3), -(3692965, 16, 3), -(3692973, 16, 4), -(3692975, 16, 4), -(3692976, 16, 4), -(3692977, 16, 4), -(3693075, 16, 4), -(3693080, 16, 4), -(3693104, 16, 6), -(3693126, 16, 5), -(3693128, 16, 5), -(3693148, 16, 7), -(3693159, 16, 7), -(3693168, 16, 7), -(3693169, 16, 7), -(3693181, 16, 10), -(3693182, 16, 7), -(3693189, 16, 8), -(3693190, 16, 8), -(3746497, 9, 1), -(3746504, 9, 10), -(3746513, 9, 1), -(3746515, 9, 11), -(3746546, 9, 7), -(3746643, 9, 8), -(3746648, 9, 12), -(3746649, 9, 13), -(3746650, 9, 13), -(3762950, 9, 2), -(3784410, 9, 1), -(3784508, 9, 2), -(3784514, 9, 2), -(3784517, 9, 2), -(3784520, 9, 2), -(3784522, 9, 2), -(3784563, 9, 7), -(3784565, 9, 7), -(3861103, 16, 2), -(3861106, 16, 2), -(3861109, 16, 2), -(3861111, 16, 2), -(3861113, 16, 2), -(3899968, 7, 15), -(3907414, 4, 5), -(3907879, 4, 1), -(3907888, 4, 1), -(3907897, 4, 2), -(3907899, 4, 2), -(3907901, 4, 2), -(3907902, 4, 2), -(3907903, 4, 2), -(3907908, 4, 2), -(3907909, 4, 2), -(3908308, 4, 9), -(3908312, 4, 9), -(3908313, 4, 9), -(3923782, 16, 3), -(3923784, 16, 3), -(3923785, 16, 3), -(3923789, 16, 3), -(3923790, 16, 3), -(3925825, 4, 11), -(3929402, 4, 1), -(3975004, 15, 1), -(3975007, 15, 2), -(3975011, 15, 3), -(3975015, 15, 6), -(3975127, 15, 1), -(3975132, 15, 1), -(3975135, 15, 3), -(3975138, 15, 2), -(3975183, 15, 3), -(3975188, 15, 3), -(3975191, 15, 3), -(3975192, 15, 3), -(3975196, 15, 4), -(3975198, 15, 4), -(3975202, 15, 4), -(3975204, 15, 4), -(3975205, 15, 4), -(3975208, 15, 4), -(3975212, 15, 4), -(3975215, 15, 3), -(3975217, 15, 3), -(3975223, 15, 3), -(3975229, 15, 3), -(3975232, 15, 3), -(3975233, 15, 5), -(3975242, 15, 5), -(3975244, 15, 5), -(3975251, 15, 6), -(3975256, 15, 5), -(3975261, 15, 7), -(3975267, 15, 6), -(3975272, 15, 6), -(3975278, 15, 6), -(3975282, 15, 6), -(3975283, 15, 6), -(3975285, 15, 6), -(4091012, 31, 1), -(4091018, 31, 2), -(4091019, 31, 2), -(4092388, 31, 1), -(4092418, 31, 3), -(4092425, 31, 4), -(4092429, 31, 4), -(4092430, 31, 7), -(4092431, 31, 9), -(4092432, 31, 8), -(4092433, 31, 4), -(4092435, 31, 7), -(4092436, 31, 4), -(4092437, 31, 4), -(4092438, 31, 10), -(4092439, 31, 10), -(4092440, 31, 10), -(4092444, 31, 11), -(4092449, 31, 11), -(4092471, 31, 3), -(4092472, 31, 3), -(4092534, 31, 1), -(4092536, 31, 2), -(4092537, 31, 2), -(4092538, 31, 3), -(4092539, 31, 3), -(4092540, 31, 4), -(4092541, 31, 4), -(4092542, 31, 7), -(4092543, 31, 7), -(4092544, 31, 8), -(4092545, 31, 4), -(4092546, 31, 9), -(4092547, 31, 10), -(4092548, 31, 11), -(4098244, 20, 1), -(4098246, 20, 2), -(4098252, 20, 2), -(4098653, 20, 2), -(4098655, 20, 3), -(4098662, 20, 5), -(4098665, 20, 6), -(4098675, 20, 6), -(4098680, 20, 7), -(4098686, 20, 8), -(4098719, 20, 10), -(4098723, 20, 10), -(4098733, 20, 12), -(4098786, 20, 1), -(4098790, 20, 1), -(4098794, 20, 1), -(4098812, 20, 1), -(4098843, 20, 4), -(4098858, 20, 2), -(4098869, 20, 2), -(4098978, 20, 5), -(4098984, 20, 3), -(4098990, 20, 3), -(4098991, 20, 3), -(4098996, 20, 4), -(4099007, 20, 4), -(4099014, 20, 7), -(4099017, 20, 6), -(4099024, 20, 6), -(4099214, 20, 6), -(4099220, 20, 6), -(4099234, 20, 6), -(4099313, 20, 8), -(4099338, 20, 8), -(4099357, 20, 8), -(4099376, 20, 9), -(4099424, 20, 10), -(4099430, 20, 10), -(4099464, 20, 12), -(4101783, 24, 1), -(4101846, 24, 2), -(4101870, 24, 3), -(4101889, 24, 4), -(4101896, 24, 4), -(4101900, 24, 5), -(4101904, 24, 5), -(4101907, 24, 6), -(4101914, 24, 8), -(4102354, 24, 1), -(4102358, 24, 1), -(4102359, 24, 1), -(4102360, 24, 1), -(4102361, 24, 2), -(4102365, 24, 3), -(4102371, 24, 3), -(4102372, 24, 3), -(4102373, 24, 3), -(4102375, 24, 6), -(4102377, 24, 4), -(4102378, 24, 4), -(4102379, 24, 4), -(4102381, 24, 8), -(4103415, 31, 4), -(4107623, 41, 8), -(4121883, 45, 1), -(4121897, 45, 2), -(4121909, 45, 3), -(4121915, 45, 3), -(4121922, 45, 4), -(4123952, 45, 4), -(4123953, 45, 5), -(4125929, 45, 6), -(4125941, 45, 7), -(4125947, 45, 8), -(4125950, 45, 8), -(4125987, 45, 9), -(4125993, 45, 10), -(4126016, 45, 11), -(4126017, 45, 8), -(4126028, 45, 11), -(4126039, 45, 12), -(4126040, 45, 13), -(4126043, 45, 13), -(4126044, 45, 13), -(4126049, 45, 14), -(4126052, 45, 15), -(4126375, 45, 2), -(4126377, 45, 3), -(4126378, 45, 7), -(4126383, 45, 11), -(4126384, 45, 11), -(4126386, 45, 11), -(4126394, 45, 15), -(4127125, 45, 8), -(4127126, 45, 8), -(4127132, 45, 9), -(4127137, 45, 12), -(4127141, 45, 12), -(4142953, 41, 10), -(4142959, 41, 13), -(4142960, 41, 9), -(4143007, 41, 8), -(4143009, 41, 9), -(4143011, 41, 8), -(4143012, 41, 11), -(4143014, 41, 9), -(4143143, 41, 13), -(4143144, 41, 13), -(4143146, 41, 13), -(4143147, 41, 13), -(4143154, 41, 13), -(4161435, 15, 1), -(4161439, 15, 3), -(4161440, 15, 3), -(4161442, 15, 3), -(4161449, 15, 4), -(4161453, 15, 4), -(4161456, 15, 6), -(4161457, 15, 6), -(4161462, 15, 5), -(4162133, 17, 1), -(4162142, 17, 3), -(4162143, 17, 4), -(4162144, 17, 5), -(4162145, 17, 6), -(4162147, 17, 8), -(4162148, 17, 9), -(4162150, 17, 11), -(4162153, 17, 12), -(4162154, 17, 13), -(4162155, 17, 13), -(4162317, 17, 10), -(4162319, 17, 7), -(4162320, 17, 6), -(4162321, 17, 6), -(4162322, 17, 12), -(4162323, 17, 4), -(4162324, 17, 5), -(4162325, 17, 2), -(4162326, 17, 2), -(4162328, 17, 2), -(4162329, 17, 1), -(4164611, 17, 12), -(4164620, 17, 6), -(4164648, 17, 8), -(4164654, 17, 8), -(4164656, 17, 8), -(4164663, 17, 10), -(4164693, 17, 6), -(4164698, 17, 4), -(4164699, 17, 4), -(4164700, 17, 5), -(4164701, 17, 5), -(4164706, 17, 5), -(4164707, 17, 5), -(4164708, 17, 5), -(4164715, 17, 2), -(4164723, 17, 1), -(4164725, 17, 2), -(4164727, 17, 2), -(4164728, 17, 2), -(4164731, 17, 4), -(4164732, 17, 4), -(4164735, 17, 1), -(4164739, 17, 3), -(4164740, 17, 1), -(4164742, 17, 1), -(4164846, 18, 2), -(4164858, 18, 1), -(4164859, 18, 1), -(4164861, 18, 1), -(4164905, 18, 3), -(4164912, 18, 4), -(4164914, 18, 4), -(4164917, 18, 5), -(4164923, 18, 6), -(4164924, 18, 7), -(4164926, 18, 7), -(4164929, 18, 7), -(4164931, 18, 8), -(4164934, 18, 6), -(4164937, 18, 9), -(4164938, 18, 9), -(4164940, 18, 10), -(4164942, 18, 11), -(4164944, 18, 11), -(4164947, 18, 13), -(4164950, 18, 15), -(4164952, 18, 16), -(4164953, 18, 17), -(4164955, 18, 18), -(4164956, 18, 18), -(4164957, 18, 18), -(4164958, 18, 19), -(4165006, 18, 1), -(4165007, 18, 1), -(4165009, 18, 1), -(4165010, 18, 1), -(4165044, 18, 3), -(4165045, 18, 3), -(4165048, 18, 2), -(4165049, 18, 2), -(4165050, 18, 2), -(4165051, 18, 2), -(4165052, 18, 2), -(4165053, 18, 2), -(4165054, 18, 2), -(4165055, 18, 2), -(4165056, 18, 1), -(4165057, 18, 3), -(4165058, 18, 3), -(4165059, 18, 3), -(4165061, 18, 4), -(4165063, 18, 4), -(4165064, 18, 4), -(4165065, 18, 4), -(4165066, 18, 4), -(4165079, 18, 7), -(4165089, 18, 7), -(4165091, 18, 6), -(4165095, 18, 7), -(4165097, 18, 8), -(4165098, 18, 8), -(4165101, 18, 9), -(4165132, 18, 10), -(4165138, 18, 11), -(4165141, 18, 13), -(4165146, 18, 4), -(4165147, 18, 14), -(4165587, 18, 13), -(4165761, 19, 1), -(4165762, 19, 3), -(4165763, 19, 4), -(4165767, 19, 2), -(4165768, 19, 1), -(4165770, 19, 3), -(4165774, 19, 1), -(4165784, 19, 7), -(4165786, 19, 6), -(4165787, 19, 6), -(4165788, 19, 7), -(4165789, 19, 1), -(4165790, 19, 4), -(4165791, 19, 1), -(4165792, 19, 3), -(4165793, 19, 7), -(4165795, 19, 7), -(4165798, 19, 1), -(4165826, 19, 2), -(4165830, 30, 1), -(4165834, 30, 3), -(4165838, 30, 6), -(4165843, 30, 1), -(4165845, 30, 4), -(4165862, 30, 3), -(4165870, 30, 5), -(4170242, 8, 1), -(4170252, 8, 2), -(4170268, 8, 2), -(4170279, 8, 3), -(4170285, 8, 4), -(4170288, 8, 5), -(4170294, 8, 6), -(4170300, 8, 7), -(4170349, 8, 8), -(4170358, 8, 9), -(4170364, 8, 10), -(4170368, 8, 11), -(4170389, 8, 11), -(4170407, 8, 4), -(4170413, 8, 6), -(4170416, 8, 3), -(4170420, 8, 5), -(4170421, 8, 5), -(4170429, 8, 9), -(4170439, 8, 10), -(4170443, 8, 11), -(4170448, 8, 11), -(4175720, 16, 7), -(4191057, 6, 4), -(4191058, 6, 5), -(4191060, 6, 5), -(4191062, 6, 4), -(4191063, 6, 4), -(4191065, 6, 4), -(4191066, 6, 7), -(4191069, 6, 7), -(4191070, 6, 6), -(4191075, 6, 5), -(4191081, 6, 6), -(4200506, 17, 4), -(4200508, 17, 2), -(4203968, 20, 5), -(4203976, 20, 5), -(4203984, 20, 5), -(4204051, 21, 11), -(4204061, 21, 3), -(4204069, 21, 6), -(4204078, 21, 12), -(4204084, 21, 12), -(4204092, 21, 6), -(4218112, 20, 2), -(4218256, 20, 6), -(4218258, 20, 6), -(4218268, 21, 6), -(4230667, 32, 1), -(4230669, 32, 2), -(4230670, 32, 3), -(4230673, 32, 6), -(4230674, 32, 6), -(4230675, 32, 6), -(4230676, 32, 7), -(4230677, 32, 9), -(4230682, 32, 4), -(4230684, 32, 6), -(4230685, 32, 6), -(4230686, 32, 6), -(4230687, 32, 7), -(4230689, 32, 9), -(4230690, 32, 1), -(4235276, 38, 2), -(4235277, 38, 4), -(4235282, 38, 6), -(4235309, 38, 7), -(4235312, 38, 10), -(4236358, 15, 6), -(4237484, 38, 3), -(4237485, 38, 4), -(4237487, 38, 8), -(4237488, 38, 10), -(4238993, 86, 6), -(4238994, 86, 7), -(4238996, 86, 7), -(4239000, 86, 7), -(4239001, 86, 7), -(4239002, 86, 8), -(4239003, 86, 9), -(4239004, 86, 10), -(4239005, 86, 10), -(4239009, 86, 12), -(4241594, 20, 1), -(4241611, 21, 1), -(4241612, 21, 2), -(4241928, 45, 12), -(4242048, 45, 7), -(4242604, 15, 1), -(4242605, 15, 1), -(4242609, 15, 1), -(4242610, 15, 1), -(4247747, 53, 1), -(4247847, 53, 1), -(4247850, 53, 1), -(4247852, 53, 1), -(4247856, 53, 1), -(4247877, 53, 2), -(4247879, 53, 2), -(4247884, 53, 3), -(4247885, 53, 2), -(4247888, 53, 3), -(4247906, 53, 4), -(4247927, 53, 4), -(4248224, 53, 5), -(4248230, 53, 5), -(4248232, 53, 5), -(4248236, 53, 5), -(4248241, 53, 5), -(4248262, 53, 6), -(4248265, 53, 6), -(4248272, 53, 7), -(4248277, 53, 7), -(4248291, 53, 8), -(4248293, 53, 9), -(4248308, 53, 9), -(4248340, 53, 6), -(4248346, 53, 10), -(4248351, 53, 10), -(4248359, 53, 11), -(4248390, 53, 12), -(4248398, 53, 12), -(4248402, 53, 12), -(4248430, 53, 12), -(4248444, 53, 13), -(4248486, 53, 13), -(4248488, 53, 13), -(4248490, 53, 14), -(4248491, 53, 15), -(4248517, 53, 16), -(4248520, 53, 16), -(4248523, 53, 16), -(4248529, 53, 16), -(4248537, 53, 16), -(4248539, 53, 17), -(4248613, 53, 16), -(4248638, 53, 16), -(4248684, 53, 16), -(4248689, 53, 18), -(4248796, 53, 19), -(4248833, 53, 19), -(4248837, 53, 19), -(4248842, 53, 20), -(4248886, 53, 21), -(4248889, 53, 21), -(4248890, 53, 21), -(4248892, 53, 22), -(4248922, 53, 1), -(4248924, 53, 1), -(4248926, 53, 1), -(4248931, 53, 1), -(4248933, 53, 1), -(4248935, 53, 1), -(4248936, 53, 1), -(4248942, 53, 1), -(4248943, 53, 1), -(4248947, 53, 1), -(4248950, 53, 1), -(4248965, 53, 3), -(4248968, 53, 3), -(4248971, 53, 3), -(4248972, 53, 4), -(4248975, 53, 4), -(4248976, 53, 4), -(4248982, 53, 4), -(4248988, 53, 4), -(4249002, 53, 5), -(4249008, 53, 5), -(4249027, 53, 7), -(4249037, 53, 9), -(4249038, 53, 9), -(4249041, 53, 9), -(4249047, 53, 8), -(4249060, 53, 19), -(4249068, 53, 19), -(4249070, 53, 18), -(4249075, 53, 18), -(4249078, 53, 16), -(4249084, 53, 16), -(4249089, 53, 16), -(4249092, 53, 20), -(4249093, 53, 1), -(4249094, 53, 20), -(4249565, 53, 10), -(4249569, 53, 12), -(4249570, 53, 12), -(4249572, 53, 12), -(4249573, 53, 12), -(4249574, 53, 12), -(4249577, 53, 12), -(4249587, 53, 12), -(4249589, 53, 12), -(4249605, 53, 15), -(4249617, 53, 14), -(4249639, 53, 1), -(4249643, 53, 1), -(4251428, 53, 4), -(4262477, 38, 6), -(4262478, 38, 6), -(4278339, 43, 2), -(4278406, 43, 2), -(4278410, 43, 2), -(4278415, 43, 4), -(4278417, 43, 5), -(4278419, 43, 5), -(4278420, 43, 5), -(4278432, 43, 5), -(4278438, 43, 4), -(4278461, 43, 7), -(4278472, 43, 8), -(4278474, 43, 8), -(4278494, 43, 8), -(4279992, 43, 9), -(4280840, 43, 10), -(4282568, 43, 11), -(4282573, 43, 12), -(4282574, 43, 13), -(4282585, 43, 14), -(4282592, 43, 13), -(4282598, 43, 16), -(4283510, 43, 8), -(4283661, 43, 10), -(4284218, 43, 2), -(4284220, 43, 8), -(4284346, 43, 9), -(4284350, 43, 10), -(4284353, 43, 12), -(4284354, 43, 13), -(4284356, 43, 11), -(4284479, 43, 14), -(4284483, 43, 16), -(4284485, 43, 8), -(4284655, 71, 1), -(4284668, 71, 7), -(4284672, 71, 10), -(4284679, 71, 3), -(4287170, 86, 8), -(4287171, 86, 8), -(4287437, 71, 9), -(4287440, 71, 12), -(4303212, 71, 13), -(4303238, 71, 2), -(4303276, 71, 1), -(4303280, 71, 2), -(4303285, 71, 6), -(4303288, 71, 10), -(4310468, 19, 1), -(4310490, 19, 4), -(4310494, 19, 4), -(4311173, 19, 3), -(4311182, 19, 4), -(4313896, 32, 4), -(4313898, 32, 8), -(4313956, 38, 3), -(4313961, 38, 5), -(4313968, 38, 7), -(4313975, 103, 15), -(4317154, 71, 4), -(4317155, 71, 5), -(4317176, 71, 3), -(4317193, 71, 8), -(4317200, 71, 11), -(4322392, 47, 1), -(4322393, 47, 2), -(4322394, 47, 2), -(4322395, 47, 2), -(4322396, 47, 3), -(4322398, 47, 2), -(4322399, 47, 3), -(4322400, 47, 3), -(4322404, 47, 4), -(4322408, 47, 4), -(4322411, 47, 4), -(4322417, 47, 6), -(4322427, 47, 7), -(4322428, 47, 7), -(4322429, 47, 7), -(4322431, 47, 8), -(4322434, 47, 7), -(4322439, 47, 5), -(4322441, 47, 15), -(4322442, 47, 10), -(4322444, 47, 10), -(4322445, 47, 10), -(4322449, 47, 11), -(4322453, 47, 11), -(4322455, 47, 13), -(4322458, 47, 12), -(4322459, 47, 12), -(4322841, 103, 12), -(4322860, 37, 1), -(4322861, 37, 1), -(4322862, 37, 1), -(4322864, 37, 1), -(4322867, 37, 3), -(4322868, 37, 3), -(4322870, 37, 3), -(4322871, 37, 4), -(4322872, 37, 5), -(4322969, 37, 5), -(4322970, 37, 5), -(4322971, 37, 6), -(4322973, 37, 6), -(4322974, 37, 7), -(4322975, 37, 8), -(4322976, 37, 8), -(4322977, 37, 8), -(4322978, 37, 8), -(4322979, 37, 9), -(4323354, 85, 11), -(4323360, 85, 11), -(4323383, 85, 8), -(4323387, 85, 8), -(4323412, 85, 8), -(4323414, 85, 8), -(4323419, 85, 9), -(4323420, 85, 9), -(4323427, 85, 10), -(4323428, 85, 10), -(4323429, 85, 10), -(4323431, 85, 11), -(4323432, 85, 8), -(4328706, 103, 13), -(4328707, 103, 12), -(4328816, 103, 12), -(4328833, 103, 12), -(4328892, 103, 13), -(4328894, 103, 13), -(4328897, 103, 15), -(4328902, 103, 15), -(4332187, 21, 6), -(4332188, 21, 6), -(4332189, 21, 6), -(4332518, 20, 6), -(4332767, 53, 12), -(4332770, 53, 12), -(4333235, 20, 9), -(4334276, 20, 4), -(4334728, 16, 3), -(4334730, 16, 7), -(4334751, 30, 5), -(4334881, 21, 7), -(4334882, 21, 13), -(4334885, 7, 7), -(4335536, 5, 2), -(4335666, 43, 2), -(4335670, 43, 8), -(4373250, 20, 10), -(4373251, 20, 10), -(4373252, 20, 10), -(4373253, 20, 10), -(4374258, 18, 15), -(4374678, 16, 7), -(4374738, 20, 8), -(4374739, 20, 8), -(4395364, 134, 12), -(4404417, 134, 12), -(4404426, 134, 12), -(4404431, 134, 12), -(4404435, 134, 12), -(4404439, 134, 12), -(4404440, 134, 12), -(4404442, 134, 12), -(4404445, 134, 12), -(4404450, 134, 12), -(4404451, 134, 12), -(4404452, 134, 12), -(4481391, 142, 12), -(4481392, 142, 15), -(4481393, 142, 11), -(4481404, 142, 11), -(4481407, 142, 13), -(4481409, 142, 12), -(4481412, 142, 15), -(4481413, 142, 15), -(4481414, 142, 15), -(4481415, 142, 15), -(4481416, 142, 15), -(4481418, 142, 15), -(4488408, 139, 12), -(4488410, 139, 12), -(4488411, 139, 12), -(4488413, 139, 14), -(4488416, 139, 13), -(4488417, 139, 12), -(4488419, 139, 11), -(4488420, 139, 12), -(4488421, 139, 13), -(4488422, 139, 13), -(4488423, 139, 14), -(4488425, 139, 14), -(4488427, 139, 13), -(4488428, 139, 13), -(4488429, 139, 12), -(4488430, 139, 12), -(4488431, 139, 12), -(4488432, 139, 12), -(4488433, 139, 14), -(4488435, 139, 11), -(4488438, 139, 12), -(4489186, 71, 3), -(4489187, 71, 3), -(4489188, 71, 3), -(4489189, 71, 3), -(4489190, 71, 3), -(4489192, 71, 3), -(4489193, 71, 3), -(4489194, 71, 3), -(4489195, 71, 3), -(4489236, 71, 1), -(4489237, 71, 10), -(4515268, 142, 11), -(4515306, 142, 12), -(4515308, 142, 12), -(4515382, 142, 13), -(4515386, 142, 15), -(4515612, 139, 12), -(4515623, 139, 13), -(4515624, 139, 13), -(4515625, 139, 13), -(4515681, 139, 12), -(4515697, 139, 12), -(4515699, 139, 13), -(4515701, 139, 14), -(4515702, 139, 14), -(4515703, 139, 13), -(4515704, 139, 13), -(4515705, 139, 13), -(4515706, 139, 12), -(4515707, 139, 12), -(4515708, 139, 12), -(4515709, 139, 12), -(4515711, 139, 14), -(4515713, 139, 11), -(4516011, 139, 12), -(4517194, 139, 12), -(4559071, 157, 1), -(4559075, 157, 3), -(4559076, 157, 4), -(4559077, 157, 4), -(4559078, 157, 5), -(4559085, 157, 6), -(4559086, 157, 6), -(4559087, 157, 7), -(4559088, 157, 5), -(4559091, 157, 8), -(4559092, 157, 8), -(4559093, 157, 10), -(4559094, 157, 9), -(4569450, 145, 1), -(4569451, 145, 5), -(4569461, 145, 3), -(4569464, 145, 3), -(4569465, 145, 4), -(4569471, 145, 10), -(4569472, 145, 11), -(4569479, 145, 6), -(4586009, 4, 7), -(4627320, 145, 6), -(4627322, 145, 7), -(4627324, 145, 7), -(4627332, 145, 9), -(4630742, 145, 11), -(4634055, 151, 4), -(4634056, 151, 6), -(4634059, 151, 1), -(4634062, 151, 1), -(4634065, 151, 2), -(4634083, 151, 4), -(4634094, 151, 5), -(4634095, 151, 6), -(4634104, 151, 7), -(4634106, 151, 7), -(4634712, 151, 6), -(4634715, 151, 7), -(4635476, 148, 1), -(4635477, 148, 2), -(4635478, 148, 3), -(4635479, 148, 5), -(4635480, 148, 6), -(4639200, 151, 4), -(4639204, 151, 8), -(4639208, 151, 6), -(4660176, 165, 1), -(4660177, 165, 1), -(4660178, 165, 2), -(4660179, 165, 2), -(4660180, 165, 3), -(4660181, 165, 3), -(4660182, 165, 4), -(4660183, 165, 5), -(4660184, 165, 6), -(4660185, 165, 7), -(4660186, 165, 8), -(4660187, 165, 9), -(4660189, 165, 11), -(4660190, 165, 2), -(4660194, 165, 3), -(4660195, 165, 11), -(4660197, 165, 12), -(4660198, 165, 13), -(4665752, 18, 11), -(4665756, 18, 11), -(4665759, 18, 11), -(4665766, 18, 11), -(4665773, 18, 11), -(4665788, 30, 4), -(4695119, 148, 5), -(4721268, 157, 10), -(4721270, 157, 11), -(4721271, 157, 11), -(4721272, 157, 12), -(4721273, 157, 13), -(4755366, 18, 18), -(4755385, 165, 11), -(4755389, 165, 12), -(4755390, 165, 13), -(4757557, 168, 4), -(4757558, 168, 5), -(4757560, 168, 5), -(4757561, 168, 6), -(4757563, 168, 8), -(4757565, 168, 9), -(4757566, 168, 10), -(4757569, 168, 11), -(4759603, 164, 12), -(4759604, 164, 12), -(4759652, 164, 13), -(4759654, 164, 14), -(4760563, 164, 12), -(4760674, 164, 12), -(4760676, 164, 12), -(4760683, 164, 12), -(4760685, 164, 12), -(4760689, 164, 14), -(4768065, 169, 1), -(4768067, 169, 1), -(4768073, 169, 7), -(4768082, 169, 8), -(4768083, 169, 8), -(4768084, 169, 8), -(4768085, 169, 9), -(4768087, 169, 1), -(4768094, 169, 7), -(4768099, 169, 6), -(4768100, 169, 8), -(4768101, 169, 8), -(4768102, 169, 9), -(4768103, 169, 7), -(4889986, 7, 10), -(4889987, 7, 3), -(4889991, 7, 3), -(4889995, 7, 3), -(4890336, 182, 1), -(4890497, 182, 1), -(4890506, 182, 3), -(4890535, 182, 3), -(4890651, 182, 3), -(4890664, 182, 12), -(4890679, 182, 9), -(4890766, 182, 9), -(4890770, 182, 10), -(4890776, 182, 10), -(4890780, 182, 11), -(4890784, 182, 12), -(4890786, 182, 13), -(4890788, 182, 14), -(4890791, 182, 15), -(4902564, 190, 6), -(4902565, 190, 6), -(4902566, 190, 7), -(4902567, 190, 8), -(4902568, 190, 8), -(4902569, 190, 8), -(4902571, 190, 10), -(4902572, 190, 11), -(4902573, 190, 8), -(4972550, 168, 1), -(4972551, 168, 2), -(4980983, 174, 1), -(4980985, 174, 2), -(4980993, 174, 2), -(4980994, 174, 4), -(4980995, 174, 4), -(4980997, 174, 5), -(4980998, 174, 5), -(4980999, 174, 5), -(4981002, 174, 6), -(4981003, 174, 6), -(4981004, 174, 7), -(4981005, 174, 7), -(4981006, 174, 7), -(4981007, 174, 8), -(4981009, 174, 9), -(4981010, 174, 10), -(4982004, 169, 2), -(4982007, 169, 3), -(4982009, 169, 3), -(4982039, 169, 4), -(4982041, 169, 5), -(4982050, 169, 5), -(4982051, 169, 6), -(5018506, 169, 3), -(5018517, 169, 4), -(5018518, 169, 4), -(5018519, 169, 5), -(5018520, 169, 5), -(5018524, 169, 7), -(5018525, 169, 7), -(5018526, 169, 9), -(5018528, 169, 9), -(5032226, 182, 3), -(5034828, 182, 15), -(5034833, 182, 15), -(5034834, 182, 15), -(5119555, 169, 3), -(5119560, 169, 3), -(5321547, 190, 11), -(5321639, 190, 7), -(5348496, 182, 10), -(5476910, 182, 3), -(5485941, 182, 9), -(5579669, 203, 10), -(5680661, 203, 10), -(5681112, 203, 9), -(5681115, 203, 11), -(5681121, 203, 10), -(5681124, 85, 11), -(5681153, 203, 10), -(5681166, 203, 11), -(5759673, 243, 1), -(5759683, 243, 5), -(5759685, 243, 5), -(5759692, 243, 6), -(5759696, 243, 7), -(5759698, 243, 9), -(5759701, 243, 11), -(5759705, 243, 12), -(5759706, 243, 14), -(5759708, 243, 14), -(5762435, 243, 4), -(5762437, 243, 8), -(5762441, 243, 14), -(5795788, 252, 3), -(5795795, 252, 3), -(5795796, 252, 3), -(5840909, 252, 5), -(5840914, 252, 6), -(5840915, 252, 7), -(5840920, 252, 10), -(5840923, 252, 6), -(5858542, 239, 5), -(5864957, 230, 1), -(5865261, 230, 2), -(5865270, 230, 2), -(5865275, 230, 5), -(5865286, 230, 1), -(5865289, 230, 2), -(5868146, 243, 2), -(5868148, 243, 3), -(5868150, 243, 4), -(5868156, 243, 8), -(5868159, 243, 9), -(5868162, 243, 13), -(5868163, 243, 15), -(5874028, 237, 3), -(5874029, 237, 4), -(5874030, 237, 1), -(5874031, 237, 2), -(5874032, 237, 3), -(5878769, 248, 1), -(5879221, 241, 1), -(5896017, 211, 15), -(5908552, 252, 12), -(5908839, 248, 1), -(5908841, 248, 2), -(5908844, 248, 2), -(5908846, 248, 3), -(5908848, 248, 3), -(5908851, 248, 5), -(5908859, 248, 6), -(5908863, 248, 6), -(5908868, 248, 6), -(5908869, 248, 6), -(5909356, 248, 3), -(5909364, 248, 1), -(5909385, 248, 1), -(5909746, 211, 15), -(5909768, 211, 15), -(5909769, 211, 15), -(5909770, 211, 15), -(5909773, 211, 15), -(5909778, 211, 15), -(5909929, 214, 13), -(5909946, 214, 13), -(5909947, 214, 13), -(5909948, 214, 13), -(5909950, 214, 13), -(5909951, 214, 13), -(5909952, 214, 13), -(5909953, 214, 13), -(5909980, 214, 13), -(5910101, 216, 28), -(5910102, 216, 28), -(5910115, 216, 28), -(5910122, 216, 28), -(5910126, 216, 28), -(5910127, 216, 28), -(5910134, 216, 28), -(5910141, 216, 28), -(5910144, 216, 28), -(5910157, 216, 28), -(5910168, 216, 28), -(5910298, 255, 3), -(5910299, 255, 4), -(5910301, 239, 3), -(5910302, 239, 2), -(5910303, 239, 3), -(5910305, 239, 2), -(5910306, 239, 2), -(5910307, 239, 2), -(5910308, 239, 2), -(5911128, 241, 2), -(5911129, 241, 2), -(5911131, 241, 3), -(5911132, 241, 3), -(5911133, 241, 3), -(5911136, 241, 4), -(5911137, 241, 4), -(5911139, 241, 4), -(5911141, 241, 4), -(5911142, 241, 5), -(5911143, 241, 6), -(5911144, 241, 6), -(5911145, 241, 6), -(5911146, 241, 6), -(5911147, 241, 6), -(5911148, 241, 7), -(5911151, 241, 6), -(5911154, 241, 8), -(5911155, 241, 7), -(5911158, 241, 8), -(5911159, 241, 10), -(5911164, 241, 11), -(5911166, 241, 12), -(5911167, 241, 12), -(5911168, 241, 12), -(5911169, 241, 12), -(5911173, 241, 13), -(5911174, 241, 13), -(5911175, 241, 13), -(5911176, 241, 13), -(5911184, 241, 14), -(5911193, 241, 12), -(5911200, 241, 13), -(5911204, 241, 12), -(5911207, 241, 13), -(5911208, 241, 15), -(5913190, 213, 6), -(5913193, 214, 13), -(5913203, 216, 28), -(5915489, 211, 15), -(5915512, 211, 15), -(5915513, 211, 15), -(5915517, 211, 15), -(5915539, 211, 15), -(5915553, 211, 15), -(5915580, 211, 15), -(5915598, 211, 15), -(5915620, 211, 15), -(5915630, 211, 15), -(5915631, 211, 15), -(5915632, 211, 15), -(5915635, 211, 15), -(5915734, 211, 15), -(5915736, 211, 15), -(5915737, 211, 15), -(5915739, 211, 15), -(5915740, 211, 15), -(5915742, 211, 15), -(5917284, 211, 15), -(5917285, 211, 15), -(5917286, 211, 15), -(5917287, 211, 15), -(5917288, 211, 15), -(5917289, 211, 15), -(5917290, 211, 15), -(5917292, 211, 15), -(5917294, 211, 15), -(5917313, 211, 15), -(5917314, 211, 15), -(5917315, 211, 15), -(5917318, 211, 15), -(5917319, 211, 15), -(5917320, 211, 15), -(5917322, 211, 15), -(5917323, 211, 15), -(5917330, 211, 15), -(5917338, 211, 15), -(5917350, 211, 15), -(5917360, 211, 15), -(5917362, 211, 15), -(5917363, 211, 15), -(5917364, 211, 15), -(5919748, 213, 6), -(5919753, 213, 6), -(5919755, 213, 6), -(5919756, 213, 6), -(5919791, 213, 6), -(5919812, 213, 6), -(5919814, 213, 6), -(5919815, 213, 6), -(5919816, 213, 6), -(5919818, 213, 6), -(5919824, 213, 6), -(5919826, 213, 6), -(5919832, 213, 6), -(5919835, 213, 6), -(5919848, 213, 6), -(5919851, 213, 6), -(5919853, 213, 6), -(5919854, 213, 6), -(5919855, 213, 6), -(5919859, 213, 6), -(5919860, 213, 6), -(5919868, 213, 6), -(5919870, 213, 6), -(5919908, 213, 6), -(5919912, 213, 6), -(5919927, 213, 6), -(5919931, 213, 6), -(5919973, 213, 6), -(5920107, 213, 6), -(5920109, 213, 6), -(5920110, 213, 6), -(5920131, 213, 6), -(5920132, 213, 6), -(5920134, 213, 6), -(5920142, 213, 6), -(5920147, 213, 6), -(5921241, 214, 13), -(5921242, 214, 13), -(5921246, 214, 13), -(5921247, 214, 13), -(5921249, 214, 13), -(5921250, 214, 13), -(5921251, 214, 13), -(5921252, 214, 13), -(5921253, 214, 13), -(5921254, 214, 13), -(5921260, 214, 13), -(5921262, 214, 13), -(5921264, 214, 13), -(5921265, 214, 13), -(5921266, 214, 13), -(5921267, 214, 13), -(5921268, 214, 13), -(5921273, 214, 13), -(5921274, 214, 13), -(5921275, 214, 13), -(5921276, 214, 13), -(5921277, 214, 13), -(5921278, 214, 13), -(5921279, 214, 13), -(5921280, 214, 13), -(5921281, 214, 13), -(5921283, 214, 13), -(5921287, 214, 13), -(5921288, 214, 13), -(5921290, 214, 13), -(5921292, 214, 13), -(5921858, 216, 28), -(5921871, 216, 28), -(5921880, 216, 28), -(5921881, 216, 28), -(5921882, 216, 28), -(5921937, 216, 28), -(5921940, 216, 28), -(5921941, 216, 28), -(5921942, 216, 28), -(5921945, 216, 28), -(5921953, 216, 28), -(5921955, 216, 28), -(5921956, 216, 28), -(5921962, 216, 28), -(5921966, 216, 28), -(5921968, 216, 28), -(5921969, 216, 28), -(5921970, 216, 28), -(5921980, 216, 28), -(5921981, 216, 28), -(5921982, 216, 28), -(5921987, 216, 28), -(5921988, 216, 28), -(5921996, 216, 28), -(5921998, 216, 28), -(5921999, 216, 28), -(5922000, 216, 28), -(5922002, 216, 28), -(5922004, 216, 28), -(5922005, 216, 28), -(5922006, 216, 28), -(5922007, 216, 28), -(5922008, 216, 28), -(5922009, 216, 28), -(5922010, 216, 28), -(5922013, 216, 28), -(5922559, 216, 28), -(5922560, 216, 28), -(5925606, 211, 15), -(5925609, 211, 15), -(5925610, 211, 15), -(5925611, 211, 15), -(5925612, 211, 15), -(5925613, 211, 15), -(5925616, 211, 15), -(5925618, 211, 15), -(5925619, 211, 15), -(5925620, 211, 15), -(5925622, 211, 15), -(5925623, 211, 15), -(5925808, 211, 15), -(5925812, 211, 15), -(5925813, 211, 15), -(5925814, 211, 15), -(5925815, 211, 15), -(5925817, 211, 15), -(5925819, 211, 15), -(5925820, 211, 15), -(5925821, 211, 15), -(5925823, 211, 15), -(5925825, 211, 15), -(5925827, 211, 15), -(5925830, 211, 15), -(5925835, 211, 15), -(5925836, 211, 15), -(5925837, 211, 15), -(5925838, 211, 15), -(5925840, 211, 15), -(5925841, 211, 15), -(5925842, 211, 15), -(5925844, 211, 15), -(5925845, 211, 15), -(5925848, 211, 15), -(5925849, 211, 15), -(5925850, 211, 15), -(5925852, 211, 15), -(5925854, 211, 15), -(5925858, 211, 15), -(5925860, 211, 15), -(5926068, 211, 15), -(5926069, 211, 15), -(5926070, 211, 15), -(5926071, 211, 15), -(5926072, 211, 15), -(5926073, 211, 15), -(5926074, 211, 15), -(5926075, 211, 15), -(5926076, 211, 15), -(5926078, 211, 15), -(5926079, 211, 15), -(5926080, 211, 15), -(5926081, 211, 15), -(5926082, 211, 15), -(5926083, 211, 15), -(5926085, 211, 15), -(5926086, 211, 15), -(5926088, 211, 15), -(5926090, 211, 15), -(5926091, 211, 15), -(5926092, 211, 15), -(5926093, 211, 15), -(5926094, 211, 15), -(5926095, 211, 15), -(5926096, 211, 15), -(5926097, 211, 15), -(5926099, 211, 15), -(5926100, 211, 15), -(5926103, 211, 15), -(5926104, 211, 15), -(5926105, 211, 15), -(5926106, 211, 15), -(5926107, 211, 15), -(5926109, 211, 15), -(5926110, 211, 15), -(5926111, 211, 15), -(5926112, 211, 15), -(5926113, 211, 15), -(5926114, 211, 15), -(5926115, 211, 15), -(5926117, 211, 15), -(5926118, 211, 15), -(5926119, 211, 15), -(5926128, 211, 15), -(5926129, 211, 15), -(5926130, 211, 15), -(5926131, 211, 15), -(5926132, 211, 15), -(5926133, 211, 15), -(5926134, 211, 15), -(5926135, 211, 15), -(5926136, 211, 15), -(5926138, 211, 15), -(5926139, 211, 15), -(5926141, 211, 15), -(5926142, 211, 15), -(5926143, 211, 15), -(5926144, 211, 15), -(5926146, 211, 15), -(5926157, 211, 15), -(5926158, 211, 15), -(5926160, 211, 15), -(5926161, 211, 15), -(5926162, 211, 15), -(5926163, 211, 15), -(5926164, 211, 15), -(5926563, 211, 15), -(5926566, 211, 15), -(5926610, 211, 15), -(5926611, 211, 15), -(5926614, 211, 15), -(5926615, 211, 15), -(5926616, 211, 15), -(5926619, 211, 15), -(5926622, 211, 15), -(5926623, 211, 15), -(5926627, 211, 15), -(5926630, 211, 15), -(5926637, 211, 15), -(5926639, 211, 15), -(5926644, 211, 15), -(5926651, 211, 15), -(5926653, 211, 15), -(5926654, 211, 15), -(5926663, 211, 15), -(5926665, 211, 15), -(5926666, 211, 15), -(5926667, 211, 15), -(5926668, 211, 15), -(5926670, 211, 15), -(5926671, 211, 15), -(5926672, 211, 15), -(5926674, 211, 15), -(5926676, 211, 15), -(5926680, 211, 15), -(5926681, 211, 15), -(5926683, 211, 15), -(5926685, 211, 15), -(5926686, 211, 15), -(5926687, 211, 15), -(5926696, 211, 15), -(5926702, 211, 15), -(5926709, 211, 15), -(5926710, 211, 15), -(5926711, 211, 15), -(5926713, 211, 15), -(5926717, 211, 15), -(5926718, 211, 15), -(5926720, 211, 15), -(5926723, 211, 15), -(5926724, 211, 15), -(5926727, 211, 15), -(5926729, 211, 15), -(5926734, 211, 15), -(5926736, 211, 15), -(5926737, 211, 15), -(5926739, 211, 15), -(5926740, 211, 15), -(5926742, 211, 15), -(5926744, 211, 15), -(5926745, 211, 15), -(5926753, 211, 15), -(5926757, 211, 15), -(5926758, 211, 15), -(5926759, 211, 15), -(5926760, 211, 15), -(5927843, 248, 1), -(5927869, 248, 5), -(5927903, 248, 1), -(5927964, 241, 1), -(5927966, 241, 5), -(5927968, 241, 6), -(5927969, 241, 7), -(5927970, 241, 8), -(5927971, 241, 10), -(5927972, 241, 14), -(5927973, 241, 15), -(5930418, 213, 6), -(5930419, 213, 6), -(5930420, 213, 6), -(5930421, 213, 6), -(5930422, 213, 6), -(5930423, 213, 6), -(5930424, 213, 6), -(5930425, 213, 6), -(5930426, 213, 6), -(5930427, 213, 6), -(5930428, 213, 6), -(5930429, 213, 6), -(5930430, 213, 6), -(5930431, 213, 6), -(5930432, 213, 6), -(5930433, 213, 6), -(5930434, 213, 6), -(5930435, 213, 6), -(5930436, 213, 6), -(5930437, 213, 6), -(5930438, 213, 6), -(5930439, 213, 6), -(5930440, 213, 6), -(5930441, 213, 6), -(5930442, 213, 6), -(5930443, 213, 6), -(5930444, 213, 6), -(5930445, 213, 6), -(5930446, 213, 6), -(5930447, 213, 6), -(5930448, 213, 6), -(5930449, 213, 6), -(5930450, 213, 6), -(5930451, 213, 6), -(5930452, 213, 6), -(5930453, 213, 6), -(5930454, 213, 6), -(5930455, 213, 6), -(5930456, 213, 6), -(5930457, 213, 6), -(5930458, 213, 6), -(5930459, 213, 6), -(5930460, 213, 6), -(5930461, 213, 6), -(5930462, 213, 6), -(5930463, 213, 6), -(5930464, 213, 6), -(5930465, 213, 6), -(5930466, 213, 6), -(5930467, 213, 6), -(5930468, 213, 6), -(5930469, 213, 6), -(5930470, 213, 6), -(5930471, 213, 6), -(5930472, 213, 6), -(5930473, 213, 6), -(5930474, 213, 6), -(5930475, 213, 6), -(5930476, 213, 6), -(5930477, 213, 6), -(5930478, 213, 6), -(5930479, 213, 6), -(5930480, 213, 6), -(5930481, 213, 6), -(5930482, 213, 6), -(5930483, 213, 6), -(5930484, 213, 6), -(5930485, 213, 6), -(5930486, 213, 6), -(5930487, 213, 6), -(5930488, 213, 6), -(5930489, 213, 6), -(5930490, 213, 6), -(5930491, 213, 6), -(5930492, 213, 6), -(5930493, 213, 6), -(5930494, 213, 6), -(5930495, 213, 6), -(5930496, 213, 6), -(5930497, 213, 6), -(5930498, 213, 6), -(5930499, 213, 6), -(5930500, 213, 6), -(5933083, 216, 28), -(5933084, 216, 28), -(5933085, 216, 28), -(5933086, 216, 28), -(5933087, 216, 28), -(5933088, 216, 28), -(5933089, 216, 28), -(5933090, 216, 28), -(5933091, 216, 28), -(5933092, 216, 28), -(5933093, 216, 28), -(5933094, 216, 28), -(5933095, 216, 28), -(5933096, 216, 28), -(5933097, 216, 28), -(5933098, 216, 28), -(5933099, 216, 28), -(5933100, 216, 28), -(5933101, 216, 28), -(5933102, 216, 28), -(5933103, 216, 28), -(5933104, 216, 28), -(5933105, 216, 28), -(5933106, 216, 28), -(5933107, 216, 28), -(5933108, 216, 28), -(5933109, 216, 28), -(5933110, 216, 28), -(5933111, 216, 28), -(5933112, 216, 28), -(5933113, 216, 28), -(5933114, 216, 28), -(5933115, 216, 28), -(5933116, 216, 28), -(5933117, 216, 28), -(5933118, 216, 28), -(5933119, 216, 28), -(5933120, 216, 28), -(5933121, 216, 28), -(5933122, 216, 28), -(5933123, 216, 28), -(5933124, 216, 28), -(5933125, 216, 28), -(5933126, 216, 28), -(5933127, 216, 28), -(5933128, 216, 28), -(5933129, 216, 28), -(5933130, 216, 28), -(5933131, 216, 28), -(5933132, 216, 28), -(5933133, 216, 28), -(5933134, 216, 28), -(5933135, 216, 28), -(5933136, 216, 28), -(5933137, 216, 28), -(5933138, 216, 28), -(5933139, 216, 28), -(5933140, 216, 28), -(5933141, 216, 28), -(5933142, 216, 28), -(5933143, 216, 28), -(5933144, 216, 28), -(5933145, 216, 28), -(5933146, 216, 28), -(5933147, 216, 28), -(5933148, 216, 28), -(5933149, 216, 28), -(5933150, 216, 28), -(5933151, 216, 28), -(5933152, 216, 28), -(5933153, 216, 28), -(5933154, 216, 28), -(5933155, 216, 28), -(5933156, 216, 28), -(5933157, 216, 28), -(5933158, 216, 28), -(5933159, 216, 28), -(5933160, 216, 28), -(5933161, 216, 28), -(5933162, 216, 28), -(5933163, 216, 28), -(5933164, 216, 28), -(5933165, 216, 28), -(5933166, 216, 28), -(5933167, 216, 28), -(5933168, 216, 28), -(5933169, 216, 28), -(5933170, 216, 28), -(5933171, 216, 28), -(5933172, 216, 28), -(5933173, 216, 28), -(5933174, 216, 28), -(5933175, 216, 28), -(5933176, 216, 28), -(5933177, 216, 28), -(5933178, 216, 28), -(5933179, 216, 28), -(5933180, 216, 28), -(5933181, 216, 28), -(5933182, 216, 28), -(5933183, 216, 28), -(5933184, 216, 28), -(5933185, 216, 28), -(5933186, 216, 28), -(5933187, 216, 28), -(5933188, 216, 28), -(5933189, 216, 28), -(5933190, 216, 28), -(5933191, 216, 28), -(5933192, 216, 28), -(5933193, 216, 28), -(5933194, 216, 28), -(5933195, 216, 28), -(5933196, 216, 28), -(5933197, 216, 28), -(5933198, 216, 28), -(5933199, 216, 28), -(5933200, 216, 28), -(5933201, 216, 28), -(5933202, 216, 28), -(5933203, 216, 28), -(5933204, 216, 28), -(5933205, 216, 28), -(5933206, 216, 28), -(5933207, 216, 28), -(5933208, 216, 28), -(5933209, 216, 28), -(5933210, 216, 28), -(5933211, 216, 28), -(5933212, 216, 28), -(5933213, 216, 28), -(5933214, 216, 28), -(5933215, 216, 28), -(5933216, 216, 28), -(5933217, 216, 28), -(5933218, 216, 28), -(5933371, 214, 13), -(5933372, 214, 13), -(5933373, 214, 13), -(5933374, 214, 13), -(5933375, 214, 13), -(5933376, 214, 13), -(5933377, 214, 13), -(5933378, 214, 13), -(5933379, 214, 13), -(5933380, 214, 13), -(5933381, 214, 13), -(5933382, 214, 13), -(5933383, 214, 13), -(5933384, 214, 13), -(5933385, 214, 13), -(5933386, 214, 13), -(5933387, 214, 13), -(5933388, 214, 13), -(5933389, 214, 13), -(5933390, 214, 13), -(5933391, 214, 13), -(5933392, 214, 13), -(5933393, 214, 13), -(5933394, 214, 13), -(5933395, 214, 13), -(5933396, 214, 13), -(5933397, 214, 13), -(5933398, 214, 13), -(5933399, 214, 13), -(5933400, 214, 13), -(5933401, 214, 13), -(5933402, 214, 13), -(5933403, 214, 13), -(5933404, 214, 13), -(5933405, 214, 13), -(5933406, 214, 13), -(5933407, 214, 13), -(5933408, 214, 13), -(5933409, 214, 13), -(5933410, 214, 13), -(5933411, 214, 13), -(5933412, 214, 13), -(5933413, 214, 13), -(5933414, 214, 13), -(5933415, 214, 13), -(5933416, 214, 13), -(5933417, 214, 13), -(5933418, 214, 13), -(5933419, 214, 13), -(5933420, 214, 13), -(5933421, 214, 13), -(5933422, 214, 13), -(5933423, 214, 13), -(5933424, 214, 13), -(5933425, 214, 13), -(5933426, 214, 13), -(5933427, 214, 13), -(5933428, 214, 13), -(5933429, 214, 13), -(5933430, 214, 13), -(5933431, 214, 13), -(5933432, 214, 13), -(5933433, 214, 13), -(5933434, 214, 13), -(5933435, 214, 13), -(5933436, 214, 13), -(5933437, 214, 13), -(5933438, 214, 13), -(5933439, 214, 13), -(5933440, 214, 13), -(5933441, 214, 13), -(5933442, 214, 13), -(5933443, 214, 13), -(5933444, 214, 13), -(5933445, 214, 13), -(5933446, 214, 13), -(5933447, 214, 13), -(5933448, 214, 13), -(5933449, 214, 13), -(5933450, 214, 13), -(5933451, 214, 13), -(5933452, 214, 13), -(5933453, 214, 13), -(5933454, 214, 13), -(5933455, 214, 13), -(5933456, 214, 13), -(5933457, 214, 13), -(5933458, 214, 13), -(5933459, 214, 13), -(5933460, 214, 13), -(5933461, 214, 13), -(5933462, 214, 13), -(5933463, 214, 13), -(5933464, 214, 13), -(5933465, 214, 13), -(5933466, 214, 13), -(5933467, 214, 13), -(5933468, 214, 13), -(5933469, 214, 13), -(5933470, 214, 13), -(5933471, 214, 13), -(5933472, 214, 13), -(5933473, 214, 13), -(5933474, 214, 13), -(5933475, 214, 13), -(5933476, 214, 13), -(5933477, 214, 13), -(5933478, 214, 13), -(5933479, 214, 13), -(5933480, 214, 13), -(5933481, 214, 13), -(5933482, 214, 13), -(5933483, 214, 13), -(5933484, 214, 13), -(5933485, 214, 13), -(5933486, 214, 13), -(5933487, 214, 13), -(5933488, 214, 13), -(5933489, 214, 13), -(5933490, 214, 13), -(5933491, 214, 13), -(5933492, 214, 13), -(5933493, 214, 13), -(5933494, 214, 13), -(5933495, 214, 13), -(5933496, 214, 13), -(5933497, 214, 13), -(5933498, 214, 13), -(5933499, 214, 13), -(5934961, 211, 15), -(5934962, 211, 15), -(5934964, 211, 15), -(5934965, 211, 15), -(5935045, 213, 6), -(5935100, 214, 13), -(5935104, 214, 13), -(5935105, 214, 13), -(5935119, 214, 13), -(5935490, 216, 28), -(5935520, 216, 28), -(5935521, 216, 28), -(5935525, 216, 28), -(5936097, 216, 28), -(5936102, 216, 28), -(5936113, 216, 28), -(5936125, 216, 28), -(5936127, 216, 28), -(5936562, 213, 6), -(5937520, 252, 3), -(5937536, 252, 10), -(5937626, 211, 15), -(5937643, 211, 15), -(5937644, 211, 15), -(5937659, 211, 15), -(5937660, 211, 15), -(5937661, 211, 15), -(5937662, 211, 15), -(5937663, 211, 15), -(5937665, 211, 15), -(5937666, 211, 15), -(5937667, 211, 15), -(5937668, 211, 15), -(5937669, 211, 15), -(5937670, 211, 15), -(5937671, 211, 15), -(5937672, 211, 15), -(5937673, 211, 15), -(5937674, 211, 15), -(5937675, 211, 15), -(5937676, 211, 15), -(5937677, 211, 15), -(5937678, 211, 15), -(5937679, 211, 15), -(5937680, 211, 15), -(5937681, 211, 15), -(5937682, 211, 15), -(5937683, 211, 15), -(5937684, 211, 15), -(5937685, 211, 15), -(5937686, 211, 15), -(5937687, 211, 15), -(5937688, 211, 15), -(5937689, 211, 15), -(5937690, 211, 15), -(5937691, 211, 15), -(5937692, 211, 15), -(5937788, 213, 6), -(5937789, 213, 6), -(5937791, 213, 6), -(5937798, 213, 6), -(5937800, 213, 6), -(5937801, 213, 6), -(5937802, 213, 6), -(5937803, 213, 6), -(5937804, 213, 6), -(5937805, 213, 6), -(5938265, 213, 6), -(5938270, 213, 6), -(5938281, 213, 6), -(5938291, 213, 6), -(5938292, 213, 6), -(5938293, 213, 6), -(5938296, 213, 6), -(5938298, 213, 6), -(5938299, 213, 6), -(5938300, 213, 6), -(5938302, 213, 6), -(5938305, 213, 6), -(5938307, 213, 6), -(5938308, 213, 6), -(5938310, 213, 6), -(5938311, 213, 6), -(5938314, 213, 6), -(5938315, 213, 6), -(5938317, 213, 6), -(5938318, 213, 6), -(5938319, 213, 6), -(5938321, 213, 6), -(5938323, 213, 6), -(5938344, 214, 13), -(5938387, 214, 13), -(5938388, 214, 13), -(5938389, 214, 13), -(5938390, 214, 13), -(5938391, 214, 13), -(5938392, 214, 13), -(5938393, 214, 13), -(5938394, 214, 13), -(5938395, 214, 13), -(5938396, 214, 13), -(5938397, 214, 13), -(5938398, 214, 13), -(5938399, 214, 13), -(5938400, 214, 13), -(5938401, 214, 13), -(5938402, 214, 13), -(5938403, 214, 13), -(5938404, 214, 13), -(5938405, 214, 13), -(5938406, 214, 13), -(5938407, 214, 13), -(5938408, 214, 13), -(5938409, 214, 13), -(5938410, 214, 13), -(5938411, 214, 13), -(5938412, 214, 13), -(5938413, 214, 13), -(5938414, 214, 13), -(5938416, 214, 13), -(5938417, 214, 13), -(5938418, 214, 13), -(5938419, 214, 13), -(5938781, 216, 28), -(5938782, 216, 28), -(5938783, 216, 28), -(5938784, 216, 28), -(5938785, 216, 28), -(5938786, 216, 28), -(5938787, 216, 28), -(5938788, 216, 28), -(5938789, 216, 28), -(5938790, 216, 28), -(5938791, 216, 28), -(5938792, 216, 28), -(5938793, 216, 28), -(5938794, 216, 28), -(5938795, 216, 28), -(5938796, 216, 28), -(5938797, 216, 28), -(5938798, 216, 28), -(5938799, 216, 28), -(5938800, 216, 28), -(5938801, 216, 28), -(5938802, 216, 28), -(5938803, 216, 28), -(5938804, 216, 28), -(5938805, 216, 28), -(5938806, 216, 28), -(5938807, 216, 28), -(5938808, 216, 28), -(5938809, 216, 28), -(5938810, 216, 28), -(5938811, 216, 28), -(5938812, 216, 28), -(5938813, 216, 28), -(5938814, 216, 28), -(5938815, 216, 28), -(5938816, 216, 28), -(5953591, 248, 1), -(5953592, 248, 3), -(5960788, 216, 28), -(5960797, 211, 15), -(5960798, 211, 15), -(5960799, 211, 15), -(5960800, 211, 15), -(5960801, 211, 15), -(5960802, 211, 15), -(5960803, 211, 15), -(5960805, 211, 15), -(5960806, 211, 15), -(5960807, 211, 15), -(5964409, 262, 1), -(5964410, 262, 1), -(5964418, 262, 1), -(5964439, 262, 2), -(5964441, 262, 1), -(5964449, 262, 1), -(5964457, 262, 1), -(6032372, 262, 2), -(6046582, 255, 3), -(6070090, 273, 9), -(6070269, 273, 9), -(6070278, 273, 9), -(6095410, 272, 13), -(6098955, 272, 12), -(6123737, 276, 12), -(6123738, 276, 1), -(6123739, 276, 1), -(6123740, 276, 1), -(6123741, 276, 1), -(6123742, 276, 1), -(6123743, 276, 1), -(6123744, 276, 1), -(6123745, 276, 1), -(6123746, 276, 12), -(6161036, 276, 12), -(6161039, 276, 1), -(6161040, 276, 1), -(6161041, 276, 1), -(6161042, 276, 1), -(6161048, 276, 17), -(6161083, 279, 12), -(6163807, 276, 1), -(6163808, 276, 19), -(6163809, 276, 20), -(6163810, 276, 21), -(6163811, 276, 9), -(6163812, 276, 8), -(6163813, 276, 7), -(6163814, 276, 6), -(6163815, 276, 4), -(6163816, 276, 16), -(6163817, 276, 16), -(6163818, 276, 16), -(6170636, 276, 17), -(6170637, 276, 2), -(6170638, 276, 2), -(6170639, 276, 3), -(6170640, 276, 2), -(6170641, 276, 3), -(6170642, 276, 3), -(6170643, 276, 3), -(6170644, 276, 10), -(6170645, 276, 10), -(6170646, 276, 10), -(6170647, 276, 11), -(6170648, 276, 11), -(6170649, 276, 2), -(6170650, 276, 11), -(6170651, 276, 1), -(6170652, 276, 1), -(6170653, 276, 4), -(6170654, 276, 4), -(6170655, 276, 6), -(6170656, 276, 6), -(6170657, 276, 5), -(6170658, 276, 7), -(6170659, 276, 7), -(6170660, 276, 8), -(6170661, 276, 8), -(6170662, 276, 9), -(6170663, 276, 12), -(6170664, 276, 13), -(6170665, 276, 14), -(6170666, 276, 15), -(6170667, 276, 16), -(6170668, 276, 1), -(6170669, 276, 19), -(6170670, 276, 20), -(6170671, 276, 21), -(6170672, 276, 9), -(6170673, 276, 8), -(6170674, 276, 7), -(6170675, 276, 6), -(6170676, 276, 4), -(6170677, 276, 1), -(6171334, 276, 17), -(6171335, 276, 12), -(6171336, 276, 13), -(6171337, 276, 12), -(6171338, 276, 11), -(6171339, 276, 8), -(6171340, 276, 5), -(6171341, 276, 1), -(6171342, 276, 12), -(6234179, 297, 1), -(6234181, 297, 3), -(6234182, 297, 4), -(6234184, 297, 5), -(6234185, 297, 6), -(6234186, 297, 7), -(6234187, 297, 8), -(6234188, 297, 8), -(6234189, 297, 9), -(6234190, 297, 10), -(6236450, 279, 13), -(6236452, 279, 14), -(6236476, 286, 3), -(6236478, 286, 1), -(6236479, 286, 2), -(6236480, 286, 3), -(6236481, 286, 4), -(6236486, 286, 5), -(6236497, 288, 5), -(6236500, 288, 5), -(6236501, 288, 6), -(6236502, 288, 6), -(6236519, 289, 2), -(6238456, 213, 6), -(6238457, 213, 6), -(6238459, 213, 6), -(6242634, 279, 12), -(6242635, 279, 13), -(6242683, 279, 14), -(6268735, 303, 15), -(6268736, 303, 15), -(6271621, 303, 15), -(6280057, 297, 2), -(6280060, 297, 2), -(6280251, 297, 12), -(6280417, 297, 1), -(6280446, 297, 4), -(6280447, 297, 5), -(6280449, 297, 7), -(6280451, 297, 5), -(6280453, 297, 12), -(6288695, 303, 15), -(6331526, 312, 12), -(6402356, 313, 6), -(6402704, 313, 11), -(6407718, 214, 13), -(6407719, 214, 13), -(6407720, 214, 13), -(6407721, 214, 13), -(6407722, 214, 13), -(6421882, 297, 8), -(6515982, 313, 11), -(6564487, 340, 12), -(6599910, 356, 12), -(6599911, 356, 1), -(6599912, 356, 1), -(6599913, 356, 1), -(6599914, 356, 1), -(6599915, 356, 1), -(6599916, 356, 1), -(6599917, 356, 1), -(6599918, 356, 1), -(6599919, 356, 12), -(6599920, 356, 12), -(6599922, 356, 1), -(6599923, 356, 1), -(6599924, 356, 1), -(6599925, 356, 1), -(6599926, 356, 17), -(6599927, 356, 1), -(6599928, 356, 19), -(6599929, 356, 20), -(6599930, 356, 21), -(6599931, 356, 9), -(6599932, 356, 8), -(6599933, 356, 7), -(6599934, 356, 6), -(6599935, 356, 4), -(6599936, 356, 16), -(6599937, 356, 16), -(6599938, 356, 16), -(6599939, 356, 17), -(6599940, 356, 2), -(6599941, 356, 2), -(6599942, 356, 3), -(6599943, 356, 2), -(6599944, 356, 3), -(6599945, 356, 3), -(6599946, 356, 3), -(6599947, 356, 10), -(6599948, 356, 10), -(6599949, 356, 10), -(6599950, 356, 11), -(6599951, 356, 11), -(6599952, 356, 2), -(6599953, 356, 11), -(6599954, 356, 1), -(6599955, 356, 1), -(6599956, 356, 4), -(6599957, 356, 4), -(6599958, 356, 6), -(6599959, 356, 6), -(6599960, 356, 5), -(6599961, 356, 7), -(6599962, 356, 7), -(6599963, 356, 8), -(6599964, 356, 8), -(6599965, 356, 9), -(6599966, 356, 12), -(6599967, 356, 13), -(6599968, 356, 14), -(6599969, 356, 15), -(6599970, 356, 16), -(6599971, 356, 1), -(6599972, 356, 19), -(6599973, 356, 20), -(6599974, 356, 21), -(6599975, 356, 9), -(6599976, 356, 8), -(6599977, 356, 7), -(6599978, 356, 6), -(6599979, 356, 4), -(6599980, 356, 1), -(6599981, 356, 17), -(6599982, 356, 12), -(6599983, 356, 13), -(6599984, 356, 12), -(6599985, 356, 11), -(6599986, 356, 8), -(6599987, 356, 5), -(6599988, 356, 1), -(6599989, 356, 12), -(6622965, 356, 17), -(6627252, 345, 13), -(6627266, 345, 13), -(6740473, 345, 13), -(6782060, 352, 12), -(6784914, 356, 2), -(6784915, 356, 2), -(6787121, 356, 3), -(6886431, 356, 2), -(6890477, 389, 1), -(6891617, 336, 1), -(6891627, 336, 1), -(6891637, 336, 2), -(6891692, 336, 3), -(6891694, 336, 5), -(6893032, 336, 6), -(6893241, 336, 7), -(6893758, 336, 9), -(6893761, 336, 11), -(6893762, 336, 11), -(6922034, 375, 1), -(6942997, 371, 13), -(6942999, 354, 10), -(6943038, 372, 30), -(6943043, 367, 8), -(6943044, 368, 21), -(6943045, 369, 17), -(6950667, 359, 1), -(6950676, 359, 2), -(6950680, 359, 3), -(6950685, 359, 4), -(6950720, 359, 4), -(6950723, 359, 5), -(6950726, 359, 6), -(6950727, 359, 7), -(6950728, 359, 8), -(6950731, 359, 8), -(6950777, 359, 9), -(6950784, 359, 9), -(6950788, 359, 10), -(6950798, 359, 11), -(6950799, 359, 12), -(6950811, 359, 14), -(6950815, 359, 15), -(6950824, 359, 15), -(6950847, 359, 8), -(6950853, 359, 8), -(6951063, 361, 9), -(6953721, 367, 2), -(6953722, 367, 4), -(6953723, 367, 3), -(6953726, 367, 3), -(6953738, 367, 5), -(6953772, 367, 1), -(6953773, 367, 1), -(6953776, 367, 1), -(6953780, 367, 6), -(6953786, 367, 7), -(6953788, 367, 8), -(6953789, 367, 2), -(6953790, 367, 10), -(6953792, 367, 22), -(6953800, 367, 23), -(6953802, 367, 27), -(6953804, 367, 19), -(6953807, 367, 21), -(6953811, 367, 24), -(6953814, 367, 27), -(6953815, 367, 27), -(6953816, 367, 27), -(6953817, 367, 27), -(6953818, 367, 27), -(6953819, 367, 27), -(6953820, 367, 27), -(6954096, 367, 1), -(6954100, 367, 1), -(6954246, 389, 3), -(6954248, 389, 4), -(6954278, 367, 1), -(6954280, 367, 3), -(6954281, 367, 3), -(6954284, 367, 4), -(6954287, 367, 5), -(6954295, 367, 6), -(6954296, 367, 6), -(6954297, 367, 5), -(6954298, 367, 6), -(6954300, 367, 8), -(6954302, 367, 8), -(6954311, 367, 8), -(6954328, 367, 11), -(6954522, 367, 4), -(6954780, 367, 11), -(6954781, 367, 11), -(6954784, 367, 11), -(6954791, 367, 11), -(6955593, 367, 15), -(6955601, 367, 15), -(6955610, 367, 18), -(6955618, 367, 18), -(6955619, 367, 18), -(6955623, 367, 22), -(6955625, 367, 22), -(6955627, 367, 22), -(6955631, 367, 22), -(6955632, 367, 22), -(6955633, 367, 22), -(6955643, 367, 17), -(6955645, 367, 17), -(6955646, 367, 17), -(6955647, 367, 17), -(6955648, 367, 17), -(6955649, 367, 17), -(6955650, 367, 22), -(6955651, 367, 28), -(6955652, 367, 28), -(6955653, 367, 28), -(6955654, 367, 28), -(6955655, 367, 28), -(6955656, 367, 28), -(6955657, 367, 28), -(6955658, 367, 28), -(6955659, 367, 28), -(6955660, 367, 28), -(6955661, 367, 28), -(6955662, 367, 22), -(6955663, 367, 28), -(6955664, 367, 28), -(6955666, 367, 28), -(6955667, 367, 20), -(6957295, 375, 1), -(6957309, 375, 2), -(6957314, 375, 2), -(6957316, 375, 2), -(6957345, 375, 4), -(6957347, 375, 5), -(6957348, 375, 5), -(6957349, 375, 6), -(6957357, 375, 6), -(6957359, 375, 7), -(6957361, 375, 8), -(6957363, 375, 8), -(6957364, 375, 10), -(6957365, 375, 10), -(6957366, 375, 11), -(6957367, 375, 11), -(6957368, 375, 12), -(6957369, 375, 13), -(6957370, 375, 13), -(6958837, 368, 1), -(6958838, 368, 16), -(6958839, 368, 13), -(6958840, 368, 13), -(6958841, 368, 13), -(6958842, 368, 17), -(6958843, 368, 17), -(6959180, 368, 18), -(6959190, 368, 30), -(6959196, 368, 29), -(6959201, 368, 29), -(6959202, 368, 29), -(6959204, 368, 29), -(6959205, 368, 29), -(6959210, 368, 28), -(6959270, 368, 20), -(6959276, 368, 20), -(6959284, 368, 20), -(6959315, 368, 20), -(6959321, 368, 20), -(6959322, 368, 20), -(6959332, 368, 20), -(6959337, 368, 21), -(6959418, 368, 9), -(6959448, 368, 6), -(6967602, 368, 22), -(6967981, 368, 22), -(6968551, 368, 22), -(6969053, 368, 22), -(6969094, 368, 8), -(6969098, 368, 8), -(6969100, 368, 8), -(6969102, 368, 8), -(6969105, 368, 8), -(6969117, 368, 8), -(6969118, 368, 8), -(6969119, 368, 8), -(6969120, 368, 8), -(6969121, 368, 8), -(6969122, 368, 8), -(6969455, 396, 1), -(6969457, 396, 2), -(6969461, 396, 2), -(6969463, 396, 3), -(6969464, 396, 3), -(6969467, 396, 3), -(6969468, 396, 3), -(6969470, 396, 5), -(6969475, 396, 6), -(6969478, 396, 6), -(6969486, 396, 7), -(6969492, 396, 7), -(6969496, 396, 7), -(6969507, 396, 7), -(6969509, 396, 8), -(6969513, 396, 7), -(6969517, 396, 9), -(6969520, 396, 10), -(6969521, 396, 10), -(6969607, 396, 11), -(6969611, 396, 12), -(6969612, 396, 13), -(6969618, 368, 24), -(6969620, 368, 22), -(6969622, 368, 22), -(6969626, 368, 26), -(6969630, 368, 25), -(6969632, 368, 25), -(6969633, 368, 25), -(6969635, 368, 25), -(6970815, 369, 29), -(6970818, 369, 30), -(6970820, 369, 28), -(6970822, 369, 28), -(6970824, 369, 26), -(6970826, 369, 28), -(6970827, 369, 28), -(6970858, 369, 30), -(6970860, 369, 30), -(6970861, 369, 21), -(6970863, 369, 22), -(6971003, 369, 15), -(6971057, 369, 13), -(6971058, 369, 15), -(6971059, 369, 12), -(6971060, 369, 13), -(6971062, 369, 13), -(6971063, 369, 1), -(6971064, 369, 1), -(6971065, 369, 2), -(6971068, 369, 2), -(6971069, 369, 2), -(6971070, 369, 2), -(6971072, 369, 2), -(6971073, 369, 2), -(6971075, 369, 13), -(6971077, 369, 26), -(6971084, 369, 17), -(6971185, 369, 5), -(6971191, 369, 5), -(6971193, 369, 6), -(6971194, 369, 6), -(6971199, 369, 4), -(6971201, 369, 4), -(6971202, 369, 4), -(6971218, 369, 7), -(6971225, 369, 3), -(6971339, 369, 3), -(6971342, 369, 3), -(6971343, 369, 4), -(6971345, 369, 9), -(6971346, 369, 9), -(6971347, 369, 8), -(6971349, 369, 8), -(6971350, 369, 8), -(6971351, 369, 9), -(6971352, 369, 9), -(6971353, 369, 9), -(6971386, 369, 8), -(6971395, 369, 8), -(6971398, 369, 8), -(6971399, 369, 8), -(6971401, 369, 8), -(6971402, 369, 8), -(6971404, 369, 8), -(6971406, 369, 8), -(6971407, 369, 8), -(6971412, 369, 19), -(6971414, 369, 19), -(6971416, 369, 19), -(6971418, 369, 19), -(6971424, 369, 20), -(6971428, 369, 21), -(6971432, 369, 21), -(6971460, 369, 18), -(6971461, 369, 16), -(6971463, 369, 16), -(6971464, 369, 1), -(6971465, 369, 1), -(6971466, 369, 1), -(6971467, 369, 1), -(6971468, 369, 1), -(6971471, 369, 13), -(6971479, 369, 27), -(6971482, 369, 27), -(6971969, 369, 27), -(6971973, 369, 26), -(6971977, 369, 25), -(6971980, 369, 25), -(6971982, 369, 25), -(6971983, 369, 25), -(6971984, 369, 25), -(6971985, 369, 25), -(6971986, 369, 25), -(6971989, 369, 15), -(6971991, 369, 13), -(6971993, 369, 13), -(6971994, 369, 15), -(6971996, 369, 17), -(6971998, 369, 17), -(6972099, 371, 4), -(6972116, 371, 4), -(6972119, 371, 2), -(6972120, 371, 2), -(6972122, 371, 3), -(6972123, 371, 2), -(6972124, 371, 10), -(6972127, 371, 1), -(6972129, 371, 10), -(6972130, 371, 1), -(6972131, 371, 27), -(6972132, 371, 7), -(6972136, 371, 2), -(6972138, 371, 1), -(6972141, 371, 2); -INSERT INTO `discoveryinfo` (`id`, `map_id`, `discover_id`) VALUES -(6972145, 371, 2), -(6972153, 371, 4), -(6972155, 371, 3), -(6972157, 371, 3), -(6972158, 371, 3), -(6972169, 371, 10), -(6972171, 371, 12), -(6972175, 371, 12), -(6972176, 371, 12), -(6972422, 371, 12), -(6972423, 371, 12), -(6972424, 371, 12), -(6973154, 371, 12), -(6973156, 371, 12), -(6973157, 371, 11), -(6973158, 371, 11), -(6973160, 371, 11), -(6973163, 371, 11), -(6973166, 371, 11), -(6973168, 371, 22), -(6973172, 371, 21), -(6973186, 371, 20), -(6973189, 371, 23), -(6973192, 371, 23), -(6973193, 371, 24), -(6973200, 371, 26), -(6973201, 371, 23), -(6973209, 371, 28), -(6973213, 371, 30), -(6973214, 371, 29), -(6973215, 371, 23), -(6973223, 371, 29), -(6973224, 371, 29), -(6973225, 371, 17), -(6973231, 371, 17), -(6973232, 371, 16), -(6973233, 371, 15), -(6973236, 371, 16), -(6973237, 371, 16), -(6973238, 371, 17), -(6973241, 371, 17), -(6973242, 371, 16), -(6973243, 371, 17), -(6973251, 371, 13), -(6973906, 371, 8), -(6973923, 371, 8), -(6973969, 371, 7), -(6973991, 371, 7), -(6973998, 371, 7), -(6974005, 371, 19), -(6974006, 371, 19), -(6974007, 371, 19), -(6975746, 371, 12), -(6976755, 354, 5), -(6976758, 354, 3), -(6976760, 354, 10), -(6976762, 354, 9), -(6976763, 354, 8), -(6976765, 354, 28), -(6976768, 354, 30), -(6976773, 354, 21), -(6976823, 354, 10), -(6977088, 354, 23), -(6977089, 354, 22), -(6977100, 354, 24), -(6977101, 354, 24), -(6977102, 354, 25), -(6977106, 354, 19), -(6977145, 354, 18), -(6977146, 354, 17), -(6977148, 354, 1), -(6977200, 354, 3), -(6977202, 354, 6), -(6977203, 354, 6), -(6977204, 354, 6), -(6977205, 354, 3), -(6977208, 354, 6), -(6977254, 354, 28), -(6977257, 354, 30), -(6977258, 354, 30), -(6977260, 354, 30), -(6977261, 354, 30), -(6977262, 354, 30), -(6977275, 354, 30), -(6977280, 354, 30), -(6977285, 354, 30), -(6977286, 354, 30), -(6977287, 354, 30), -(6977290, 354, 30), -(6977293, 354, 30), -(6977335, 354, 30), -(6977436, 354, 28), -(6977459, 354, 26), -(6977464, 354, 26), -(6977465, 354, 26), -(6977467, 354, 26), -(6977470, 354, 26), -(6977472, 354, 26), -(6977478, 354, 25), -(6977481, 354, 25), -(6977488, 354, 25), -(6977489, 354, 25), -(6977495, 354, 24), -(6977497, 354, 24), -(6977499, 354, 22), -(6977502, 354, 22), -(6977509, 354, 22), -(6977514, 354, 22), -(6977518, 354, 22), -(6977533, 354, 22), -(6977552, 354, 22), -(6977561, 354, 10), -(6977566, 354, 16), -(6977567, 354, 16), -(6977570, 354, 19), -(6977576, 354, 19), -(6977579, 354, 19), -(6977581, 354, 13), -(6977586, 354, 12), -(6977591, 354, 12), -(6977592, 354, 12), -(6977594, 354, 13), -(6977649, 354, 19), -(6977651, 354, 19), -(6979969, 372, 3), -(6979985, 372, 3), -(6979987, 372, 3), -(6980003, 372, 3), -(6980011, 372, 5), -(6980019, 372, 5), -(6980024, 372, 8), -(6980026, 372, 8), -(6980073, 372, 5), -(6980078, 372, 30), -(6980079, 372, 30), -(6980080, 372, 30), -(6980082, 372, 30), -(6980083, 372, 30), -(6980084, 372, 30), -(6980087, 372, 30), -(6980090, 372, 30), -(6980108, 372, 21), -(6980117, 372, 20), -(6980124, 372, 20), -(6980126, 372, 20), -(6980128, 372, 18), -(6980134, 372, 17), -(6980135, 372, 17), -(6980136, 372, 17), -(6980137, 372, 17), -(6980138, 372, 16), -(6980140, 372, 15), -(6980142, 372, 16), -(6980143, 372, 16), -(6980145, 372, 15), -(6980150, 372, 1), -(6980155, 372, 2), -(6980157, 372, 29), -(6980160, 372, 29), -(6980161, 372, 29), -(6980187, 372, 22), -(6980188, 372, 26), -(6980190, 372, 7), -(6980212, 372, 30), -(6980214, 372, 9), -(6980218, 372, 11), -(6980223, 372, 7), -(6980229, 372, 8), -(6980250, 372, 8), -(6980251, 372, 8), -(6980252, 372, 3), -(6980253, 372, 3), -(6980256, 372, 3), -(6980257, 372, 3), -(6980258, 372, 3), -(6980259, 372, 17), -(6980260, 372, 19), -(6980262, 372, 18), -(6980263, 372, 18), -(6980264, 372, 18), -(6980265, 372, 18), -(6980266, 372, 18), -(6980267, 372, 18), -(6980271, 372, 18), -(6980273, 372, 18), -(6980275, 372, 30), -(6980277, 372, 22), -(6980283, 372, 20), -(6980284, 372, 23), -(6980285, 372, 25), -(6980311, 372, 26), -(6980313, 372, 26), -(6980323, 372, 25), -(6980325, 372, 25), -(6980333, 372, 24), -(6980334, 372, 25), -(6980336, 372, 25), -(6980337, 372, 26), -(6980347, 372, 27), -(6980355, 372, 27), -(6980357, 372, 27), -(6980358, 372, 2), -(6980359, 372, 2), -(6980366, 372, 1), -(6980368, 372, 2), -(6980383, 372, 25), -(6980387, 372, 26), -(6983070, 336, 3), -(6983076, 336, 7), -(6987034, 367, 1), -(6987035, 367, 1), -(6987036, 367, 1), -(6987037, 367, 2), -(6987038, 367, 2), -(6987039, 367, 2), -(6987040, 367, 2), -(6987041, 367, 3), -(6987042, 367, 3), -(6987043, 367, 3), -(6987044, 367, 4), -(6987045, 367, 4), -(6987046, 367, 4), -(6987047, 367, 5), -(6987048, 367, 5), -(6987049, 367, 5), -(6987050, 367, 6), -(6987051, 367, 6), -(6987052, 367, 6), -(6987053, 367, 7), -(6987054, 367, 7), -(6987055, 367, 7), -(6987056, 367, 8), -(6987057, 367, 8), -(6987058, 367, 8), -(6987059, 367, 2), -(6987060, 367, 10), -(6987061, 367, 11), -(6987062, 367, 11), -(6987063, 367, 11), -(6987064, 367, 11), -(6987065, 367, 11), -(6987067, 367, 25), -(6987068, 367, 25), -(6987070, 367, 13), -(6987071, 367, 13), -(6987072, 367, 13), -(6987073, 367, 12), -(6987074, 367, 14), -(6987075, 367, 14), -(6987076, 367, 15), -(6987077, 367, 15), -(6987078, 367, 15), -(6987079, 367, 24), -(6987080, 367, 25), -(6987081, 367, 25), -(6987082, 367, 26), -(6987083, 367, 27), -(6987084, 367, 27), -(6987085, 367, 27), -(6987086, 367, 27), -(6987087, 367, 28), -(6987088, 367, 28), -(6987089, 367, 28), -(6987090, 367, 28), -(6987091, 367, 28), -(6987092, 367, 30), -(6987093, 367, 30), -(6987094, 367, 30), -(6987095, 367, 29), -(6987096, 367, 23), -(6987097, 367, 23), -(6987098, 367, 8), -(6987099, 367, 16), -(6987100, 367, 16), -(6987101, 367, 17), -(6987102, 367, 17), -(6987103, 367, 22), -(6987104, 367, 22), -(6987105, 367, 22), -(6987106, 367, 21), -(6987107, 367, 21), -(6987108, 367, 18), -(6987109, 367, 18), -(6987110, 367, 19), -(6987111, 367, 20), -(6987112, 367, 10), -(6987113, 367, 10), -(6989593, 368, 1), -(6989594, 368, 1), -(6989595, 368, 1), -(6989596, 368, 1), -(6989597, 368, 3), -(6989598, 368, 3), -(6989599, 368, 2), -(6989600, 368, 1), -(6989601, 368, 2), -(6989602, 368, 2), -(6989603, 368, 14), -(6989604, 368, 14), -(6989605, 368, 14), -(6989606, 368, 15), -(6989607, 368, 15), -(6989608, 368, 15), -(6989609, 368, 17), -(6989610, 368, 17), -(6989611, 368, 17), -(6989612, 368, 16), -(6989613, 368, 16), -(6989614, 368, 16), -(6989615, 368, 16), -(6989616, 368, 16), -(6989617, 368, 18), -(6989618, 368, 18), -(6989619, 368, 18), -(6989620, 368, 18), -(6989621, 368, 18), -(6989622, 368, 30), -(6989623, 368, 30), -(6989624, 368, 30), -(6989625, 368, 30), -(6989626, 368, 30), -(6989627, 368, 29), -(6989628, 368, 29), -(6989629, 368, 31), -(6989630, 368, 28), -(6989631, 368, 28), -(6989632, 368, 19), -(6989633, 368, 19), -(6989634, 368, 20), -(6989635, 368, 20), -(6989636, 368, 19), -(6989637, 368, 20), -(6989638, 368, 27), -(6989639, 368, 27), -(6989640, 368, 27), -(6989641, 368, 26), -(6989642, 368, 26), -(6989643, 368, 26), -(6989644, 368, 24), -(6989645, 368, 24), -(6989646, 368, 25), -(6989647, 368, 25), -(6989648, 368, 25), -(6989649, 368, 25), -(6989650, 368, 25), -(6989651, 368, 23), -(6989652, 368, 21), -(6989653, 368, 21), -(6989654, 368, 21), -(6989655, 368, 21), -(6989656, 368, 11), -(6989657, 368, 11), -(6989658, 368, 11), -(6989659, 368, 11), -(6989660, 368, 11), -(6989661, 368, 11), -(6989662, 368, 11), -(6989663, 368, 11), -(6989664, 368, 13), -(6989665, 368, 12), -(6989666, 368, 4), -(6989667, 368, 4), -(6989668, 368, 4), -(6989669, 368, 5), -(6989670, 368, 5), -(6989671, 368, 5), -(6989672, 368, 10), -(6989673, 368, 10), -(6989674, 368, 10), -(6989675, 368, 22), -(6989676, 368, 22), -(6989677, 368, 22), -(6989678, 368, 22), -(6989679, 368, 9), -(6989680, 368, 9), -(6989681, 368, 9), -(6989682, 368, 8), -(6989683, 368, 7), -(6989685, 368, 6), -(6994517, 375, 1), -(6994518, 375, 2), -(6994519, 375, 4), -(6994521, 375, 8), -(6994536, 375, 12), -(6994537, 375, 13), -(6994636, 396, 5), -(6994637, 396, 9), -(6994638, 396, 11), -(6994639, 396, 13), -(6997567, 389, 1), -(6997901, 368, 17), -(6997902, 368, 17), -(6997903, 368, 15), -(6997904, 368, 16), -(6997905, 368, 16), -(6997906, 368, 11), -(6997907, 368, 2), -(6997908, 368, 20), -(6997909, 368, 16), -(6997910, 368, 20), -(6997911, 368, 28), -(6997912, 368, 21), -(6997913, 368, 21), -(6997914, 368, 22), -(6997915, 368, 22), -(6997916, 368, 22), -(6997917, 368, 9), -(6997918, 368, 26), -(6997919, 368, 20), -(6998414, 372, 8), -(6998415, 372, 8), -(6998416, 372, 18), -(6998468, 372, 3), -(6998470, 369, 1), -(6998471, 369, 1), -(6998472, 369, 1), -(6998474, 369, 1), -(6998479, 369, 1), -(6998483, 369, 2), -(6998486, 369, 2), -(6998487, 369, 2), -(6998488, 369, 2), -(6998490, 369, 2), -(6998491, 369, 1), -(6998492, 369, 3), -(6998493, 369, 3), -(6998494, 369, 3), -(6998495, 369, 3), -(6998496, 369, 3), -(6998499, 369, 4), -(6998502, 369, 4), -(6998503, 369, 4), -(6998504, 369, 4), -(6998506, 369, 5), -(6998507, 369, 5), -(6998508, 369, 5), -(6998509, 369, 5), -(6998510, 369, 6), -(6998512, 369, 6), -(6998513, 369, 6), -(6998514, 369, 6), -(6998515, 369, 6), -(6998523, 369, 6), -(6998529, 369, 7), -(6998530, 369, 7), -(6998533, 369, 7), -(6998535, 369, 20), -(6998536, 369, 20), -(6998537, 369, 20), -(6998538, 369, 20), -(6998541, 369, 19), -(6998543, 369, 19), -(6998545, 369, 19), -(6998546, 369, 19), -(6998547, 369, 19), -(6998548, 369, 20), -(6998551, 369, 19), -(6998552, 369, 21), -(6998553, 369, 21), -(6998555, 369, 21), -(6998556, 369, 21), -(6998559, 369, 31), -(6998561, 369, 31), -(6998565, 369, 21), -(6998569, 369, 30), -(6998571, 369, 30), -(6998573, 369, 29), -(6998575, 369, 28), -(6998576, 369, 28), -(6998577, 369, 28), -(6998579, 369, 28), -(6998580, 369, 28), -(6998581, 369, 28), -(6998582, 369, 26), -(6998583, 369, 28), -(6998592, 369, 28), -(6998593, 369, 28), -(6998594, 369, 27), -(6998595, 369, 27), -(6998596, 369, 27), -(6998598, 369, 26), -(6998599, 369, 26), -(6998600, 369, 26), -(6998601, 369, 25), -(6998603, 369, 25), -(6998605, 369, 25), -(6998607, 369, 14), -(6998608, 369, 14), -(6998609, 369, 14), -(6998610, 369, 14), -(6998611, 369, 14), -(6998612, 369, 15), -(6998613, 369, 15), -(6998618, 369, 15), -(6998620, 369, 25), -(6998622, 369, 13), -(6998623, 369, 13), -(6998625, 369, 13), -(6998627, 369, 12), -(6998628, 369, 12), -(6998637, 369, 12), -(6998638, 369, 12), -(6998639, 369, 12), -(6998640, 369, 11), -(6998641, 369, 3), -(6998642, 369, 10), -(6998643, 369, 10), -(6998644, 369, 10), -(6998646, 369, 10), -(6998647, 369, 9), -(6998648, 369, 9), -(6998649, 369, 9), -(6998653, 369, 8), -(6998654, 369, 8), -(6998655, 369, 8), -(6998656, 369, 8), -(6998657, 369, 22), -(6998658, 369, 22), -(6998659, 369, 22), -(6998661, 369, 18), -(6998666, 369, 17), -(6998667, 369, 17), -(6998668, 369, 17), -(6998669, 369, 23), -(6998670, 369, 24), -(6998676, 369, 24), -(6998682, 369, 16), -(6998684, 369, 1), -(6998685, 369, 1), -(6998686, 369, 1), -(6998687, 369, 1), -(6998688, 369, 1), -(6998689, 369, 2), -(6998690, 369, 2), -(6998691, 369, 2), -(6998692, 369, 2), -(6998693, 369, 2), -(6998694, 369, 1), -(6998695, 369, 3), -(6998696, 369, 3), -(6998697, 369, 3), -(6998698, 369, 3), -(6998699, 369, 3), -(6998700, 369, 4), -(6998701, 369, 4), -(6998702, 369, 4), -(6998703, 369, 4), -(6998704, 369, 5), -(6998705, 369, 5), -(6998706, 369, 5), -(6998707, 369, 5), -(6998708, 369, 6), -(6998709, 369, 6), -(6998710, 369, 6), -(6998711, 369, 6), -(6998712, 369, 6), -(6998713, 369, 6), -(6998714, 369, 7), -(6998715, 369, 7), -(6998716, 369, 7), -(6998717, 369, 20), -(6998718, 369, 20), -(6998719, 369, 20), -(6998720, 369, 20), -(6998722, 369, 19), -(6998723, 369, 19), -(6998724, 369, 19), -(6998725, 369, 19), -(6998726, 369, 19), -(6998727, 369, 20), -(6998728, 369, 19), -(6998729, 369, 21), -(6998730, 369, 21), -(6998731, 369, 21), -(6998732, 369, 21), -(6998735, 369, 31), -(6998736, 369, 31), -(6998737, 369, 21), -(6998738, 369, 30), -(6998739, 369, 30), -(6998740, 369, 29), -(6998741, 369, 28), -(6998742, 369, 28), -(6998743, 369, 28), -(6998744, 369, 28), -(6998745, 369, 28), -(6998746, 369, 28), -(6998747, 369, 26), -(6998748, 369, 28), -(6998749, 369, 28), -(6998750, 369, 28), -(6998751, 369, 27), -(6998752, 369, 27), -(6998753, 369, 27), -(6998754, 369, 26), -(6998755, 369, 26), -(6998756, 369, 26), -(6998757, 369, 25), -(6998758, 369, 25), -(6998759, 369, 25), -(6998760, 369, 14), -(6998761, 369, 14), -(6998762, 369, 14), -(6998763, 369, 14), -(6998764, 369, 14), -(6998765, 369, 15), -(6998766, 369, 15), -(6998767, 369, 15), -(6998768, 369, 25), -(6998769, 369, 13), -(6998770, 369, 13), -(6998771, 369, 13), -(6998772, 369, 12), -(6998773, 369, 12), -(6998774, 369, 12), -(6998775, 369, 12), -(6998776, 369, 12), -(6998777, 369, 11), -(6998778, 369, 3), -(6998779, 369, 10), -(6998780, 369, 10), -(6998781, 369, 10), -(6998782, 369, 10), -(6998783, 369, 9), -(6998784, 369, 9), -(6998785, 369, 9), -(6998786, 369, 8), -(6998787, 369, 8), -(6998788, 369, 8), -(6998789, 369, 8), -(6998790, 369, 22), -(6998791, 369, 22), -(6998792, 369, 22), -(6998793, 369, 18), -(6998794, 369, 17), -(6998795, 369, 17), -(6998796, 369, 17), -(6998797, 369, 23), -(6998798, 369, 24), -(6998799, 369, 24), -(6998800, 369, 16), -(6998818, 371, 1), -(6998896, 371, 1), -(6998897, 371, 1), -(6998898, 371, 1), -(6998899, 371, 2), -(6998900, 371, 2), -(6998901, 371, 2), -(6998902, 371, 2), -(6998946, 371, 3), -(6998947, 371, 3), -(6998982, 371, 3), -(6998983, 371, 3), -(6998984, 371, 3), -(6998986, 371, 4), -(6998987, 371, 4), -(6998988, 371, 4), -(6998990, 371, 4), -(6998991, 371, 4), -(6999007, 371, 6), -(6999008, 371, 6), -(6999009, 371, 6), -(6999010, 371, 6), -(6999011, 371, 15), -(6999012, 371, 15), -(6999013, 371, 15), -(6999014, 371, 5), -(6999015, 371, 16), -(6999016, 371, 16), -(6999017, 371, 16), -(6999020, 371, 17), -(6999021, 371, 17), -(6999022, 371, 17), -(6999023, 371, 17), -(6999024, 371, 17), -(6999025, 371, 17), -(6999026, 371, 29), -(6999028, 371, 29), -(6999029, 371, 30), -(6999030, 371, 27), -(6999032, 371, 27), -(6999034, 371, 27), -(6999147, 371, 28), -(6999150, 371, 23), -(6999152, 371, 23), -(6999153, 371, 23), -(6999154, 371, 23), -(6999156, 371, 23), -(6999157, 371, 23), -(6999158, 371, 23), -(6999159, 371, 23), -(6999160, 371, 23), -(6999163, 371, 23), -(6999166, 371, 23), -(6999169, 371, 24), -(6999170, 371, 24), -(6999171, 371, 24), -(6999172, 371, 24), -(6999173, 371, 26), -(6999174, 371, 26), -(6999175, 371, 23), -(6999176, 371, 25), -(6999177, 371, 21), -(6999179, 371, 21), -(6999180, 371, 21), -(6999181, 371, 21), -(6999182, 371, 21), -(6999183, 371, 21), -(6999184, 371, 22), -(6999185, 371, 12), -(6999186, 371, 12), -(6999188, 371, 12), -(6999189, 371, 12), -(6999190, 371, 12), -(6999191, 371, 12), -(6999192, 371, 11), -(6999193, 371, 11), -(6999194, 371, 11), -(6999195, 371, 10), -(6999196, 371, 10), -(6999197, 371, 10), -(6999200, 371, 10), -(6999201, 371, 10), -(6999202, 371, 9), -(6999203, 371, 9), -(6999204, 371, 9), -(6999206, 371, 8), -(6999207, 371, 8), -(6999209, 371, 8), -(6999212, 371, 7), -(6999213, 371, 7), -(6999214, 371, 7), -(6999216, 371, 14), -(6999217, 371, 19), -(6999218, 371, 19), -(6999219, 371, 7), -(6999220, 371, 19), -(6999221, 371, 18), -(6999222, 371, 20), -(6999223, 371, 23), -(6999224, 371, 13), -(6999476, 371, 1), -(6999477, 371, 1), -(6999478, 371, 1), -(6999479, 371, 1), -(6999480, 371, 2), -(6999481, 371, 2), -(6999482, 371, 2), -(6999483, 371, 2), -(6999484, 371, 3), -(6999485, 371, 3), -(6999486, 371, 3), -(6999487, 371, 3), -(6999488, 371, 3), -(6999489, 371, 4), -(6999490, 371, 4), -(6999491, 371, 4), -(6999492, 371, 4), -(6999493, 371, 4), -(6999494, 371, 6), -(6999495, 371, 6), -(6999496, 371, 6), -(6999497, 371, 6), -(6999498, 371, 15), -(6999499, 371, 15), -(6999500, 371, 15), -(6999501, 371, 5), -(6999502, 371, 16), -(6999503, 371, 16), -(6999504, 371, 16), -(6999505, 371, 17), -(6999506, 371, 17), -(6999507, 371, 17), -(6999508, 371, 17), -(6999509, 371, 17), -(6999510, 371, 17), -(6999511, 371, 29), -(6999512, 371, 29), -(6999513, 371, 30), -(6999514, 371, 27), -(6999515, 371, 27), -(6999516, 371, 27), -(6999517, 371, 28), -(6999518, 371, 23), -(6999519, 371, 23), -(6999520, 371, 23), -(6999521, 371, 23), -(6999522, 371, 23), -(6999523, 371, 23), -(6999524, 371, 23), -(6999525, 371, 23), -(6999526, 371, 23), -(6999527, 371, 23), -(6999528, 371, 23), -(6999529, 371, 24), -(6999530, 371, 24), -(6999531, 371, 24), -(6999532, 371, 24), -(6999533, 371, 26), -(6999534, 371, 26), -(6999535, 371, 23), -(6999536, 371, 25), -(6999537, 371, 21), -(6999538, 371, 21), -(6999539, 371, 21), -(6999540, 371, 21), -(6999541, 371, 21), -(6999542, 371, 21), -(6999543, 371, 22), -(6999544, 371, 12), -(6999545, 371, 12), -(6999546, 371, 12), -(6999547, 371, 12), -(6999548, 371, 12), -(6999549, 371, 12), -(6999550, 371, 11), -(6999551, 371, 11), -(6999552, 371, 11), -(6999553, 371, 10), -(6999554, 371, 10), -(6999555, 371, 10), -(6999556, 371, 10), -(6999557, 371, 10), -(6999558, 371, 9), -(6999559, 371, 9), -(6999560, 371, 9), -(6999561, 371, 8), -(6999562, 371, 8), -(6999563, 371, 8), -(6999564, 371, 7), -(6999565, 371, 7), -(6999566, 371, 7), -(6999567, 371, 14), -(6999568, 371, 19), -(6999569, 371, 19), -(6999570, 371, 7), -(6999571, 371, 19), -(6999572, 371, 18), -(6999573, 371, 20), -(6999574, 371, 23), -(6999575, 371, 13), -(7001712, 354, 1), -(7002280, 354, 1), -(7002282, 354, 1), -(7002283, 354, 1), -(7002284, 354, 3), -(7002286, 354, 3), -(7002287, 354, 3), -(7002289, 354, 3), -(7002290, 354, 3), -(7002292, 354, 3), -(7002297, 354, 4), -(7002298, 354, 4), -(7002324, 354, 6), -(7002325, 354, 6), -(7002327, 354, 3), -(7002328, 354, 2), -(7002329, 354, 2), -(7002333, 354, 8), -(7002334, 354, 8), -(7002335, 354, 8), -(7002336, 354, 7), -(7002337, 354, 30), -(7002338, 354, 30), -(7002339, 354, 30), -(7002360, 354, 30), -(7002361, 354, 29), -(7002363, 354, 9), -(7002364, 354, 9), -(7002365, 354, 10), -(7002366, 354, 10), -(7002370, 354, 10), -(7002371, 354, 10), -(7002372, 354, 10), -(7002373, 354, 9), -(7002374, 354, 9), -(7002376, 354, 28), -(7002378, 354, 28), -(7002382, 354, 28), -(7002385, 354, 28), -(7002387, 354, 27), -(7002388, 354, 27), -(7002390, 354, 26), -(7002391, 354, 26), -(7002392, 354, 25), -(7002393, 354, 26), -(7002394, 354, 25), -(7002395, 354, 25), -(7002396, 354, 25), -(7002397, 354, 25), -(7002398, 354, 24), -(7002399, 354, 24), -(7002401, 354, 24), -(7002404, 354, 24), -(7002410, 354, 23), -(7002412, 354, 23), -(7002413, 354, 23), -(7002414, 354, 23), -(7002415, 354, 23), -(7002416, 354, 23), -(7002417, 354, 23), -(7002418, 354, 22), -(7002419, 354, 19), -(7002420, 354, 22), -(7002422, 354, 21), -(7002423, 354, 17), -(7002424, 354, 17), -(7002425, 354, 17), -(7002426, 354, 16), -(7002427, 354, 17), -(7002428, 354, 16), -(7002430, 354, 16), -(7002431, 354, 16), -(7002432, 354, 16), -(7002434, 354, 15), -(7002436, 354, 15), -(7002437, 354, 15), -(7002439, 354, 19), -(7002694, 354, 19), -(7002695, 354, 19), -(7002696, 354, 19), -(7002697, 354, 19), -(7002698, 354, 18), -(7002700, 354, 20), -(7002701, 354, 20), -(7002703, 354, 20), -(7002705, 354, 11), -(7002708, 354, 11), -(7002710, 354, 14), -(7002711, 354, 14), -(7002712, 354, 14), -(7002713, 354, 13), -(7002714, 354, 12), -(7002715, 354, 1), -(7002716, 354, 1), -(7002717, 354, 1), -(7002718, 354, 1), -(7002719, 354, 3), -(7002720, 354, 3), -(7002721, 354, 3), -(7002722, 354, 3), -(7002723, 354, 3), -(7002725, 354, 3), -(7002726, 354, 4), -(7002727, 354, 4), -(7002730, 354, 6), -(7002731, 354, 6), -(7002732, 354, 3), -(7002733, 354, 2), -(7002734, 354, 2), -(7002735, 354, 8), -(7002736, 354, 8), -(7002737, 354, 8), -(7002738, 354, 7), -(7002739, 354, 30), -(7002740, 354, 30), -(7002741, 354, 30), -(7002742, 354, 30), -(7002743, 354, 29), -(7002744, 354, 9), -(7002745, 354, 9), -(7002746, 354, 10), -(7002747, 354, 10), -(7002748, 354, 10), -(7002749, 354, 10), -(7002750, 354, 10), -(7002751, 354, 9), -(7002752, 354, 9), -(7002753, 354, 28), -(7002754, 354, 28), -(7002755, 354, 28), -(7002756, 354, 28), -(7002757, 354, 27), -(7002758, 354, 27), -(7002759, 354, 26), -(7002760, 354, 26), -(7002761, 354, 25), -(7002762, 354, 26), -(7002763, 354, 25), -(7002764, 354, 25), -(7002765, 354, 25), -(7002766, 354, 25), -(7002767, 354, 24), -(7002768, 354, 24), -(7002769, 354, 24), -(7002770, 354, 24), -(7002771, 354, 23), -(7002772, 354, 23), -(7002773, 354, 23), -(7002774, 354, 23), -(7002775, 354, 23), -(7002776, 354, 23), -(7002777, 354, 23), -(7002778, 354, 22), -(7002779, 354, 19), -(7002780, 354, 22), -(7002781, 354, 21), -(7002782, 354, 17), -(7002783, 354, 17), -(7002784, 354, 17), -(7002785, 354, 16), -(7002786, 354, 17), -(7002787, 354, 16), -(7002789, 354, 16), -(7002790, 354, 16), -(7002791, 354, 16), -(7002793, 354, 15), -(7002794, 354, 15), -(7002795, 354, 15), -(7002796, 354, 19), -(7002797, 354, 19), -(7002798, 354, 19), -(7002799, 354, 19), -(7002800, 354, 19), -(7002801, 354, 18), -(7002802, 354, 20), -(7002803, 354, 20), -(7002804, 354, 20), -(7002805, 354, 11), -(7002806, 354, 11), -(7002807, 354, 14), -(7002808, 354, 14), -(7002809, 354, 14), -(7002810, 354, 13), -(7002811, 354, 12), -(7005090, 372, 1), -(7005094, 372, 1), -(7005096, 372, 1), -(7005098, 372, 1), -(7005107, 372, 1), -(7005115, 372, 5), -(7005118, 372, 5), -(7005165, 372, 5), -(7005166, 372, 5), -(7005167, 372, 5), -(7005168, 372, 8), -(7005169, 372, 8), -(7005170, 372, 18), -(7005171, 372, 8), -(7005172, 372, 3), -(7005173, 372, 3), -(7005174, 372, 3), -(7005175, 372, 3), -(7005176, 372, 9), -(7005177, 372, 9), -(7005179, 372, 9), -(7005180, 372, 9), -(7005181, 372, 10), -(7005183, 372, 15), -(7005184, 372, 14), -(7005186, 372, 14), -(7005210, 372, 14), -(7005211, 372, 14), -(7005212, 372, 14), -(7005213, 372, 14), -(7005214, 372, 14), -(7005215, 372, 11), -(7005217, 372, 11), -(7005240, 372, 7), -(7005401, 372, 7), -(7005404, 372, 7), -(7005406, 372, 6), -(7005408, 372, 12), -(7005409, 372, 12), -(7005410, 372, 12), -(7005411, 372, 12), -(7005412, 372, 13), -(7005413, 372, 13), -(7005414, 372, 13), -(7005415, 372, 13), -(7005417, 372, 15), -(7005418, 372, 15), -(7005419, 372, 15), -(7005420, 372, 15), -(7005422, 372, 18), -(7005423, 372, 18), -(7005424, 372, 18), -(7005425, 372, 18), -(7005426, 372, 16), -(7005427, 372, 19), -(7005429, 372, 19), -(7005431, 372, 19), -(7005432, 372, 19), -(7005433, 372, 19), -(7005434, 372, 19), -(7005435, 372, 19), -(7005436, 372, 19), -(7005437, 372, 19), -(7005438, 372, 17), -(7005441, 372, 17), -(7005442, 372, 17), -(7005444, 372, 17), -(7005445, 372, 20), -(7005446, 372, 20), -(7005447, 372, 20), -(7005451, 372, 20), -(7005452, 372, 21), -(7005453, 372, 21), -(7005454, 372, 21), -(7005455, 372, 23), -(7005456, 372, 23), -(7005457, 372, 23), -(7005458, 372, 23), -(7005459, 372, 23), -(7005460, 372, 23), -(7005465, 372, 22), -(7005468, 372, 22), -(7005469, 372, 22), -(7005470, 372, 22), -(7005471, 372, 22), -(7005472, 372, 22), -(7005473, 372, 22), -(7005474, 372, 22), -(7005475, 372, 22), -(7005477, 372, 24), -(7005481, 372, 24), -(7005482, 372, 24), -(7005584, 372, 25), -(7005585, 372, 25), -(7005586, 372, 30), -(7005587, 372, 30), -(7005588, 372, 30), -(7005589, 372, 4), -(7005590, 372, 4), -(7005591, 372, 4), -(7005592, 372, 30), -(7005593, 372, 2), -(7005594, 372, 2), -(7005595, 372, 2), -(7005596, 372, 29), -(7005598, 372, 29), -(7005600, 372, 27), -(7005601, 372, 27), -(7005602, 372, 27), -(7005606, 372, 28), -(7005607, 372, 28), -(7005608, 372, 26), -(7005609, 372, 10), -(7005610, 372, 14), -(7007424, 372, 1), -(7007425, 372, 1), -(7007426, 372, 1), -(7007427, 372, 1), -(7007428, 372, 1), -(7007429, 372, 5), -(7007430, 372, 5), -(7007431, 372, 5), -(7007432, 372, 5), -(7007433, 372, 5), -(7007434, 372, 8), -(7007435, 372, 8), -(7007436, 372, 18), -(7007437, 372, 8), -(7007438, 372, 3), -(7007439, 372, 3), -(7007440, 372, 3), -(7007441, 372, 3), -(7007442, 372, 9), -(7007443, 372, 9), -(7007444, 372, 9), -(7007445, 372, 9), -(7007446, 372, 10), -(7007447, 372, 15), -(7007448, 372, 14), -(7007449, 372, 14), -(7007450, 372, 14), -(7007451, 372, 14), -(7007452, 372, 14), -(7007453, 372, 14), -(7007454, 372, 14), -(7007455, 372, 11), -(7007456, 372, 11), -(7007457, 372, 7), -(7007458, 372, 7), -(7007459, 372, 7), -(7007460, 372, 6), -(7007461, 372, 12), -(7007462, 372, 12), -(7007463, 372, 12), -(7007464, 372, 12), -(7007465, 372, 13), -(7007466, 372, 13), -(7007467, 372, 13), -(7007468, 372, 13), -(7007469, 372, 15), -(7007470, 372, 15), -(7007471, 372, 15), -(7007472, 372, 15), -(7007473, 372, 18), -(7007474, 372, 18), -(7007475, 372, 18), -(7007476, 372, 18), -(7007477, 372, 16), -(7007478, 372, 19), -(7007479, 372, 19), -(7007480, 372, 19), -(7007481, 372, 19), -(7007482, 372, 19), -(7007483, 372, 19), -(7007484, 372, 19), -(7007485, 372, 19), -(7007486, 372, 19), -(7007487, 372, 17), -(7007488, 372, 17), -(7007489, 372, 17), -(7007490, 372, 17), -(7007491, 372, 20), -(7007492, 372, 20), -(7007493, 372, 20), -(7007494, 372, 20), -(7007495, 372, 21), -(7007496, 372, 21), -(7007497, 372, 21), -(7007498, 372, 23), -(7007499, 372, 23), -(7007500, 372, 23), -(7007501, 372, 23), -(7007502, 372, 23), -(7007503, 372, 23), -(7007504, 372, 22), -(7007505, 372, 22), -(7007506, 372, 22), -(7007507, 372, 22), -(7007508, 372, 22), -(7007509, 372, 22), -(7007510, 372, 22), -(7007511, 372, 22), -(7007512, 372, 22), -(7007513, 372, 24), -(7007514, 372, 24), -(7007515, 372, 24), -(7007516, 372, 25), -(7007517, 372, 25), -(7007518, 372, 30), -(7007519, 372, 30), -(7007520, 372, 30), -(7007521, 372, 4), -(7007522, 372, 4), -(7007523, 372, 4), -(7007524, 372, 30), -(7007525, 372, 2), -(7007526, 372, 2), -(7007527, 372, 2), -(7007528, 372, 29), -(7007529, 372, 29), -(7007530, 372, 27), -(7007531, 372, 27), -(7007532, 372, 27), -(7007533, 372, 28), -(7007534, 372, 28), -(7007535, 372, 26), -(7007536, 372, 10), -(7007537, 372, 14), -(7008614, 368, 17), -(7008615, 368, 17), -(7008616, 368, 17), -(7008617, 368, 17), -(7008977, 372, 16), -(7011528, 369, 23), -(7011608, 368, 16), -(7011609, 368, 16), -(7011611, 368, 16), -(7011612, 368, 16), -(7011613, 368, 16), -(7011909, 369, 23), -(7011910, 369, 16), -(7011911, 369, 16), -(7011912, 369, 17), -(7011913, 369, 18), -(7011914, 369, 22), -(7011915, 369, 24), -(7011916, 369, 17), -(7011917, 369, 24), -(7011918, 369, 16), -(7011919, 369, 24), -(7011920, 369, 16), -(7011921, 369, 18), -(7011922, 369, 16), -(7011923, 369, 10), -(7015554, 371, 12), -(7015555, 371, 12), -(7015556, 371, 12), -(7015557, 371, 12), -(7015559, 371, 12), -(7015560, 371, 12), -(7015561, 371, 12), -(7015562, 371, 12), -(7015563, 371, 1), -(7015564, 371, 1), -(7015565, 371, 1), -(7015639, 371, 1), -(7015809, 371, 29), -(7015810, 371, 29), -(7015811, 371, 29), -(7015831, 371, 29), -(7017072, 368, 21), -(7017073, 368, 21), -(7017074, 368, 21), -(7017821, 368, 21), -(7017822, 368, 21), -(7017823, 368, 21), -(7017824, 368, 21), -(7017825, 368, 21), -(7018030, 372, 8), -(7018032, 372, 8), -(7021959, 354, 6), -(7022000, 371, 8), -(7022001, 371, 8), -(7022002, 371, 8), -(7022080, 369, 13), -(7022081, 369, 13), -(7022082, 369, 10), -(7022083, 369, 10), -(7022084, 369, 10), -(7022085, 369, 10), -(7022086, 369, 3), -(7022088, 369, 3), -(7022089, 369, 3), -(7022221, 372, 1), -(7022434, 371, 21), -(7022435, 371, 7), -(7022436, 371, 6), -(7022437, 371, 15), -(7022438, 371, 5), -(7022439, 371, 5), -(7022472, 369, 12), -(7022480, 369, 12), -(7022482, 369, 12), -(7022484, 369, 12), -(7031210, 369, 31), -(7031211, 369, 31), -(7031212, 369, 31), -(7031213, 369, 31), -(7031219, 369, 31), -(7031225, 369, 31), -(7031226, 369, 30), -(7031228, 369, 31), -(7031229, 369, 31), -(7031230, 369, 31), -(7031233, 369, 30), -(7031341, 369, 31), -(7031346, 369, 31), -(7031381, 369, 31), -(7031993, 369, 30), -(7032050, 369, 21), -(7032051, 369, 21), -(7036942, 369, 30), -(7082919, 415, 14), -(7082925, 415, 14), -(7082926, 415, 14), -(7171388, 415, 15), -(7171970, 439, 1), -(7171972, 439, 2), -(7171973, 439, 3), -(7171974, 439, 4), -(7171977, 439, 7), -(7171981, 439, 11), -(7171982, 439, 11), -(7171983, 439, 6), -(7171987, 439, 7), -(7171988, 439, 7), -(7171997, 439, 4), -(7171998, 439, 9), -(7171999, 439, 13), -(7247207, 445, 1), -(7257150, 414, 1), -(7309598, 414, 1), -(7309601, 414, 2), -(7309602, 414, 2), -(7309603, 414, 2), -(7309608, 414, 2), -(7309609, 414, 2), -(7309615, 414, 13), -(7309629, 414, 13), -(7309632, 414, 12), -(7309633, 414, 12), -(7309634, 414, 12), -(7309640, 414, 12), -(7309641, 414, 11), -(7309642, 414, 11), -(7309679, 414, 8), -(7309688, 414, 9), -(7309690, 414, 9), -(7309692, 414, 9), -(7309694, 414, 9), -(7309695, 414, 7), -(7309697, 414, 7), -(7309698, 414, 7), -(7309699, 414, 7), -(7310021, 414, 5), -(7310031, 414, 5), -(7310032, 414, 5), -(7310046, 414, 10), -(7310052, 414, 3), -(7310119, 414, 7), -(7310228, 414, 12), -(7310233, 414, 11), -(7310337, 414, 5), -(7329610, 414, 10), -(7329613, 414, 12), -(7329615, 414, 12), -(7329616, 414, 12), -(7329617, 414, 13), -(7329620, 414, 13), -(7329621, 414, 13), -(7329623, 414, 2), -(7329624, 414, 2), -(7329625, 414, 2), -(7329626, 414, 2), -(7329627, 414, 2), -(7329629, 414, 2), -(7329630, 414, 2), -(7329631, 414, 2), -(7329635, 414, 4), -(7329639, 414, 5), -(7329641, 414, 7), -(7329643, 414, 7), -(7329644, 414, 7), -(7329645, 414, 7), -(7329646, 414, 7), -(7329648, 414, 7), -(7329650, 414, 8), -(7329651, 414, 8), -(7329653, 414, 8), -(7329654, 414, 2), -(7329655, 414, 9), -(7329656, 414, 9), -(7329658, 414, 9); - - INSERT INTO `land` (`LandSetId`, `LandId`, `Type`, `Size`, `Status`, `LandPrice`, `UpdateTime`, `OwnerId`, `HouseId`, `UPDATE_DATE`) VALUES (22216704, 0, 0, 1, 1, 19000000, 0, 0, 0, '2018-12-02 23:28:14'), (22216704, 1, 0, 2, 1, 47500000, 0, 0, 0, '2018-12-02 23:28:14'), diff --git a/sql/schema/schema.sql b/sql/schema/schema.sql index 9663e255..0017310c 100644 --- a/sql/schema/schema.sql +++ b/sql/schema/schema.sql @@ -400,13 +400,6 @@ CREATE TABLE `dbupdate` ( PRIMARY KEY(`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE `discoveryinfo` ( - `id` int(10) NOT NULL, - `map_id` int(3) NOT NULL, - `discover_id` int(3) NOT NULL, - PRIMARY KEY(`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - CREATE TABLE `house` ( `HouseId` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `LandSetId` int(10) UNSIGNED DEFAULT NULL, @@ -602,3 +595,8 @@ CREATE TABLE `charamonsternote` ( `UPDATE_DATE` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(`CharacterId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE `__Migration` ( + `MigrationName` VARCHAR(250) NOT NULL, + PRIMARY KEY (`MigrationName`) +) ENGINE=InnoDB; diff --git a/src/api/Forwards.h b/src/api/Forwards.h deleted file mode 100644 index 8c50d1ff..00000000 --- a/src/api/Forwards.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef _FORWARDS_H -#define _FORWARDS_H - -#include - -namespace Sapphire -{ - class Cell; - class Zone; - class Item; - class ItemContainer; - class Inventory; - class Session; - class ZonePosition; - using ZonePtr = std::shared_ptr< Zone >; - using ItemPtr = std::shared_ptr< Item >; - using ItemContainerPtr = std::shared_ptr< ItemContainer >; - using InventoryPtr = std::shared_ptr< Inventory >; - using SessionPtr = std::shared_ptr< Session >; - using ZonePositionPtr = std::shared_ptr< ZonePosition >; - - namespace StatusEffect - { - class StatusEffect; - class StatusEffectContainer; - using StatusEffectPtr = std::shared_ptr< StatusEffect >; - using StatusEffectContainerPtr = std::shared_ptr< StatusEffectContainer >; - } - - namespace Entity - { - class Chara; - class Player; - class BattleNpc; - using ActorPtr = std::shared_ptr< Chara >; - using PlayerPtr = std::shared_ptr< Player >; - using BattleNpcPtr = std::shared_ptr< BattleNpc >; - } - - namespace Event - { - class EventHandler; - using EventPtr = std::shared_ptr< EventHandler >; - } - - namespace Action - { - class Action; - class ActionTeleport; - class EventAction; - using ActionPtr = std::shared_ptr< Action >; - using ActionTeleportPtr = std::shared_ptr< ActionTeleport >; - using EventActionPtr = std::shared_ptr< EventAction >; - } - - namespace Network - { - class Hive; - class Acceptor; - class Connection; - class WorldConnection; - class SessionConnection; - class ZoneConnection; - using HivePtr = std::shared_ptr< Hive >; - using AcceptorPtr = std::shared_ptr< Acceptor >; - using ConnectionPtr = std::shared_ptr< Connection >; - using WorldConnectionPtr = std::shared_ptr< WorldConnection >; - using ZoneConnectionPtr = std::shared_ptr< ZoneConnection >; - using SessionConnectionPtr = std::shared_ptr< SessionConnection >; - - namespace Packets - { - class GamePacket; - using GamePacketPtr = std::shared_ptr< GamePacket >; - } - - } - - namespace Scripting - { - using EventReturnCallback = std::function< void( Entity::Player&, uint32_t, uint16_t, uint16_t, uint16_t, - uint16_t ) >; - } - - using ActionCallback = std::function< void( Entity::Player&, uint32_t, uint64_t ) >; - -} - -#endif diff --git a/src/api/LoginSession.cpp b/src/api/LoginSession.cpp deleted file mode 100644 index 9b947d19..00000000 --- a/src/api/LoginSession.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "LoginSession.h" - -namespace Sapphire { - LoginSession::LoginSession( void ) - { - //setSocket(NULL); - } - - LoginSession::~LoginSession( void ) - { - - } -} - diff --git a/src/api/LoginSession.h b/src/api/LoginSession.h deleted file mode 100644 index 1811bf09..00000000 --- a/src/api/LoginSession.h +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#ifndef _CLoginSession_H_ -#define _CLoginSession_H_ - -#include -#include -#include - -namespace Sapphire -{ - - class LoginSession - { - - private: - uint32_t m_ip; - uint32_t m_accountId; - uint8_t m_sessionId[56]; - - public: - std::string newCharName; - - LoginSession( void ); - - ~LoginSession( void ); - - uint32_t getIp() - { - return m_ip; - } - - void setSessionId( uint8_t* sessionId ) - { - memcpy( m_sessionId, sessionId, 56 ); - } - - void setIp( uint32_t ip ) - { - m_ip = ip; - } - - uint32_t getAccountId() - { - return m_accountId; - } - - void setAccountId( uint32_t id ) - { - m_accountId = id; - } - - }; - -} - -#endif diff --git a/src/api/PlayerMinimal.cpp b/src/api/PlayerMinimal.cpp index 70aeca40..2bda842b 100644 --- a/src/api/PlayerMinimal.cpp +++ b/src/api/PlayerMinimal.cpp @@ -1,29 +1,24 @@ #include "PlayerMinimal.h" -#include #include #include #include +#include + extern Sapphire::Data::ExdDataGenerated g_exdDataGen; -namespace Sapphire { +namespace Sapphire::Api { using namespace Common; // player constructor -PlayerMinimal::PlayerMinimal( void ) : +PlayerMinimal::PlayerMinimal() : m_id( 0 ) { -} - -// deconstructor -PlayerMinimal::~PlayerMinimal( void ) -{ - } // load player from the db @@ -84,64 +79,101 @@ void PlayerMinimal::load( uint32_t charId ) } } - -std::string PlayerMinimal::getLookString() -{ - - auto it = m_lookMap.begin(); - - std::string lookString; - - for( ; it != m_lookMap.end(); ++it ) - { - - std::string s = std::to_string( it->second ); - - lookString += "\"" + s + "\""; - if( it != m_lookMap.end() ) - { - lookString += ","; - } - } - - return lookString.substr( 0, lookString.size() - 1 ); -} - -std::string PlayerMinimal::getModelString() -{ - std::string modelString = "\"" - + std::to_string( m_modelEquip[ 0 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 1 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 2 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 3 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 4 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 5 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 6 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 7 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 8 ] ) + "\",\"" - + std::to_string( m_modelEquip[ 9 ] ) + "\""; - return modelString; -} - std::string PlayerMinimal::getInfoJson() { - std::string charDetails = "{\"content\":[\"" + std::string( getName() ) + "\"," + - "[\"0\",\"0\",\"0\",\"0\",\"" + std::to_string( m_classLevel ) + - "\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"]," - "\"0\",\"0\",\"0\",\"" + - std::to_string( getBirthMonth() ) + - "\",\"" + std::to_string( getBirthDay() ) + - "\",\"" + std::to_string( getGuardianDeity() ) + - "\",\"" + std::to_string( m_class ) + - "\",\"0\",\"" + std::to_string( getZoneId() ) + - "\",\"0\"," + - "[" + getLookString() + "]," + - "\"" + std::to_string( m_modelMainWeapon ) + "\",\"" + std::to_string( m_modelSubWeapon ) + "\"," + - "[" + getModelString() + "]," + - "\"1\",\"0\",\"0\",\"0\",\"" + std::to_string( m_equipDisplayFlags ) + - "\",\"0\",\"\",\"0\",\"0\"]," + - "\"classname\":\"ClientSelectData\",\"classid\":116}"; - return charDetails; + auto payload = nlohmann::json(); + auto& c = payload["content"]; + + // DisplayName + c.push_back( getName() ); + + // class levels + auto levelsArray = nlohmann::json(); + for( int i = 0; i < Common::CLASSJOB_SLOTS; ++i ) + { + // these must be strings + levelsArray.push_back( std::to_string( m_classMap[ i ] ) ); + } + + // ClassLv + c.push_back( levelsArray ); + + // Race + c.push_back( "0" ); + // Tribe + c.push_back( "0" ); + // Sex + c.push_back( "0" ); + + // BirthMonth + c.push_back( std::to_string( getBirthMonth() ) ); + // Birthday + c.push_back( std::to_string( getBirthDay() ) ); + // GuardianDeity + c.push_back( std::to_string( getGuardianDeity() ) ); + + // Class + c.push_back( std::to_string( m_class ) ); + + // ZoneId + c.push_back( "0" ); + + // TerritoryType + c.push_back( std::to_string( getZoneId() ) ); + + // ContentFinderCondition + c.push_back( "0" ); + + // look map + auto lookArray = nlohmann::json(); + for( auto& it : m_lookMap ) + { + lookArray.push_back( std::to_string( it.second ) ); + } + // Customize + c.push_back( lookArray ); + + // ModelMainWeapon + c.push_back( std::to_string( m_modelMainWeapon ) ); + // ModelSubWeapon + c.push_back( std::to_string( m_modelSubWeapon ) ); + + // model + auto modelArray = nlohmann::json(); + for( auto i : m_modelEquip ) + { + modelArray.push_back( std::to_string( i ) ); + } + // ModelEquip + c.push_back( modelArray ); + + // MainWeapon + c.push_back( "1" ); + // SubWeapon + c.push_back( "0" ); + // JobStone + c.push_back( "0" ); + + // RemakeFlag + c.push_back( "0" ); + + // ConfigFlags + c.push_back( std::to_string( m_equipDisplayFlags ) ); + + // Voice + c.push_back( "0" ); + // WorldName + c.push_back( "" ); + // LoginStatus + c.push_back( "0" ); + // IsOutTerritory + c.push_back( "0" ); + + + payload["classname"] = "ClientSelectData"; + payload["classid"] = 116; + + return payload.dump(); } uint8_t PlayerMinimal::getClassLevel() @@ -150,30 +182,6 @@ uint8_t PlayerMinimal::getClassLevel() return static_cast< uint8_t >( m_classMap[ classJobIndex ] ); } -std::string PlayerMinimal::getClassString() -{ - - std::map< uint8_t, uint16_t >::iterator it; - - it = m_classMap.begin(); - - std::string classString; - - for( ; it != m_classMap.end(); ++it ) - { - - std::string s = std::to_string( it->second ); - - classString += "\"" + s + "\""; - if( it != m_classMap.end() ) - { - classString += ","; - } - } - - return classString.substr( 0, classString.size() - 1 ); -} - void PlayerMinimal::saveAsNew() { diff --git a/src/api/PlayerMinimal.h b/src/api/PlayerMinimal.h index dda3202e..a5e41b7b 100644 --- a/src/api/PlayerMinimal.h +++ b/src/api/PlayerMinimal.h @@ -2,18 +2,19 @@ #define _PLAYERMINIMAL_H #include -#include -#include +#include +#include +#include -namespace Sapphire +namespace Sapphire::Api { class PlayerMinimal { public: - PlayerMinimal( void ); + PlayerMinimal(); - ~PlayerMinimal( void ); + ~PlayerMinimal() = default; // write player to the database void write(); @@ -23,14 +24,8 @@ namespace Sapphire void saveAsNew(); - std::string getLookString(); - std::string getInfoJson(); - std::string getModelString(); - - std::string getClassString(); - uint8_t getClassLevel(); // return the id of the actor diff --git a/src/api/SapphireAPI.cpp b/src/api/SapphireApi.cpp similarity index 83% rename from src/api/SapphireAPI.cpp rename to src/api/SapphireApi.cpp index f07c7ce5..e31e37c1 100644 --- a/src/api/SapphireAPI.cpp +++ b/src/api/SapphireApi.cpp @@ -1,4 +1,4 @@ -#include "SapphireAPI.h" +#include "SapphireApi.h" #include #include "Session.h" #include "PlayerMinimal.h" @@ -10,7 +10,9 @@ #include -bool Sapphire::Network::SapphireAPI::login( const std::string& username, const std::string& pass, std::string& sId ) +using namespace Sapphire::Api; + +bool SapphireApi::login( const std::string& username, const std::string& pass, std::string& sId ) { std::string query = "SELECT account_id FROM accounts WHERE account_name = '" + username + "' AND account_pass = '" + pass + "';"; @@ -53,7 +55,7 @@ bool Sapphire::Network::SapphireAPI::login( const std::string& username, const s } -bool Sapphire::Network::SapphireAPI::insertSession( const uint32_t accountId, std::string& sId ) +bool SapphireApi::insertSession( const uint32_t accountId, std::string& sId ) { // create session for the new sessionid and store to sessionlist auto pSession = std::make_shared< Session >(); @@ -66,7 +68,7 @@ bool Sapphire::Network::SapphireAPI::insertSession( const uint32_t accountId, st } -bool Sapphire::Network::SapphireAPI::createAccount( const std::string& username, const std::string& pass, std::string& sId ) +bool SapphireApi::createAccount( const std::string& username, const std::string& pass, std::string& sId ) { // get account from login name auto pQR = g_charaDb.query( "SELECT account_id FROM accounts WHERE account_name = '" + username + "';" ); @@ -96,11 +98,11 @@ bool Sapphire::Network::SapphireAPI::createAccount( const std::string& username, } -int Sapphire::Network::SapphireAPI::createCharacter( const uint32_t accountId, const std::string& name, - const std::string& infoJson, - const uint32_t gmRank ) +int SapphireApi::createCharacter( const uint32_t accountId, const std::string& name, + const std::string& infoJson, + const uint32_t gmRank ) { - Sapphire::PlayerMinimal newPlayer; + Api::PlayerMinimal newPlayer; newPlayer.setAccountId( accountId ); newPlayer.setId( getNextCharId() ); @@ -169,7 +171,7 @@ int Sapphire::Network::SapphireAPI::createCharacter( const uint32_t accountId, c return newPlayer.getAccountId(); } -void Sapphire::Network::SapphireAPI::deleteCharacter( std::string name, const uint32_t accountId ) +void SapphireApi::deleteCharacter( std::string name, const uint32_t accountId ) { PlayerMinimal deletePlayer; auto charList = getCharList( accountId ); @@ -190,26 +192,28 @@ void Sapphire::Network::SapphireAPI::deleteCharacter( std::string name, const ui g_charaDb.execute( "DELETE FROM characlass WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charaglobalitem WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charainfoblacklist WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); - g_charaDb.execute( "DELETE FROM charainfofriendlist WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charainfolinkshell WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charainfosearch WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charaitemcrystal WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); + g_charaDb.execute( "DELETE FROM charaitemcurrency WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charaiteminventory WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charaitemgearset WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); + g_charaDb.execute( "DELETE FROM charamonsternote WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); g_charaDb.execute( "DELETE FROM charaquest WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); + g_charaDb.execute( "DELETE FROM charastatus WHERE CharacterId LIKE '" + std::to_string( id ) + "';" ); } -std::vector< Sapphire::PlayerMinimal > Sapphire::Network::SapphireAPI::getCharList( uint32_t accountId ) +std::vector< PlayerMinimal > SapphireApi::getCharList( uint32_t accountId ) { - std::vector< Sapphire::PlayerMinimal > charList; + std::vector< Api::PlayerMinimal > charList; auto pQR = g_charaDb.query( "SELECT CharacterId, ContentId FROM charainfo WHERE AccountId = " + std::to_string( accountId ) + ";" ); while( pQR->next() ) { - Sapphire::PlayerMinimal player; + Api::PlayerMinimal player; uint32_t charId = pQR->getUInt( 1 ); @@ -220,7 +224,7 @@ std::vector< Sapphire::PlayerMinimal > Sapphire::Network::SapphireAPI::getCharLi return charList; } -bool Sapphire::Network::SapphireAPI::checkNameTaken( std::string name ) +bool SapphireApi::checkNameTaken( std::string name ) { g_charaDb.escapeString( name ); @@ -234,7 +238,7 @@ bool Sapphire::Network::SapphireAPI::checkNameTaken( std::string name ) return true; } -uint32_t Sapphire::Network::SapphireAPI::getNextCharId() +uint32_t SapphireApi::getNextCharId() { uint32_t charId = 0; @@ -250,7 +254,7 @@ uint32_t Sapphire::Network::SapphireAPI::getNextCharId() return charId; } -uint64_t Sapphire::Network::SapphireAPI::getNextContentId() +uint64_t SapphireApi::getNextContentId() { uint64_t contentId = 0; @@ -266,7 +270,7 @@ uint64_t Sapphire::Network::SapphireAPI::getNextContentId() return contentId; } -int Sapphire::Network::SapphireAPI::checkSession( const std::string& sId ) +int SapphireApi::checkSession( const std::string& sId ) { auto it = m_sessionMap.find( sId ); @@ -277,7 +281,7 @@ int Sapphire::Network::SapphireAPI::checkSession( const std::string& sId ) } -bool Sapphire::Network::SapphireAPI::removeSession( const std::string& sId ) +bool SapphireApi::removeSession( const std::string& sId ) { auto it = m_sessionMap.find( sId ); diff --git a/src/api/SapphireAPI.h b/src/api/SapphireApi.h similarity index 82% rename from src/api/SapphireAPI.h rename to src/api/SapphireApi.h index 7b2bbd4c..c11b3c89 100644 --- a/src/api/SapphireAPI.h +++ b/src/api/SapphireApi.h @@ -7,19 +7,15 @@ #include #include "PlayerMinimal.h" -namespace Sapphire +namespace Sapphire::Api { class Session; -} -namespace Sapphire::Network -{ - - class SapphireAPI + class SapphireApi { public: - SapphireAPI() = default; - ~SapphireAPI() = default; + SapphireApi() = default; + ~SapphireApi() = default; using SessionMap = std::map< std::string, std::shared_ptr< Session > >; @@ -34,7 +30,7 @@ namespace Sapphire::Network bool insertSession( uint32_t accountId, std::string& sId ); - std::vector< Sapphire::PlayerMinimal > getCharList( uint32_t accountId ); + std::vector< Api::PlayerMinimal > getCharList( uint32_t accountId ); bool checkNameTaken( std::string name ); diff --git a/src/api/Session.cpp b/src/api/Session.cpp index fc40d265..c5030b2f 100644 --- a/src/api/Session.cpp +++ b/src/api/Session.cpp @@ -1,6 +1,7 @@ #include "Session.h" -namespace Sapphire { +using namespace Sapphire::Api; + Session::Session() { @@ -35,4 +36,3 @@ void Session::setAccountId( uint32_t id ) { m_accountId = id; } -} diff --git a/src/api/Session.h b/src/api/Session.h index 5d9efc41..7bb0d71b 100644 --- a/src/api/Session.h +++ b/src/api/Session.h @@ -5,7 +5,7 @@ #include #include -namespace Sapphire +namespace Sapphire::Api { class Session diff --git a/src/api/main.cpp b/src/api/main.cpp index fd68af4f..edced26a 100644 --- a/src/api/main.cpp +++ b/src/api/main.cpp @@ -22,25 +22,23 @@ //Added for the default_resource example #include #include -#include +#include #include #include -#include #include -#include "Forwards.h" -#include "SapphireAPI.h" +#include "SapphireApi.h" #include -Sapphire::Common::Util::CrashHandler crashHandler; +[[maybe_unused]] Sapphire::Common::Util::CrashHandler crashHandler; Sapphire::Db::DbWorkerPool< Sapphire::Db::ZoneDbConnection > g_charaDb; Sapphire::Data::ExdDataGenerated g_exdDataGen; -Sapphire::Network::SapphireAPI g_sapphireAPI; +Sapphire::Api::SapphireApi g_sapphireAPI; -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; using namespace std; using namespace Sapphire; @@ -59,7 +57,7 @@ Sapphire::Common::Config::ApiConfig m_config; void reloadConfig() { - auto pConfig = std::make_shared< Sapphire::ConfigMgr >(); + auto pConfig = std::make_shared< Sapphire::Common::ConfigMgr >(); Logger::info( "Loading config " + configPath ); @@ -106,7 +104,7 @@ bool loadSettings( int32_t argc, char* argv[] ) try { - arg = Sapphire::Util::toLowerCopy( std::string( args[ i ] ) ); + arg = Common::Util::toLowerCopy( std::string( args[ i ] ) ); val = std::string( args[ i + 1 ] ); // trim '-' from start of arg @@ -336,7 +334,7 @@ void createCharacter( shared_ptr< HttpServer::Response > response, shared_ptr< H std::string name = json["name"]; std::string infoJson = json["infoJson"]; - std::string finalJson = Sapphire::Util::base64Decode( infoJson ); + std::string finalJson = Common::Util::base64Decode( infoJson ); // reloadConfig(); @@ -672,8 +670,9 @@ void defaultGet( shared_ptr< HttpServer::Response > response, shared_ptr< HttpSe print_request_info( request ); try { - auto web_root_path = fs::canonical( "web" ); - auto path = fs::canonical( web_root_path / request->path ); + auto web_root_path = fs::current_path() / "web"; + auto path = web_root_path / request->path; + //Check if path is within web_root_path if( distance( web_root_path.begin(), web_root_path.end() ) > distance( path.begin(), path.end() ) || !std::equal( web_root_path.begin(), web_root_path.end(), path.begin() ) ) @@ -700,7 +699,7 @@ void defaultGet( shared_ptr< HttpServer::Response > response, shared_ptr< HttpSe catch( const exception& ) { string content = "Path not found: " + request->path; - *response << buildHttpResponse( 400, content ); + *response << buildHttpResponse( 404, content ); } } @@ -719,19 +718,19 @@ int main( int argc, char* argv[] ) Logger::setLogLevel( m_config.global.general.logLevel ); - server.resource[ "^/ZoneName/([0-9]+)$" ][ "GET" ] = &getZoneName; - server.resource[ "^/sapphire-api/lobby/createAccount" ][ "POST" ] = &createAccount; - server.resource[ "^/sapphire-api/lobby/login" ][ "POST" ] = &login; - server.resource[ "^/sapphire-api/lobby/deleteCharacter" ][ "POST" ] = &deleteCharacter; - server.resource[ "^/sapphire-api/lobby/createCharacter" ][ "POST" ] = &createCharacter; - server.resource[ "^/sapphire-api/lobby/insertSession" ][ "POST" ] = &insertSession; - server.resource[ "^/sapphire-api/lobby/checkNameTaken" ][ "POST" ] = &checkNameTaken; - server.resource[ "^/sapphire-api/lobby/checkSession" ][ "POST" ] = &checkSession; - server.resource[ "^/sapphire-api/lobby/getNextCharId" ][ "POST" ] = &getNextCharId; - server.resource[ "^/sapphire-api/lobby/getNextContentId" ][ "POST" ] = &getNextContentId; - server.resource[ "^/sapphire-api/lobby/getCharacterList" ][ "POST" ] = &getCharacterList; - server.resource[ "^(/frontier-api/ffxivsupport/view/get_init)(.*)" ][ "GET" ] = &get_init; - server.resource[ "^(/frontier-api/ffxivsupport/information/get_headline_all)(.*)" ][ "GET" ] = &get_headline_all; + server.resource[ "^ZoneName/([0-9]+)$" ][ "GET" ] = &getZoneName; + server.resource[ "^sapphire-api/lobby/createAccount" ][ "POST" ] = &createAccount; + server.resource[ "^sapphire-api/lobby/login" ][ "POST" ] = &login; + server.resource[ "^sapphire-api/lobby/deleteCharacter" ][ "POST" ] = &deleteCharacter; + server.resource[ "^sapphire-api/lobby/createCharacter" ][ "POST" ] = &createCharacter; + server.resource[ "^sapphire-api/lobby/insertSession" ][ "POST" ] = &insertSession; + server.resource[ "^sapphire-api/lobby/checkNameTaken" ][ "POST" ] = &checkNameTaken; + server.resource[ "^sapphire-api/lobby/checkSession" ][ "POST" ] = &checkSession; + server.resource[ "^sapphire-api/lobby/getNextCharId" ][ "POST" ] = &getNextCharId; + server.resource[ "^sapphire-api/lobby/getNextContentId" ][ "POST" ] = &getNextContentId; + server.resource[ "^sapphire-api/lobby/getCharacterList" ][ "POST" ] = &getCharacterList; + server.resource[ "^(frontier-api/ffxivsupport/view/get_init)(.*)" ][ "GET" ] = &get_init; + server.resource[ "^(frontier-api/ffxivsupport/information/get_headline_all)(.*)" ][ "GET" ] = &get_headline_all; server.default_resource[ "GET" ] = &defaultGet; diff --git a/src/api/server_http.hpp b/src/api/server_http.hpp index 7c831e69..b9166c57 100644 --- a/src/api/server_http.hpp +++ b/src/api/server_http.hpp @@ -18,7 +18,7 @@ class case_insensitive_equals { public: bool operator()(const std::string &key1, const std::string &key2) const { - return Sapphire::Util::toLowerCopy( key1 ) == Sapphire::Util::toLowerCopy( key2 ); + return Sapphire::Common::Util::toLowerCopy( key1 ) == Sapphire::Common::Util::toLowerCopy( key2 ); } }; class case_insensitive_hash { @@ -27,7 +27,7 @@ public: { std::size_t seed=0; for( auto &c : key ) - Sapphire::Util::hashCombine< char >( seed, std::tolower( c ) ); + Sapphire::Common::Util::hashCombine< char >( seed, std::tolower( c ) ); return seed; } }; @@ -304,7 +304,7 @@ namespace SimpleWeb { size_t path_end; if((path_end=line.find(' ', method_end+1))!=std::string::npos) { request->method=line.substr(0, method_end); - request->path=line.substr(method_end+1, path_end-method_end-1); + request->path=line.substr(method_end+2, path_end-method_end-2); size_t protocol_end; if((protocol_end=line.find('/', path_end+1))!=std::string::npos) { @@ -388,7 +388,7 @@ namespace SimpleWeb { auto range=request->header.equal_range("Connection"); for(auto it=range.first;it!=range.second;it++) { - if( Sapphire::Util::toLowerCopy( it->second ) == "close" ) + if( Sapphire::Common::Util::toLowerCopy( it->second ) == "close" ) return; } if(http_version>1.05) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 0b494d98..88ab338d 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -26,10 +26,6 @@ if( UNIX ) PUBLIC pthread stdc++fs ) -else() - target_link_libraries( common - PUBLIC - stackwalker ) endif() target_include_directories( common diff --git a/src/common/Common.h b/src/common/Common.h index a2d59028..d8e7618c 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -21,6 +21,14 @@ namespace Sapphire::Common const int32_t INVALID_GAME_OBJECT_ID = 0xE0000000; const uint64_t INVALID_GAME_OBJECT_ID64 = 0xE0000000; + const uint16_t MAX_PLAYER_LEVEL = 80; + const uint8_t CURRENT_EXPANSION_ID = 3; + + const uint8_t CLASSJOB_TOTAL = 38; + const uint8_t CLASSJOB_SLOTS = 28; + + const uint8_t TOWN_COUNT = 6; + /*! * @brief The maximum length (in ms) of a combo before it is canceled/voided. * @@ -41,13 +49,13 @@ namespace Sapphire::Common uint8_t plot; }; - enum InventoryOperation : uint8_t + enum InventoryOperation : uint16_t { - Discard = 0x07, - Move = 0x08, - Swap = 0x09, - Merge = 0x0C, - Split = 0x0A + Discard = 0x013C, + Move = 0x013D, + Swap = 0x013E, + Split = 0x013F, + Merge = 0x0141, }; enum ClientLanguage : uint8_t @@ -151,44 +159,46 @@ namespace Sapphire::Common ModelRing2 = 9 }; - enum EquipSlotCategory : uint8_t + enum class EquipSlotCategory : uint8_t { - Unequippable = 0, - // main slots - CharaMainHand = 1, - CharaOffHand = 2, - CharaHead = 3, - CharaBody = 4, - CharaHands = 5, - CharaWaist = 6, - CharaLegs = 7, - CharaFeet = 8, - CharaEars = 9, - CharaNeck = 10, - CharaWrist = 11, - CharaRing = 12, - CharaSoulCrystal = 17, - - // specials + CharaMainHand = 0, + CharaOffHand = 1, + CharaHead = 2, + CharaBody = 3, + CharaHands = 4, + CharaWaist = 5, + CharaLegs = 6, + CharaFeet = 7, + CharaEars = 8, + CharaNeck = 9, + CharaWrist = 10, + CharaRing = 11, + CharaSoulCrystal = 12, + /* following slots not seem to exist any more. + when multi-slot gear is moved into equipment slot, normal slot listed above is used. + client will move any incompatible gears into armory but no InventoryModifiyHandler is sent. + server need to move those silently in order to sync with client. + */ + /*! Cannot equip gear to offhand slot */ - MainTwoHandedWeapon = 13, + //MainTwoHandedWeapon = 13, /*! Can be equipped in either main or offhand slot */ - MainOrOffHand = 14, // unused + //MainOrOffHand = 14, // unused /*! Cannot equip gear to head */ - BodyDisallowHead = 15, + //BodyDisallowHead = 15, /*! Cannot equip gear to hands, legs and feet slots */ - BodyDisallowHandsLegsFeet = 16, + //BodyDisallowHandsLegsFeet = 16, /*! Cannot equip gear to feet slot */ - LegsDisallowFeet = 18, + //LegsDisallowFeet = 18, /*! Cannot equp gear to head, hands, legs, feet slots */ - BodyDisallowAll = 19, + //BodyDisallowAll = 19, /*! Cannot equip gear to hands slot */ - BodyDisallowHands = 20, + //BodyDisallowHands = 20, /*! Cannot equip gear to legs & feet slots */ - BodyDisallowLegsFeet = 21, + //BodyDisallowLegsFeet = 21, }; enum InventoryType : uint16_t @@ -204,10 +214,12 @@ namespace Sapphire::Common Currency = 2000, Crystal = 2001, //UNKNOWN_0 = 2003, - KeyItem = 2004, + KeyItem = 2004, HandIn = 2005, DamagedGear = 2007, //UNKNOWN_1 = 2008, + // Temporary inventory that is used for the "trade" window + TradeInventory = 2009, ArmoryOff = 3200, ArmoryHead = 3201, @@ -216,13 +228,19 @@ namespace Sapphire::Common ArmoryWaist = 3204, ArmoryLegs = 3205, ArmoryFeet = 3206, - ArmoryNeck = 3207, - ArmoryEar = 3208, + ArmoryEar = 3207, + ArmoryNeck = 3208, ArmoryWrist = 3209, ArmoryRing = 3300, ArmorySoulCrystal = 3400, ArmoryMain = 3500, + + SaddleBag0 = 4000, + SaddleBag1 = 4001, + // These are the ones you get when paying for premium companion app + PremiumSaddleBag0 = 4100, + PremiumSaddleBag1 = 4101, RetainerBag0 = 10000, RetainerBag1 = 10001, @@ -396,7 +414,7 @@ namespace Sapphire::Common struct StatusEffect { uint16_t effect_id; - uint16_t unknown1; + uint16_t param; float duration; uint32_t sourceActorId; }; @@ -548,6 +566,30 @@ namespace Sapphire::Common }; + enum FieldMarkerStatus : uint32_t + { + A = 0x1, + B = 0x2, + C = 0x4, + D = 0x8, + One = 0x10, + Two = 0x20, + Three = 0x40, + Four = 0x80 + }; + // TODO: consolidate these two into one since FieldMarkerStatus == 1 << FieldMarkerId? + enum class FieldMarkerId : uint8_t + { + A, + B, + C, + D, + One, + Two, + Three, + Four + }; + enum struct ActionAspect : uint8_t { None = 0, // Doesn't imply unaspected @@ -565,19 +607,27 @@ namespace Sapphire::Common None = 0, // ? MagicPoints = 3, TacticsPoints = 5, -// WARGauge = 22, -// DRKGauge = 25, -// AetherflowStack = 30, -// Status = 32, -// PLDGauge = 41, -// RDMGaugeBoth = 74, -//// RDMGaugeBlack = 75, // not right? -// DRGGauge3Eyes = 76, + StatusEffect = 10, + WARGauge = 22, + DRKGauge = 25, + // AetherflowStack = 30, + // Status = 32, + SAMKenki = 39, + SAMSen = 40, + PLDGauge = 41, + GNBAmmo = 55, + WHMBloodLily = 56, + WHMLily = 57, + SAMMeditation = 63, + // RDMGaugeBoth = 74, + //// RDMGaugeBlack = 75, // not right? + // DRGGauge3Eyes = 76, }; - enum class ActionType : int8_t + enum class AttackType : int8_t { - WeaponOverride = -1, // Needs more investigation (takes the damage type of the equipped weapon)? + //WeaponOverride = -1, // Needs more investigation (takes the damage type of the equipped weapon)? + Physical = -1, // seems to be the case Unknown_0 = 0, Slashing = 1, Piercing = 2, @@ -606,28 +656,41 @@ namespace Sapphire::Common TpLoss = 12, TpGain = 13, GpGain = 14, + ApplyStatusEffectTarget = 15, + ApplyStatusEffectSource = 16, // effect entry on target but buff applies to source, like storm's eye + StatusNoEffect = 20, // shifted one up from 5.18 /*! * @brief Tells the client that it should show combo indicators on actions. * * @param flags Required to be 128, doesn't show combo rings on hotbars otherwise * @param value The actionid that starts/continues the combo. eg, 3617 will start a spinning slash and/or syphon strike combo */ - StartActionCombo = 28, + StartActionCombo = 27, // shifted one up from 5.18 + ComboSucceed = 28, // shifted one up from 5.18, on retail this is not seen anymore, still working though. Knockback = 33, - Mount = 38, + Mount = 40, // shifted one down from 5.18 VFX = 59, // links to VFX sheet }; enum class ActionHitSeverityType : uint8_t { NormalDamage = 0, - CritHeal = 0, + NormalHeal = 0, CritDamage = 1, - NormalHeal = 1, + CritHeal = 1, DirectHitDamage = 2, CritDirectHitDamage = 3 }; + enum class ActionEffectResultFlag : uint8_t + { + None = 0, + Absorbed = 0x04, + ExtendedValue = 0x40, + EffectOnSource = 0x80, + Reflected = 0xA0, + }; + enum ItemActionType : uint16_t { ItemActionVFX = 852, @@ -644,15 +707,15 @@ namespace Sapphire::Common struct EffectEntry { Common::ActionEffectType effectType; - Common::ActionHitSeverityType hitSeverity; - uint8_t param; + uint8_t param0; + uint8_t param1; /*! * @brief Shows an additional percentage in the battle log * * Has no effect on what is shown and stored in value */ - int8_t bonusPercent; - uint8_t valueMultiplier; // This multiplies whatever value is in the 'value' param by 10. Possibly a workaround for big numbers + uint8_t param2; + uint8_t extendedValueHighestByte; uint8_t flags; int16_t value; }; @@ -968,8 +1031,6 @@ namespace Sapphire::Common enum LevelTableEntry : uint8_t { - PIE, - MP, MAIN, SUB, DIV, @@ -982,7 +1043,225 @@ namespace Sapphire::Common { SingleTarget = 1, CircularAOE = 2, + Type3 = 3, // another single target? no idea how to call it RectangularAOE = 4, + CircularAoEPlaced = 7 + }; + + enum class Role : uint8_t + { + None, + Tank, + Healer, + RangedPhysical, + RangedMagical, + Melee, + Crafter, + Gatherer + }; + + enum class AstCardType : uint8_t + { + None = 0, + Balance = 1, + Bole = 2, + Arrow = 3, + Spear = 4, + Ewer = 5, + Spire = 6, + Lord = 0x70, + Lady = 0x80, + }; + + enum class AstSealType : uint8_t + { + None = 0, + Sun = 1, + Moon = 2, + Celestrial = 3, + }; + + enum class DrgState : uint8_t + { + None = 0, + BloodOfTheDragon = 1, + LifeOfTheDragon = 2, + }; + + enum class SamSen : uint8_t + { + None = 0, + Setsu = 1, + Getsu = 2, + Ka = 4, + }; + + enum class SchDismissedFairy : uint8_t + { + None = 0, + Eos = 6, + Selene = 7, + }; + + enum class SmnPet : uint8_t + { + None = 0, + Ifrit = 3, + Titan = 4, + Garuda = 5, + }; + + enum class SmnPetGlam : uint8_t + { + None = 0, + Emerald = 1, + Topaz = 2, + Ruby = 3, + }; + + enum class BrdSong : uint8_t + { + Mage = 5, + Army = 0x0A, + Wanderer = 0x0F, + }; + + union JobGauge + { + struct + { + uint8_t gauge_data[15]; + } _raw; + + struct + { + uint32_t unused; + AstCardType card; + AstSealType seals[3]; + } ast; + struct + { + uint16_t timeUntilNextPolyglot; + uint16_t elementTimer; + uint8_t elementStance; + uint8_t umbralhearts; + uint8_t polyglotStacks; + uint8_t enochainState; + } blm; + struct + { + uint16_t songTimer; + uint8_t songStacks; + uint8_t unused; + BrdSong song; + } brd; + struct + { + uint8_t feathers; + uint8_t esprit; + uint8_t stepOrder[4]; + uint8_t completeSteps; + } dnc; + struct + { + uint16_t dragonTimer; + DrgState dragonState; + uint8_t eyes; + } drg; + struct + { + uint8_t blood; + uint8_t unused; + uint16_t darksideTimer; + uint8_t darkArts; + uint8_t unused2; + uint16_t shadowTimer; + } drk; + struct + { + uint8_t ammo; + uint8_t unused; + uint16_t maxTimerDuration; + uint8_t ammoComboStep; + } gnb; + struct + { + uint16_t overheatTimer; + uint16_t robotTimer; + uint8_t heat; + uint8_t battery; + uint8_t lastRobotBatteryPower; + uint8_t activeTimerFlag; + } mch; + struct + { + uint8_t greasedLightningTimer; + uint8_t unused; + uint8_t greasedLightningStacks; + uint8_t chakra; + uint8_t greasedLightningTimerFreezed; + } mnk; + struct + { + uint32_t hutonTimer; + uint8_t tenChiJinMudrasUsed; + uint8_t ninki; + uint8_t hutonManualCasts; + } nin; + struct + { + uint8_t oathGauge; + } pld; + struct + { + uint8_t whiteGauge; + uint8_t blackGauge; + } rdm; + struct + { + uint16_t unused; + uint8_t unused2; + uint8_t kenki; + uint8_t meditationStacks; + SamSen sen; + } sam; + struct + { + uint16_t unused; + uint8_t aetherflowStacks; + uint8_t fairyGauge; + uint16_t seraphTimer; + SchDismissedFairy dismissedFairy; + } sch; + struct + { + uint16_t timer; + SmnPet returnSummon; + SmnPetGlam petGlam; + uint8_t stacks; + } smn; + + struct + { + uint8_t beastGauge; + } war; + struct + { + uint16_t unused; + uint16_t lilyTimer; + uint8_t lilies; + uint8_t bloodLilies; + } whm; + }; + + enum class LootMessageType : uint8_t + { + GetItem1 = 1, // p1: actorId, p4: itemId (HQ: itemId + 1,000,000 lol), p5: amount + GetItem2 = 3, // p1: actorId, p2: itemId, p3: amount, seems like same thing as GetItem1 but different param position. + FailedToGetLootNoFreeInventorySlot = 5, // p1: actorId + LootRolled = 7, // p1: actorId, p2: itemId, p3: amount + GetGil = 9, // p1: gil + EmptyCoffer = 11, // seems like no param }; using PlayerStateFlagList = std::vector< PlayerStateFlag >; diff --git a/src/common/CommonGen.h b/src/common/CommonGen.h index 078efa3c..4833e57a 100644 --- a/src/common/CommonGen.h +++ b/src/common/CommonGen.h @@ -6,8 +6,7 @@ /* This file has been automatically generated. Changes will be lost upon regeneration. To change the content edit tools/exd_common_gen */ -namespace Sapphire { -namespace Common { +namespace Sapphire::Common { /////////////////////////////////////////////////////////// //ActionCategory.exd @@ -173,6 +172,8 @@ enum class ClassJob : uint8_t Samurai = 34, Redmage = 35, Bluemage = 36, + Gunbreaker = 37, + Dancer = 38, }; /////////////////////////////////////////////////////////// @@ -199,14 +200,10 @@ enum class ContentType : uint8_t DisciplesoftheHand = 17, RetainerVentures = 18, GoldSaucer = 19, - one = 20, DeepDungeons = 21, - two = 22, - three = 23, WondrousTails = 24, CustomDeliveries = 25, Eureka = 26, - four = 27, }; /////////////////////////////////////////////////////////// @@ -217,7 +214,6 @@ enum class EmoteCategory : uint8_t General = 1, Special = 2, Expressions = 3, - one = 4, }; /////////////////////////////////////////////////////////// @@ -227,7 +223,7 @@ enum class ExVersion : uint8_t ARealmReborn = 0, Heavensward = 1, Stormblood = 2, - three = 3, + Shadowbringers = 3, }; /////////////////////////////////////////////////////////// @@ -369,6 +365,8 @@ enum class ItemUICategory : uint8_t SubmersibleBow = 103, SubmersibleBridge = 104, BlueMagesArm = 105, + GunbreakersArm = 106, + DancersArm = 107, }; /////////////////////////////////////////////////////////// @@ -393,7 +391,7 @@ enum class ItemSearchCategory : uint8_t ConjurersArms = 15, ArcanistsArms = 16, Shields = 17, - ThrowingWeapons = 18, + DancersArms = 18, CarpentersTools = 19, BlacksmithsTools = 20, ArmorersTools = 21, @@ -454,13 +452,15 @@ enum class ItemSearchCategory : uint8_t DarkKnightsArms = 76, MachinistsArms = 77, AstrologiansArms = 78, - Airship_SubmersibleComponents = 79, + AirshipSubmersibleComponents = 79, OrchestrionComponents = 80, GardeningItems = 81, Paintings = 82, SamuraisArms = 83, RedMagesArms = 84, ScholarsArms = 85, + GunbreakersArms = 86, + ThrowingWeapons = 87, }; /////////////////////////////////////////////////////////// @@ -527,6 +527,8 @@ enum class Race : uint8_t Miqote = 4, Roegadyn = 5, AuRa = 6, + Hrothgar = 7, + Viera = 8, }; /////////////////////////////////////////////////////////// @@ -546,6 +548,10 @@ enum class Tribe : uint8_t Hellsguard = 10, Raen = 11, Xaela = 12, + Helions = 13, + TheLost = 14, + Rava = 15, + Veena = 16, }; /////////////////////////////////////////////////////////// @@ -558,6 +564,7 @@ enum class Town : uint8_t Uldah = 3, Ishgard = 4, Kugane = 7, + TheCrystarium = 10, }; /////////////////////////////////////////////////////////// @@ -680,7 +687,21 @@ enum class Weather : uint8_t TrueBlue = 113, TrueBlue1 = 114, TrueBlue2 = 115, + UmbralTurbulence = 116, TrueBlue3 = 117, + EverlastingLight = 118, + Gales2 = 119, + Termination = 120, + Termination1 = 121, + Dreams = 122, + Dreams1 = 123, + Dreams2 = 124, + Brilliance = 125, + Brilliance1 = 126, + Termination2 = 127, + Termination3 = 128, + EverlastingLight1 = 129, + Termination4 = 131, }; /////////////////////////////////////////////////////////// @@ -703,8 +724,12 @@ enum class HousingAppeal : uint8_t Library = 14, PhotoStudio = 15, HauntedHouse = 16, + Atelier = 17, + Bathhouse = 18, + Garden = 19, + FarEastern = 20, }; -} + } #endif diff --git a/src/common/Config/ConfigMgr.cpp b/src/common/Config/ConfigMgr.cpp index a4fa1bdc..e581a37c 100644 --- a/src/common/Config/ConfigMgr.cpp +++ b/src/common/Config/ConfigMgr.cpp @@ -1,16 +1,18 @@ #include "ConfigMgr.h" #include -#include -#include +#include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; + +using namespace Sapphire; +using namespace Sapphire::Common; /** * Loads an ini file and parses it * @param configName the name of ini file relative to m_configFolderRoot to load alongside global.ini * @return true if loading was successful */ -bool Sapphire::ConfigMgr::loadConfig( const std::string& configName ) +bool ConfigMgr::loadConfig( const std::string& configName ) { // get global config auto configFile = fs::path( fs::path( m_configFolderRoot ) / configName ); @@ -29,7 +31,7 @@ bool Sapphire::ConfigMgr::loadConfig( const std::string& configName ) return true; } -bool Sapphire::ConfigMgr::loadGlobalConfig( Common::Config::GlobalConfig& config, const std::string& configName ) +bool ConfigMgr::loadGlobalConfig( Common::Config::GlobalConfig& config, const std::string& configName ) { auto configFile = fs::path( fs::path( m_configFolderRoot ) / configName ); @@ -71,7 +73,7 @@ bool Sapphire::ConfigMgr::loadGlobalConfig( Common::Config::GlobalConfig& config return true; } -bool Sapphire::ConfigMgr::copyDefaultConfig( const std::string& configName ) +bool ConfigMgr::copyDefaultConfig( const std::string& configName ) { fs::path configPath( m_configFolderRoot ); configPath /= configName; diff --git a/src/common/Config/ConfigMgr.h b/src/common/Config/ConfigMgr.h index 919762c2..b78da899 100644 --- a/src/common/Config/ConfigMgr.h +++ b/src/common/Config/ConfigMgr.h @@ -8,7 +8,7 @@ #include #include "ConfigDef.h" -namespace Sapphire +namespace Sapphire::Common { class ConfigMgr { diff --git a/src/common/Crypt/base64.cpp b/src/common/Crypt/base64.cpp index 591568b5..7d513c47 100644 --- a/src/common/Crypt/base64.cpp +++ b/src/common/Crypt/base64.cpp @@ -41,7 +41,7 @@ static inline bool is_base64( uint8_t c ) return ( isalnum( c ) || ( c == '+' ) || ( c == '/' ) ); } -std::string Sapphire::Util::base64Encode( uint8_t const* bytes_to_encode, uint32_t in_len ) +std::string Sapphire::Common::Util::base64Encode( uint8_t const* bytes_to_encode, uint32_t in_len ) { std::string ret; int32_t i = 0; @@ -87,7 +87,7 @@ std::string Sapphire::Util::base64Encode( uint8_t const* bytes_to_encode, uint32 } -std::string Sapphire::Util::base64Decode( std::string const& encoded_string ) +std::string Sapphire::Common::Util::base64Decode( std::string const& encoded_string ) { int32_t in_len = encoded_string.size(); int32_t i = 0; diff --git a/src/common/Crypt/base64.h b/src/common/Crypt/base64.h index c95d09f3..9b5d9eff 100644 --- a/src/common/Crypt/base64.h +++ b/src/common/Crypt/base64.h @@ -1,6 +1,6 @@ #include -namespace Sapphire::Util +namespace Sapphire::Common::Util { std::string base64Encode( uint8_t const*, uint32_t len ); diff --git a/src/common/Crypt/md5.cpp b/src/common/Crypt/md5.cpp index 130042e2..de5cf7ef 100644 --- a/src/common/Crypt/md5.cpp +++ b/src/common/Crypt/md5.cpp @@ -37,7 +37,7 @@ (b)[(i) + 3] = (uint8_t) ( (n) >> 24 ); \ } -void Sapphire::Util::md5_starts( md5_context* ctx ) +void Sapphire::Common::Util::md5_starts( md5_context* ctx ) { ctx->total[ 0 ] = 0; ctx->total[ 1 ] = 0; @@ -48,7 +48,7 @@ void Sapphire::Util::md5_starts( md5_context* ctx ) ctx->state[ 3 ] = 0x10325476; } -void md5_process( Sapphire::Util::md5_context* ctx, uint8_t data[64] ) +void md5_process( Sapphire::Common::Util::md5_context* ctx, uint8_t data[64] ) { uint32_t X[16], A, B, C, D; @@ -171,7 +171,7 @@ void md5_process( Sapphire::Util::md5_context* ctx, uint8_t data[64] ) ctx->state[ 3 ] += D; } -void Sapphire::Util::md5_update( md5_context* ctx, uint8_t* input, uint32_t length ) +void Sapphire::Common::Util::md5_update( md5_context* ctx, uint8_t* input, uint32_t length ) { uint32_t left, fill; @@ -219,7 +219,7 @@ static uint8_t md5_padding[64] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -void Sapphire::Util::md5_finish( md5_context* ctx, uint8_t digest[16] ) +void Sapphire::Common::Util::md5_finish( md5_context* ctx, uint8_t digest[16] ) { uint32_t last, padn; uint32_t high, low; @@ -248,7 +248,7 @@ void Sapphire::Util::md5_finish( md5_context* ctx, uint8_t digest[16] ) * those are the standard RFC 1321 test vectors */ -void Sapphire::Util::md5( uint8_t* text, uint8_t* hash, int32_t size ) +void Sapphire::Common::Util::md5( uint8_t* text, uint8_t* hash, int32_t size ) { md5_context ctx; md5_starts( &ctx ); diff --git a/src/common/Crypt/md5.h b/src/common/Crypt/md5.h index cfdb4ad8..f27dd5a9 100644 --- a/src/common/Crypt/md5.h +++ b/src/common/Crypt/md5.h @@ -3,7 +3,7 @@ #include -namespace Sapphire::Util +namespace Sapphire::Common::Util { using md5_context = struct { diff --git a/src/common/Database/DbCommon.h b/src/common/Database/DbCommon.h index 89d537b6..d702ce72 100644 --- a/src/common/Database/DbCommon.h +++ b/src/common/Database/DbCommon.h @@ -1,6 +1,8 @@ #ifndef SAPPHIRE_DBCOMMON_H #define SAPPHIRE_DBCOMMON_H +#include + namespace Sapphire::Db { struct ConnectionInfo diff --git a/src/common/Database/DbConnection.cpp b/src/common/Database/DbConnection.cpp index 133baa56..7013d626 100644 --- a/src/common/Database/DbConnection.cpp +++ b/src/common/Database/DbConnection.cpp @@ -4,7 +4,6 @@ #include "Logging/Logger.h" #include "PreparedStatement.h" -#include "Framework.h" Sapphire::Db::DbConnection::DbConnection( ConnectionInfo& connInfo ) : m_reconnecting( false ), @@ -17,7 +16,7 @@ Sapphire::Db::DbConnection::DbConnection( ConnectionInfo& connInfo ) : } -Sapphire::Db::DbConnection::DbConnection( Sapphire::LockedWaitQueue< std::shared_ptr< Operation > >* queue, +Sapphire::Db::DbConnection::DbConnection( Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >* queue, Sapphire::Db::ConnectionInfo& connInfo ) : m_reconnecting( false ), m_prepareError( false ), diff --git a/src/common/Database/DbConnection.h b/src/common/Database/DbConnection.h index a31a531d..fc84b74f 100644 --- a/src/common/Database/DbConnection.h +++ b/src/common/Database/DbConnection.h @@ -42,7 +42,7 @@ namespace Sapphire::Db DbConnection( ConnectionInfo& connInfo ); // Constructor for asynchronous connections. - DbConnection( Sapphire::LockedWaitQueue< std::shared_ptr< Operation > >* queue, ConnectionInfo& connInfo ); + DbConnection( Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >* queue, ConnectionInfo& connInfo ); virtual ~DbConnection(); @@ -92,7 +92,7 @@ namespace Sapphire::Db bool m_prepareError; private: - LockedWaitQueue< std::shared_ptr< Operation > >* m_queue; + Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >* m_queue; std::shared_ptr< DbWorker > m_worker; std::shared_ptr< Mysql::Connection > m_pConnection; ConnectionInfo& m_connectionInfo; diff --git a/src/common/Database/DbWorker.cpp b/src/common/Database/DbWorker.cpp index 74ee0378..d08f251f 100644 --- a/src/common/Database/DbWorker.cpp +++ b/src/common/Database/DbWorker.cpp @@ -2,7 +2,9 @@ #include "Operation.h" #include "Util/LockedWaitQueue.h" -Sapphire::Db::DbWorker::DbWorker( Sapphire::LockedWaitQueue< std::shared_ptr< Operation > >* newQueue, +using namespace Sapphire::Common; + +Sapphire::Db::DbWorker::DbWorker( Util::LockedWaitQueue< std::shared_ptr< Operation > >* newQueue, DbConnection* pConn ) { m_pConn = pConn; diff --git a/src/common/Database/DbWorker.h b/src/common/Database/DbWorker.h index 13250c19..655ef13f 100644 --- a/src/common/Database/DbWorker.h +++ b/src/common/Database/DbWorker.h @@ -14,12 +14,12 @@ namespace Sapphire::Db class DbWorker { public: - DbWorker( LockedWaitQueue< std::shared_ptr< Operation > >* newQueue, DbConnection* connection ); + DbWorker( Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >* newQueue, DbConnection* connection ); ~DbWorker(); private: - LockedWaitQueue< std::shared_ptr< Operation > >* m_queue; + Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >* m_queue; DbConnection* m_pConn; void workerThread(); diff --git a/src/common/Database/DbWorkerPool.cpp b/src/common/Database/DbWorkerPool.cpp index c9ef3b51..09a24bfb 100644 --- a/src/common/Database/DbWorkerPool.cpp +++ b/src/common/Database/DbWorkerPool.cpp @@ -5,7 +5,6 @@ #include "StatementTask.h" #include "Operation.h" #include "ZoneDbConnection.h" -#include "Framework.h" #include "Logging/Logger.h" #include @@ -21,7 +20,7 @@ class PingOperation : public Sapphire::Db::Operation template< class T > Sapphire::Db::DbWorkerPool< T >::DbWorkerPool() : - m_queue( new Sapphire::LockedWaitQueue< std::shared_ptr< Operation > >() ), + m_queue( new Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >() ), m_asyncThreads( 0 ), m_synchThreads( 0 ) { diff --git a/src/common/Database/DbWorkerPool.h b/src/common/Database/DbWorkerPool.h index a29bd3f1..bbc02e46 100644 --- a/src/common/Database/DbWorkerPool.h +++ b/src/common/Database/DbWorkerPool.h @@ -83,7 +83,7 @@ namespace Sapphire::Db const std::string& getDatabaseName() const; - std::unique_ptr< Sapphire::LockedWaitQueue< std::shared_ptr< Operation > > > m_queue; + std::unique_ptr< Common::Util::LockedWaitQueue< std::shared_ptr< Operation > > > m_queue; std::array< std::vector< std::shared_ptr< T > >, IDX_SIZE > m_connections; ConnectionInfo m_connectionInfo; uint8_t m_asyncThreads; diff --git a/src/common/Database/ZoneDbConnection.cpp b/src/common/Database/ZoneDbConnection.cpp index cceea22f..a6ecb50c 100644 --- a/src/common/Database/ZoneDbConnection.cpp +++ b/src/common/Database/ZoneDbConnection.cpp @@ -6,7 +6,7 @@ Sapphire::Db::ZoneDbConnection::ZoneDbConnection( ConnectionInfo& connInfo ) : { } -Sapphire::Db::ZoneDbConnection::ZoneDbConnection( Sapphire::LockedWaitQueue< std::shared_ptr< Operation > >* q, +Sapphire::Db::ZoneDbConnection::ZoneDbConnection( Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >* q, ConnectionInfo& connInfo ) : DbConnection( q, connInfo ) { @@ -22,18 +22,20 @@ void Sapphire::Db::ZoneDbConnection::doPrepareStatements() m_stmts.resize( MAX_STATEMENTS ); /// CHARA - prepareStatement( CHARA_SEL, "SELECT ContentId, Name, Hp, Mp, Tp, Gp, Mode, Mount, InvincibleGM, Voice, " - "Customize, ModelMainWeapon, ModelSubWeapon, ModelSystemWeapon, " - "ModelEquip, EmoteModeType, FirstLoginTime, Language, IsNewGame, " - "IsNewAdventurer, TerritoryType, TerritoryId, PosX, PosY, PosZ, PosR, " - "OTerritoryType, OTerritoryId, OPosX, OPosY, OPosZ, OPosR, GuardianDeity, " - "BirthDay, BirthMonth, Class, Status, TotalPlayTime, FirstClass, HomePoint, " - "FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, " - "Aetheryte, HowTo, Minions, Mounts, Orchestrion, EquippedMannequin, ConfigFlags, " - "QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, " - "GrandCompanyRank, Discovery, GMRank, EquipDisplayFlags, Unlocks, CFPenaltyUntil, " - "Pose " - "FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC ); + prepareStatement( CHARA_SEL, + "SELECT ContentId, Name, Hp, Mp, Tp, Gp, Mode, Mount, InvincibleGM, Voice, " + "Customize, ModelMainWeapon, ModelSubWeapon, ModelSystemWeapon, " + "ModelEquip, EmoteModeType, FirstLoginTime, Language, IsNewGame, " + "IsNewAdventurer, TerritoryType, TerritoryId, PosX, PosY, PosZ, PosR, " + "OTerritoryType, OTerritoryId, OPosX, OPosY, OPosZ, OPosR, GuardianDeity, " + "BirthDay, BirthMonth, Class, Status, TotalPlayTime, FirstClass, HomePoint, " + "FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, " + "Aetheryte, HowTo, Minions, Mounts, Orchestrion, EquippedMannequin, ConfigFlags, " + "QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, " + "GrandCompanyRank, Discovery, GMRank, EquipDisplayFlags, Unlocks, CFPenaltyUntil, " + "Pose " + "FROM charainfo WHERE CharacterId = ?;", + CONNECTION_SYNC ); prepareStatement( CHARA_UP, @@ -47,19 +49,23 @@ void Sapphire::Db::ZoneDbConnection::doPrepareStatements() "ActiveTitle = ?, TitleList = ?, Achievement = ?, Aetheryte = ?, HowTo = ?, Minions = ?, Mounts = ?, Orchestrion = ?, " "EquippedMannequin = ?, ConfigFlags = ?, QuestCompleteFlags = ?, OpeningSequence = ?, " "QuestTracking = ?, GrandCompany = ?, GrandCompanyRank = ?, Discovery = ?, GMRank = ?, EquipDisplayFlags = ?, Unlocks = ?, " - "CFPenaltyUntil = ?, Pose = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); + "CFPenaltyUntil = ?, Pose = ? WHERE CharacterId = ?;", + CONNECTION_ASYNC ); - prepareStatement( CHARA_SEL_MINIMAL, "SELECT Name, Customize, ModelMainWeapon, ModelSubWeapon, ModelEquip, TerritoryType, GuardianDeity, " - "Class, ContentId, BirthDay, BirthMonth, EquipDisplayFlags " - "FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC ); + prepareStatement( CHARA_SEL_MINIMAL, + "SELECT Name, Customize, ModelMainWeapon, ModelSubWeapon, ModelEquip, TerritoryType, GuardianDeity, " + "Class, ContentId, BirthDay, BirthMonth, EquipDisplayFlags " + "FROM charainfo WHERE CharacterId = ?;", + CONNECTION_SYNC ); - prepareStatement( CHARA_INS, "INSERT INTO charainfo (AccountId, CharacterId, ContentId, Name, Hp, Mp, " - "Customize, Voice, IsNewGame, TerritoryType, PosX, PosY, PosZ, PosR, ModelEquip, " - "IsNewAdventurer, GuardianDeity, Birthday, BirthMonth, Class, Status, FirstClass, " - "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " - "Aetheryte, GMRank, Mounts, Orchestrion, UPDATE_DATE ) " - "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );", + prepareStatement( CHARA_INS, + "INSERT INTO charainfo (AccountId, CharacterId, ContentId, Name, Hp, Mp, " + "Customize, Voice, IsNewGame, TerritoryType, PosX, PosY, PosZ, PosR, ModelEquip, " + "IsNewAdventurer, GuardianDeity, Birthday, BirthMonth, Class, Status, FirstClass, " + "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " + "Aetheryte, GMRank, Mounts, Orchestrion, UPDATE_DATE ) " + "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );", CONNECTION_SYNC ); prepareStatement( CHARA_UP_NAME, "UPDATE charainfo SET Name = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); diff --git a/src/common/Database/ZoneDbConnection.h b/src/common/Database/ZoneDbConnection.h index 93bacc23..8c74bf19 100644 --- a/src/common/Database/ZoneDbConnection.h +++ b/src/common/Database/ZoneDbConnection.h @@ -112,7 +112,7 @@ namespace Sapphire::Db ZoneDbConnection( ConnectionInfo& connInfo ); - ZoneDbConnection( Sapphire::LockedWaitQueue< std::shared_ptr< Operation > >* q, ConnectionInfo& connInfo ); + ZoneDbConnection( Common::Util::LockedWaitQueue< std::shared_ptr< Operation > >* q, ConnectionInfo& connInfo ); ~ZoneDbConnection(); diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index da9df8b1..fd44e942 100644 --- a/src/common/Exd/ExdDataGenerated.cpp +++ b/src/common/Exd/ExdDataGenerated.cpp @@ -3,6578 +3,12165 @@ Sapphire::Data::Achievement::Achievement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AchievementDat.get_row( row_id ); - achievementCategory = exdData->getField< uint8_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); - description = exdData->getField< std::string >( row, 2 ); - points = exdData->getField< uint8_t >( row, 3 ); - title = exdData->getField< uint16_t >( row, 4 ); - item = exdData->getField< uint32_t >( row, 5 ); - icon = exdData->getField< uint16_t >( row, 6 ); - type = exdData->getField< uint8_t >( row, 8 ); - key = exdData->getField< int32_t >( row, 9 ); - data.push_back( exdData->getField< int32_t >( row, 10 ) ); - data.push_back( exdData->getField< int32_t >( row, 11 ) ); - data.push_back( exdData->getField< int32_t >( row, 12 ) ); - data.push_back( exdData->getField< int32_t >( row, 13 ) ); - data.push_back( exdData->getField< int32_t >( row, 14 ) ); - data.push_back( exdData->getField< int32_t >( row, 15 ) ); - data.push_back( exdData->getField< int32_t >( row, 16 ) ); - data.push_back( exdData->getField< int32_t >( row, 17 ) ); - order = exdData->getField< uint16_t >( row, 18 ); - initialHide = exdData->getField< bool >( row, 20 ); + auto row = exdData->m_AchievementDat.get_row( row_id ); + achievementCategory = exdData->getField< uint8_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); + description = exdData->getField< std::string >( row, 2 ); + points = exdData->getField< uint8_t >( row, 3 ); + title = exdData->getField< uint16_t >( row, 4 ); + item = exdData->getField< uint32_t >( row, 5 ); + icon = exdData->getField< uint16_t >( row, 6 ); + type = exdData->getField< uint8_t >( row, 8 ); + key = exdData->getField< int32_t >( row, 9 ); + data.push_back( exdData->getField< int32_t >( row, 10 ) ); + data.push_back( exdData->getField< int32_t >( row, 11 ) ); + data.push_back( exdData->getField< int32_t >( row, 12 ) ); + data.push_back( exdData->getField< int32_t >( row, 13 ) ); + data.push_back( exdData->getField< int32_t >( row, 14 ) ); + data.push_back( exdData->getField< int32_t >( row, 15 ) ); + data.push_back( exdData->getField< int32_t >( row, 16 ) ); + data.push_back( exdData->getField< int32_t >( row, 17 ) ); + order = exdData->getField< uint16_t >( row, 18 ); + achievementHideCondition = exdData->getField< uint8_t >( row, 20 ); } Sapphire::Data::AchievementCategory::AchievementCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AchievementCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - achievementKind = exdData->getField< uint8_t >( row, 1 ); - hideCategory = exdData->getField< bool >( row, 3 ); + auto row = exdData->m_AchievementCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + achievementKind = exdData->getField< uint8_t >( row, 1 ); + showComplete = exdData->getField< bool >( row, 2 ); + hideCategory = exdData->getField< bool >( row, 3 ); + order = exdData->getField< uint8_t >( row, 4 ); +} + +Sapphire::Data::AchievementHideCondition::AchievementHideCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_AchievementHideConditionDat.get_row( row_id ); + hideAchievement = exdData->getField< bool >( row, 0 ); + hideName = exdData->getField< bool >( row, 1 ); + hideConditions = exdData->getField< bool >( row, 2 ); } Sapphire::Data::AchievementKind::AchievementKind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AchievementKindDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_AchievementKindDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + order = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::Action::Action( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< uint16_t >( row, 2 ); - actionCategory = exdData->getField< uint8_t >( row, 3 ); - animationStart = exdData->getField< uint8_t >( row, 5 ); - vFX = exdData->getField< uint8_t >( row, 6 ); - animationEnd = exdData->getField< int16_t >( row, 7 ); - actionTimelineHit = exdData->getField< uint16_t >( row, 8 ); - classJob = exdData->getField< int8_t >( row, 10 ); - classJobLevel = exdData->getField< uint8_t >( row, 12 ); - isRoleAction = exdData->getField< bool >( row, 13 ); - range = exdData->getField< int8_t >( row, 14 ); - canTargetSelf = exdData->getField< bool >( row, 15 ); - canTargetParty = exdData->getField< bool >( row, 16 ); - canTargetFriendly = exdData->getField< bool >( row, 17 ); - canTargetHostile = exdData->getField< bool >( row, 18 ); - targetArea = exdData->getField< bool >( row, 21 ); - canTargetDead = exdData->getField< bool >( row, 25 ); - castType = exdData->getField< uint8_t >( row, 27 ); - effectRange = exdData->getField< uint8_t >( row, 28 ); - xAxisModifier = exdData->getField< uint8_t >( row, 29 ); - costType = exdData->getField< uint8_t >( row, 31 ); - cost = exdData->getField< uint16_t >( row, 32 ); - actionCombo = exdData->getField< uint16_t >( row, 35 ); - preservesCombo = exdData->getField< bool >( row, 36 ); - cast100ms = exdData->getField< uint16_t >( row, 37 ); - recast100ms = exdData->getField< uint16_t >( row, 38 ); - cooldownGroup = exdData->getField< uint8_t >( row, 39 ); - attackType = exdData->getField< int8_t >( row, 40 ); - aspect = exdData->getField< uint8_t >( row, 41 ); - actionProcStatus = exdData->getField< uint8_t >( row, 42 ); - statusGainSelf = exdData->getField< uint16_t >( row, 43 ); - unlockLink = exdData->getField< uint32_t >( row, 44 ); - classJobCategory = exdData->getField< uint8_t >( row, 45 ); - affectsPosition = exdData->getField< bool >( row, 48 ); - omen = exdData->getField< uint8_t >( row, 49 ); - isPvP = exdData->getField< bool >( row, 50 ); - isPlayerAction = exdData->getField< bool >( row, 62 ); + auto row = exdData->m_ActionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< uint16_t >( row, 2 ); + actionCategory = exdData->getField< uint8_t >( row, 3 ); + animationStart = exdData->getField< uint8_t >( row, 5 ); + vFX = exdData->getField< uint8_t >( row, 6 ); + animationEnd = exdData->getField< int16_t >( row, 7 ); + actionTimelineHit = exdData->getField< uint16_t >( row, 8 ); + classJob = exdData->getField< int8_t >( row, 10 ); + behaviourType = exdData->getField< uint8_t >( row, 11 ); + classJobLevel = exdData->getField< uint8_t >( row, 12 ); + isRoleAction = exdData->getField< bool >( row, 13 ); + range = exdData->getField< int8_t >( row, 14 ); + canTargetSelf = exdData->getField< bool >( row, 15 ); + canTargetParty = exdData->getField< bool >( row, 16 ); + canTargetFriendly = exdData->getField< bool >( row, 17 ); + canTargetHostile = exdData->getField< bool >( row, 18 ); + targetArea = exdData->getField< bool >( row, 21 ); + canTargetDead = exdData->getField< bool >( row, 25 ); + castType = exdData->getField< uint8_t >( row, 27 ); + effectRange = exdData->getField< uint8_t >( row, 28 ); + xAxisModifier = exdData->getField< uint8_t >( row, 29 ); + primaryCostType = exdData->getField< uint8_t >( row, 31 ); + primaryCostValue = exdData->getField< uint16_t >( row, 32 ); + secondaryCostType = exdData->getField< uint8_t >( row, 33 ); + secondaryCostValue = exdData->getField< uint16_t >( row, 34 ); + actionCombo = exdData->getField< uint16_t >( row, 35 ); + preservesCombo = exdData->getField< bool >( row, 36 ); + cast100ms = exdData->getField< uint16_t >( row, 37 ); + recast100ms = exdData->getField< uint16_t >( row, 38 ); + cooldownGroup = exdData->getField< uint8_t >( row, 39 ); + maxCharges = exdData->getField< uint8_t >( row, 41 ); + attackType = exdData->getField< int8_t >( row, 42 ); + aspect = exdData->getField< uint8_t >( row, 43 ); + actionProcStatus = exdData->getField< uint8_t >( row, 44 ); + statusGainSelf = exdData->getField< uint16_t >( row, 46 ); + unlockLink = exdData->getField< uint32_t >( row, 47 ); + classJobCategory = exdData->getField< uint8_t >( row, 48 ); + affectsPosition = exdData->getField< bool >( row, 51 ); + omen = exdData->getField< uint16_t >( row, 52 ); + isPvP = exdData->getField< bool >( row, 53 ); + isPlayerAction = exdData->getField< bool >( row, 65 ); } Sapphire::Data::ActionCastTimeline::ActionCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionCastTimelineDat.get_row( row_id ); - name = exdData->getField< uint16_t >( row, 0 ); - vFX = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_ActionCastTimelineDat.get_row( row_id ); + name = exdData->getField< uint16_t >( row, 0 ); + vFX = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::ActionCastVFX::ActionCastVFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionCastVFXDat.get_row( row_id ); - vFX = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_ActionCastVFXDat.get_row( row_id ); + vFX = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::ActionCategory::ActionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ActionCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::ActionComboRoute::ActionComboRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionComboRouteDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - action.push_back( exdData->getField< uint16_t >( row, 2 ) ); - action.push_back( exdData->getField< uint16_t >( row, 3 ) ); - action.push_back( exdData->getField< uint16_t >( row, 4 ) ); - action.push_back( exdData->getField< uint16_t >( row, 5 ) ); + auto row = exdData->m_ActionComboRouteDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + action.push_back( exdData->getField< uint16_t >( row, 2 ) ); + action.push_back( exdData->getField< uint16_t >( row, 3 ) ); + action.push_back( exdData->getField< uint16_t >( row, 4 ) ); + action.push_back( exdData->getField< uint16_t >( row, 5 ) ); } Sapphire::Data::ActionIndirection::ActionIndirection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionIndirectionDat.get_row( row_id ); - name = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_ActionIndirectionDat.get_row( row_id ); + name = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::ActionParam::ActionParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionParamDat.get_row( row_id ); - name = exdData->getField< int16_t >( row, 0 ); + auto row = exdData->m_ActionParamDat.get_row( row_id ); + name = exdData->getField< int16_t >( row, 0 ); } Sapphire::Data::ActionProcStatus::ActionProcStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionProcStatusDat.get_row( row_id ); - status = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_ActionProcStatusDat.get_row( row_id ); + status = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::ActionTimeline::ActionTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionTimelineDat.get_row( row_id ); - key = exdData->getField< std::string >( row, 6 ); + auto row = exdData->m_ActionTimelineDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + priority = exdData->getField< uint8_t >( row, 1 ); + pause = exdData->getField< bool >( row, 2 ); + stance = exdData->getField< uint8_t >( row, 3 ); + slot = exdData->getField< uint8_t >( row, 4 ); + lookAtMode = exdData->getField< uint8_t >( row, 5 ); + key = exdData->getField< std::string >( row, 6 ); + actionTimelineIDMode = exdData->getField< uint8_t >( row, 7 ); + weaponTimeline = exdData->getField< uint8_t >( row, 8 ); + loadType = exdData->getField< uint8_t >( row, 9 ); + startAttach = exdData->getField< uint8_t >( row, 10 ); + residentPap = exdData->getField< uint8_t >( row, 11 ); + resident = exdData->getField< bool >( row, 12 ); + killUpper = exdData->getField< uint16_t >( row, 13 ); + isMotionCanceledByMoving = exdData->getField< bool >( row, 14 ); + isLoop = exdData->getField< uint8_t >( row, 16 ); } Sapphire::Data::ActionTimelineMove::ActionTimelineMove( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionTimelineMoveDat.get_row( row_id ); + auto row = exdData->m_ActionTimelineMoveDat.get_row( row_id ); } Sapphire::Data::ActionTimelineReplace::ActionTimelineReplace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionTimelineReplaceDat.get_row( row_id ); - old = exdData->getField< uint16_t >( row, 0 ); - New = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_ActionTimelineReplaceDat.get_row( row_id ); + old = exdData->getField< uint16_t >( row, 0 ); + _new = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::ActionTransient::ActionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActionTransientDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ActionTransientDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::ActivityFeedButtons::ActivityFeedButtons( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActivityFeedButtonsDat.get_row( row_id ); - bannerURL = exdData->getField< std::string >( row, 1 ); - description = exdData->getField< std::string >( row, 2 ); - language = exdData->getField< std::string >( row, 3 ); - pictureURL = exdData->getField< std::string >( row, 4 ); + auto row = exdData->m_ActivityFeedButtonsDat.get_row( row_id ); + bannerURL = exdData->getField< std::string >( row, 1 ); + description = exdData->getField< std::string >( row, 2 ); + language = exdData->getField< std::string >( row, 3 ); + pictureURL = exdData->getField< std::string >( row, 4 ); } Sapphire::Data::ActivityFeedCaptions::ActivityFeedCaptions( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActivityFeedCaptionsDat.get_row( row_id ); - jA = exdData->getField< std::string >( row, 0 ); - eN = exdData->getField< std::string >( row, 1 ); - dE = exdData->getField< std::string >( row, 2 ); - fR = exdData->getField< std::string >( row, 3 ); + auto row = exdData->m_ActivityFeedCaptionsDat.get_row( row_id ); + jA = exdData->getField< std::string >( row, 0 ); + eN = exdData->getField< std::string >( row, 1 ); + dE = exdData->getField< std::string >( row, 2 ); + fR = exdData->getField< std::string >( row, 3 ); } Sapphire::Data::ActivityFeedGroupCaptions::ActivityFeedGroupCaptions( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActivityFeedGroupCaptionsDat.get_row( row_id ); - jA = exdData->getField< std::string >( row, 0 ); - eN = exdData->getField< std::string >( row, 1 ); - dE = exdData->getField< std::string >( row, 2 ); - fR = exdData->getField< std::string >( row, 3 ); + auto row = exdData->m_ActivityFeedGroupCaptionsDat.get_row( row_id ); + jA = exdData->getField< std::string >( row, 0 ); + eN = exdData->getField< std::string >( row, 1 ); + dE = exdData->getField< std::string >( row, 2 ); + fR = exdData->getField< std::string >( row, 3 ); } Sapphire::Data::ActivityFeedImages::ActivityFeedImages( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ActivityFeedImagesDat.get_row( row_id ); - expansionImage = exdData->getField< std::string >( row, 0 ); - activityFeedJA = exdData->getField< std::string >( row, 1 ); - activityFeedEN = exdData->getField< std::string >( row, 2 ); - activityFeedDE = exdData->getField< std::string >( row, 3 ); - activityFeedFR = exdData->getField< std::string >( row, 4 ); + auto row = exdData->m_ActivityFeedImagesDat.get_row( row_id ); + expansionImage = exdData->getField< std::string >( row, 0 ); + activityFeedJA = exdData->getField< std::string >( row, 1 ); + activityFeedEN = exdData->getField< std::string >( row, 2 ); + activityFeedDE = exdData->getField< std::string >( row, 3 ); + activityFeedFR = exdData->getField< std::string >( row, 4 ); } Sapphire::Data::Addon::Addon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AddonDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); -} - -Sapphire::Data::AddonHud::AddonHud( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_AddonHudDat.get_row( row_id ); - _long = exdData->getField< std::string >( row, 0 ); - _short = exdData->getField< std::string >( row, 1 ); - _function = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_AddonDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Adventure::Adventure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AdventureDat.get_row( row_id ); - level = exdData->getField< int32_t >( row, 0 ); - emote = exdData->getField< uint16_t >( row, 3 ); - minTime = exdData->getField< uint16_t >( row, 4 ); - maxTime = exdData->getField< uint16_t >( row, 5 ); - placeName = exdData->getField< int32_t >( row, 6 ); - iconList = exdData->getField< int32_t >( row, 7 ); - iconDiscovered = exdData->getField< int32_t >( row, 8 ); - name = exdData->getField< std::string >( row, 9 ); - impression = exdData->getField< std::string >( row, 10 ); - description = exdData->getField< std::string >( row, 11 ); - iconUndiscovered = exdData->getField< int32_t >( row, 12 ); - isInitial = exdData->getField< bool >( row, 13 ); + auto row = exdData->m_AdventureDat.get_row( row_id ); + level = exdData->getField< int32_t >( row, 0 ); + minLevel = exdData->getField< int32_t >( row, 1 ); + maxLevel = exdData->getField< uint8_t >( row, 2 ); + emote = exdData->getField< uint16_t >( row, 3 ); + minTime = exdData->getField< uint16_t >( row, 4 ); + maxTime = exdData->getField< uint16_t >( row, 5 ); + placeName = exdData->getField< int32_t >( row, 6 ); + iconList = exdData->getField< int32_t >( row, 7 ); + iconDiscovered = exdData->getField< int32_t >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); + impression = exdData->getField< std::string >( row, 10 ); + description = exdData->getField< std::string >( row, 11 ); + iconUndiscovered = exdData->getField< int32_t >( row, 12 ); + isInitial = exdData->getField< bool >( row, 13 ); } Sapphire::Data::AdventureExPhase::AdventureExPhase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AdventureExPhaseDat.get_row( row_id ); - quest = exdData->getField< uint32_t >( row, 0 ); - adventureBegin = exdData->getField< uint32_t >( row, 1 ); - adventureEnd = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_AdventureExPhaseDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); + adventureBegin = exdData->getField< uint32_t >( row, 1 ); + adventureEnd = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::AetherCurrent::AetherCurrent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AetherCurrentDat.get_row( row_id ); - quest = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_AetherCurrentDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::AetherCurrentCompFlgSet::AetherCurrentCompFlgSet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AetherCurrentCompFlgSetDat.get_row( row_id ); - territory = exdData->getField< int32_t >( row, 0 ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 2 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 3 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 4 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 5 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 6 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 7 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 8 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 9 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 10 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 11 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 12 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 13 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 14 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 15 ) ); - aetherCurrent.push_back( exdData->getField< int32_t >( row, 16 ) ); + auto row = exdData->m_AetherCurrentCompFlgSetDat.get_row( row_id ); + territory = exdData->getField< int32_t >( row, 0 ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 2 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 3 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 4 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 5 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 6 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 7 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 8 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 9 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 10 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 11 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 12 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 13 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 14 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 15 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 16 ) ); } Sapphire::Data::AetherialWheel::AetherialWheel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AetherialWheelDat.get_row( row_id ); - itemUnprimed = exdData->getField< int32_t >( row, 0 ); - itemPrimed = exdData->getField< int32_t >( row, 1 ); - grade = exdData->getField< uint8_t >( row, 2 ); - hoursRequired = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_AetherialWheelDat.get_row( row_id ); + itemUnprimed = exdData->getField< int32_t >( row, 0 ); + itemPrimed = exdData->getField< int32_t >( row, 1 ); + grade = exdData->getField< uint8_t >( row, 2 ); + hoursRequired = exdData->getField< uint8_t >( row, 3 ); } Sapphire::Data::Aetheryte::Aetheryte( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AetheryteDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - placeName = exdData->getField< uint16_t >( row, 8 ); - aethernetName = exdData->getField< uint16_t >( row, 9 ); - territory = exdData->getField< uint16_t >( row, 10 ); - level.push_back( exdData->getField< uint32_t >( row, 11 ) ); - level.push_back( exdData->getField< uint32_t >( row, 12 ) ); - level.push_back( exdData->getField< uint32_t >( row, 13 ) ); - level.push_back( exdData->getField< uint32_t >( row, 14 ) ); - isAetheryte = exdData->getField< bool >( row, 15 ); - aethernetGroup = exdData->getField< uint8_t >( row, 16 ); - requiredQuest = exdData->getField< uint32_t >( row, 18 ); - map = exdData->getField< uint16_t >( row, 19 ); - aetherstreamX = exdData->getField< int16_t >( row, 20 ); - aetherstreamY = exdData->getField< int16_t >( row, 21 ); + auto row = exdData->m_AetheryteDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + placeName = exdData->getField< uint16_t >( row, 8 ); + aethernetName = exdData->getField< uint16_t >( row, 9 ); + territory = exdData->getField< uint16_t >( row, 10 ); + level.push_back( exdData->getField< uint32_t >( row, 11 ) ); + level.push_back( exdData->getField< uint32_t >( row, 12 ) ); + level.push_back( exdData->getField< uint32_t >( row, 13 ) ); + level.push_back( exdData->getField< uint32_t >( row, 14 ) ); + isAetheryte = exdData->getField< bool >( row, 15 ); + aethernetGroup = exdData->getField< uint8_t >( row, 17 ); + requiredQuest = exdData->getField< uint32_t >( row, 19 ); + map = exdData->getField< uint16_t >( row, 20 ); + aetherstreamX = exdData->getField< int16_t >( row, 21 ); + aetherstreamY = exdData->getField< int16_t >( row, 22 ); } Sapphire::Data::AetheryteSystemDefine::AetheryteSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AetheryteSystemDefineDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_AetheryteSystemDefineDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); + defineValue = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::AirshipExplorationLevel::AirshipExplorationLevel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AirshipExplorationLevelDat.get_row( row_id ); - expToNext = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_AirshipExplorationLevelDat.get_row( row_id ); + capacity = exdData->getField< uint16_t >( row, 0 ); + expToNext = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::AirshipExplorationLog::AirshipExplorationLog( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AirshipExplorationLogDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_AirshipExplorationLogDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::AirshipExplorationParamType::AirshipExplorationParamType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AirshipExplorationParamTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_AirshipExplorationParamTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::AirshipExplorationPart::AirshipExplorationPart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AirshipExplorationPartDat.get_row( row_id ); - rank = exdData->getField< uint8_t >( row, 1 ); - components = exdData->getField< uint8_t >( row, 2 ); - surveillance = exdData->getField< int16_t >( row, 3 ); - retrieval = exdData->getField< int16_t >( row, 4 ); - speed = exdData->getField< int16_t >( row, 5 ); - range = exdData->getField< int16_t >( row, 6 ); - favor = exdData->getField< int16_t >( row, 7 ); - repairMaterials = exdData->getField< uint8_t >( row, 9 ); + auto row = exdData->m_AirshipExplorationPartDat.get_row( row_id ); + rank = exdData->getField< uint8_t >( row, 1 ); + components = exdData->getField< uint8_t >( row, 2 ); + surveillance = exdData->getField< int16_t >( row, 3 ); + retrieval = exdData->getField< int16_t >( row, 4 ); + speed = exdData->getField< int16_t >( row, 5 ); + range = exdData->getField< int16_t >( row, 6 ); + favor = exdData->getField< int16_t >( row, 7 ); + repairMaterials = exdData->getField< uint8_t >( row, 9 ); } Sapphire::Data::AirshipExplorationPoint::AirshipExplorationPoint( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AirshipExplorationPointDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - nameShort = exdData->getField< std::string >( row, 1 ); - requiredLevel = exdData->getField< uint8_t >( row, 5 ); - requiredFuel = exdData->getField< uint16_t >( row, 6 ); - durationmin = exdData->getField< uint16_t >( row, 7 ); - requiredSurveillance = exdData->getField< uint8_t >( row, 10 ); - expReward = exdData->getField< uint32_t >( row, 13 ); + auto row = exdData->m_AirshipExplorationPointDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + nameShort = exdData->getField< std::string >( row, 1 ); + requiredLevel = exdData->getField< uint8_t >( row, 5 ); + requiredFuel = exdData->getField< uint16_t >( row, 6 ); + durationmin = exdData->getField< uint16_t >( row, 7 ); + requiredSurveillance = exdData->getField< uint8_t >( row, 10 ); + expReward = exdData->getField< uint32_t >( row, 13 ); +} + +Sapphire::Data::AnimationLOD::AnimationLOD( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_AnimationLODDat.get_row( row_id ); + cameraDistance = exdData->getField< float >( row, 0 ); + sampleInterval = exdData->getField< float >( row, 1 ); + boneLOD = exdData->getField< int8_t >( row, 2 ); + animationEnable.push_back( exdData->getField< bool >( row, 3 ) ); + animationEnable.push_back( exdData->getField< bool >( row, 4 ) ); + animationEnable.push_back( exdData->getField< bool >( row, 5 ) ); + animationEnable.push_back( exdData->getField< bool >( row, 6 ) ); + animationEnable.push_back( exdData->getField< bool >( row, 7 ) ); + animationEnable.push_back( exdData->getField< bool >( row, 8 ) ); + animationEnable.push_back( exdData->getField< bool >( row, 9 ) ); + animationEnable.push_back( exdData->getField< bool >( row, 10 ) ); } Sapphire::Data::AnimaWeapon5::AnimaWeapon5( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeapon5Dat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - secondaryStatTotal = exdData->getField< uint8_t >( row, 2 ); - parameter.push_back( exdData->getField< uint8_t >( row, 3 ) ); - parameter.push_back( exdData->getField< uint8_t >( row, 4 ) ); - parameter.push_back( exdData->getField< uint8_t >( row, 5 ) ); - parameter.push_back( exdData->getField< uint8_t >( row, 6 ) ); - parameter.push_back( exdData->getField< uint8_t >( row, 7 ) ); + auto row = exdData->m_AnimaWeapon5Dat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + secondaryStatTotal = exdData->getField< uint8_t >( row, 2 ); + parameter.push_back( exdData->getField< uint8_t >( row, 3 ) ); + parameter.push_back( exdData->getField< uint8_t >( row, 4 ) ); + parameter.push_back( exdData->getField< uint8_t >( row, 5 ) ); + parameter.push_back( exdData->getField< uint8_t >( row, 6 ) ); + parameter.push_back( exdData->getField< uint8_t >( row, 7 ) ); } Sapphire::Data::AnimaWeapon5Param::AnimaWeapon5Param( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeapon5ParamDat.get_row( row_id ); - baseParam = exdData->getField< uint8_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_AnimaWeapon5ParamDat.get_row( row_id ); + baseParam = exdData->getField< uint8_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::AnimaWeapon5PatternGroup::AnimaWeapon5PatternGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeapon5PatternGroupDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_AnimaWeapon5PatternGroupDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::AnimaWeapon5SpiritTalk::AnimaWeapon5SpiritTalk( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeapon5SpiritTalkDat.get_row( row_id, subRow ); - dialogue = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_AnimaWeapon5SpiritTalkDat.get_row( row_id, subRow ); + dialogue = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::AnimaWeapon5SpiritTalkParam::AnimaWeapon5SpiritTalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeapon5SpiritTalkParamDat.get_row( row_id ); - prologue = exdData->getField< std::string >( row, 0 ); - epilogue = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_AnimaWeapon5SpiritTalkParamDat.get_row( row_id ); + prologue = exdData->getField< std::string >( row, 0 ); + epilogue = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::AnimaWeapon5TradeItem::AnimaWeapon5TradeItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeapon5TradeItemDat.get_row( row_id ); - crystalSand = exdData->getField< uint32_t >( row, 1 ); - qty = exdData->getField< uint8_t >( row, 2 ); - category = exdData->getField< uint8_t >( row, 27 ); + auto row = exdData->m_AnimaWeapon5TradeItemDat.get_row( row_id ); + crystalSand = exdData->getField< uint32_t >( row, 1 ); + qty = exdData->getField< uint8_t >( row, 2 ); + category = exdData->getField< uint8_t >( row, 27 ); } Sapphire::Data::AnimaWeaponFUITalk::AnimaWeaponFUITalk( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeaponFUITalkDat.get_row( row_id, subRow ); - dialogue = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_AnimaWeaponFUITalkDat.get_row( row_id, subRow ); + dialogue = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::AnimaWeaponFUITalkParam::AnimaWeaponFUITalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeaponFUITalkParamDat.get_row( row_id ); - prologue = exdData->getField< std::string >( row, 0 ); - epilogue = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_AnimaWeaponFUITalkParamDat.get_row( row_id ); + prologue = exdData->getField< std::string >( row, 0 ); + epilogue = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::AnimaWeaponIcon::AnimaWeaponIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeaponIconDat.get_row( row_id ); - hyperconductive = exdData->getField< int32_t >( row, 0 ); - reborn = exdData->getField< int32_t >( row, 1 ); - sharpened = exdData->getField< int32_t >( row, 2 ); - zodiac = exdData->getField< int32_t >( row, 3 ); - zodiacLux = exdData->getField< int32_t >( row, 4 ); + auto row = exdData->m_AnimaWeaponIconDat.get_row( row_id ); + hyperconductive = exdData->getField< int32_t >( row, 0 ); + reborn = exdData->getField< int32_t >( row, 1 ); + sharpened = exdData->getField< int32_t >( row, 2 ); + zodiac = exdData->getField< int32_t >( row, 3 ); + zodiacLux = exdData->getField< int32_t >( row, 4 ); } Sapphire::Data::AnimaWeaponItem::AnimaWeaponItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AnimaWeaponItemDat.get_row( row_id ); - item.push_back( exdData->getField< uint32_t >( row, 0 ) ); - item.push_back( exdData->getField< uint32_t >( row, 1 ) ); - item.push_back( exdData->getField< uint32_t >( row, 2 ) ); - item.push_back( exdData->getField< uint32_t >( row, 3 ) ); - item.push_back( exdData->getField< uint32_t >( row, 4 ) ); - item.push_back( exdData->getField< uint32_t >( row, 5 ) ); - item.push_back( exdData->getField< uint32_t >( row, 6 ) ); - item.push_back( exdData->getField< uint32_t >( row, 7 ) ); - item.push_back( exdData->getField< uint32_t >( row, 8 ) ); - item.push_back( exdData->getField< uint32_t >( row, 9 ) ); - item.push_back( exdData->getField< uint32_t >( row, 10 ) ); - item.push_back( exdData->getField< uint32_t >( row, 11 ) ); - item.push_back( exdData->getField< uint32_t >( row, 12 ) ); - item.push_back( exdData->getField< uint32_t >( row, 13 ) ); + auto row = exdData->m_AnimaWeaponItemDat.get_row( row_id ); + item.push_back( exdData->getField< uint32_t >( row, 0 ) ); + item.push_back( exdData->getField< uint32_t >( row, 1 ) ); + item.push_back( exdData->getField< uint32_t >( row, 2 ) ); + item.push_back( exdData->getField< uint32_t >( row, 3 ) ); + item.push_back( exdData->getField< uint32_t >( row, 4 ) ); + item.push_back( exdData->getField< uint32_t >( row, 5 ) ); + item.push_back( exdData->getField< uint32_t >( row, 6 ) ); + item.push_back( exdData->getField< uint32_t >( row, 7 ) ); + item.push_back( exdData->getField< uint32_t >( row, 8 ) ); + item.push_back( exdData->getField< uint32_t >( row, 9 ) ); + item.push_back( exdData->getField< uint32_t >( row, 10 ) ); + item.push_back( exdData->getField< uint32_t >( row, 11 ) ); + item.push_back( exdData->getField< uint32_t >( row, 12 ) ); + item.push_back( exdData->getField< uint32_t >( row, 13 ) ); } Sapphire::Data::AozAction::AozAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AozActionDat.get_row( row_id ); - action = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_AozActionDat.get_row( row_id ); + action = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::AozActionTransient::AozActionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AozActionTransientDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 1 ); - stats = exdData->getField< std::string >( row, 2 ); - description = exdData->getField< std::string >( row, 3 ); - location = exdData->getField< uint16_t >( row, 5 ); - startQuest = exdData->getField< uint32_t >( row, 6 ); - nextQuest = exdData->getField< uint32_t >( row, 7 ); + auto row = exdData->m_AozActionTransientDat.get_row( row_id ); + number = exdData->getField< uint8_t >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + stats = exdData->getField< std::string >( row, 2 ); + description = exdData->getField< std::string >( row, 3 ); + location = exdData->getField< uint16_t >( row, 5 ); + startQuest = exdData->getField< uint32_t >( row, 6 ); + nextQuest = exdData->getField< uint32_t >( row, 7 ); } Sapphire::Data::AOZArrangement::AOZArrangement( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AOZArrangementDat.get_row( row_id, subRow ); - aOZContentBriefingBNpc = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_AOZArrangementDat.get_row( row_id, subRow ); + aOZContentBriefingBNpc = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::AOZBoss::AOZBoss( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AOZBossDat.get_row( row_id ); - boss = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_AOZBossDat.get_row( row_id ); + boss = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::AOZContent::AOZContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AOZContentDat.get_row( row_id ); - standardFinishTime = exdData->getField< uint16_t >( row, 0 ); - idealFinishTime = exdData->getField< uint16_t >( row, 1 ); - act1FightType = exdData->getField< uint8_t >( row, 2 ); - act1 = exdData->getField< uint16_t >( row, 3 ); - arenaType1 = exdData->getField< uint8_t >( row, 4 ); - act2FightType = exdData->getField< uint8_t >( row, 5 ); - act2 = exdData->getField< uint16_t >( row, 6 ); - arenaType2 = exdData->getField< uint8_t >( row, 7 ); - act3FightType = exdData->getField< uint8_t >( row, 8 ); - act3 = exdData->getField< uint16_t >( row, 9 ); - arenaType3 = exdData->getField< uint8_t >( row, 10 ); - contentEntry = exdData->getField< uint32_t >( row, 11 ); - order = exdData->getField< uint8_t >( row, 12 ); - gilReward = exdData->getField< uint16_t >( row, 13 ); - alliedSealsReward = exdData->getField< uint16_t >( row, 14 ); - tomestonesReward = exdData->getField< uint16_t >( row, 15 ); + auto row = exdData->m_AOZContentDat.get_row( row_id ); + standardFinishTime = exdData->getField< uint16_t >( row, 0 ); + idealFinishTime = exdData->getField< uint16_t >( row, 1 ); + act1FightType = exdData->getField< uint8_t >( row, 2 ); + act1 = exdData->getField< uint16_t >( row, 3 ); + arenaType1 = exdData->getField< uint8_t >( row, 4 ); + act2FightType = exdData->getField< uint8_t >( row, 5 ); + act2 = exdData->getField< uint16_t >( row, 6 ); + arenaType2 = exdData->getField< uint8_t >( row, 7 ); + act3FightType = exdData->getField< uint8_t >( row, 8 ); + act3 = exdData->getField< uint16_t >( row, 9 ); + arenaType3 = exdData->getField< uint8_t >( row, 10 ); + contentEntry = exdData->getField< uint32_t >( row, 11 ); + order = exdData->getField< uint8_t >( row, 12 ); + gilReward = exdData->getField< uint16_t >( row, 13 ); + alliedSealsReward = exdData->getField< uint16_t >( row, 14 ); + tomestonesReward = exdData->getField< uint16_t >( row, 15 ); } Sapphire::Data::AOZContentBriefingBNpc::AOZContentBriefingBNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AOZContentBriefingBNpcDat.get_row( row_id ); - bNpcName = exdData->getField< uint32_t >( row, 0 ); - targetSmall = exdData->getField< uint32_t >( row, 1 ); - targetLarge = exdData->getField< uint32_t >( row, 2 ); - endurance = exdData->getField< uint8_t >( row, 4 ); - fire = exdData->getField< uint8_t >( row, 5 ); - ice = exdData->getField< uint8_t >( row, 6 ); - wind = exdData->getField< uint8_t >( row, 7 ); - earth = exdData->getField< uint8_t >( row, 8 ); - thunder = exdData->getField< uint8_t >( row, 9 ); - water = exdData->getField< uint8_t >( row, 10 ); - slashing = exdData->getField< uint8_t >( row, 11 ); - piercing = exdData->getField< uint8_t >( row, 12 ); - blunt = exdData->getField< uint8_t >( row, 13 ); - magic = exdData->getField< uint8_t >( row, 14 ); - slowResistance = exdData->getField< bool >( row, 15 ); - petrificationResistance = exdData->getField< bool >( row, 16 ); - paralysisResistance = exdData->getField< bool >( row, 17 ); - silenceResistance = exdData->getField< bool >( row, 18 ); - blindResistance = exdData->getField< bool >( row, 19 ); - stunResistance = exdData->getField< bool >( row, 20 ); - sleepResistance = exdData->getField< bool >( row, 21 ); - bindResistance = exdData->getField< bool >( row, 22 ); - heavyResistance = exdData->getField< bool >( row, 23 ); - instaDeathResistance = exdData->getField< bool >( row, 24 ); + auto row = exdData->m_AOZContentBriefingBNpcDat.get_row( row_id ); + bNpcName = exdData->getField< uint32_t >( row, 0 ); + targetSmall = exdData->getField< uint32_t >( row, 1 ); + targetLarge = exdData->getField< uint32_t >( row, 2 ); + endurance = exdData->getField< uint8_t >( row, 4 ); + fire = exdData->getField< uint8_t >( row, 5 ); + ice = exdData->getField< uint8_t >( row, 6 ); + wind = exdData->getField< uint8_t >( row, 7 ); + earth = exdData->getField< uint8_t >( row, 8 ); + thunder = exdData->getField< uint8_t >( row, 9 ); + water = exdData->getField< uint8_t >( row, 10 ); + slashing = exdData->getField< uint8_t >( row, 11 ); + piercing = exdData->getField< uint8_t >( row, 12 ); + blunt = exdData->getField< uint8_t >( row, 13 ); + magic = exdData->getField< uint8_t >( row, 14 ); + slowResistance = exdData->getField< bool >( row, 15 ); + petrificationResistance = exdData->getField< bool >( row, 16 ); + paralysisResistance = exdData->getField< bool >( row, 17 ); + silenceResistance = exdData->getField< bool >( row, 18 ); + blindResistance = exdData->getField< bool >( row, 19 ); + stunResistance = exdData->getField< bool >( row, 20 ); + sleepResistance = exdData->getField< bool >( row, 21 ); + bindResistance = exdData->getField< bool >( row, 22 ); + heavyResistance = exdData->getField< bool >( row, 23 ); + instaDeathResistance = exdData->getField< bool >( row, 24 ); } Sapphire::Data::AquariumFish::AquariumFish( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AquariumFishDat.get_row( row_id ); - aquariumWater = exdData->getField< uint8_t >( row, 0 ); - size = exdData->getField< uint8_t >( row, 1 ); - item = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_AquariumFishDat.get_row( row_id ); + aquariumWater = exdData->getField< uint8_t >( row, 0 ); + size = exdData->getField< uint8_t >( row, 1 ); + item = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::AquariumWater::AquariumWater( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AquariumWaterDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_AquariumWaterDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::ArrayEventHandler::ArrayEventHandler( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ArrayEventHandlerDat.get_row( row_id ); - data.push_back( exdData->getField< uint32_t >( row, 0 ) ); - data.push_back( exdData->getField< uint32_t >( row, 1 ) ); - data.push_back( exdData->getField< uint32_t >( row, 2 ) ); - data.push_back( exdData->getField< uint32_t >( row, 3 ) ); - data.push_back( exdData->getField< uint32_t >( row, 4 ) ); - data.push_back( exdData->getField< uint32_t >( row, 5 ) ); - data.push_back( exdData->getField< uint32_t >( row, 6 ) ); - data.push_back( exdData->getField< uint32_t >( row, 7 ) ); - data.push_back( exdData->getField< uint32_t >( row, 8 ) ); - data.push_back( exdData->getField< uint32_t >( row, 9 ) ); - data.push_back( exdData->getField< uint32_t >( row, 10 ) ); - data.push_back( exdData->getField< uint32_t >( row, 11 ) ); - data.push_back( exdData->getField< uint32_t >( row, 12 ) ); - data.push_back( exdData->getField< uint32_t >( row, 13 ) ); - data.push_back( exdData->getField< uint32_t >( row, 14 ) ); - data.push_back( exdData->getField< uint32_t >( row, 15 ) ); + auto row = exdData->m_ArrayEventHandlerDat.get_row( row_id ); + data.push_back( exdData->getField< uint32_t >( row, 0 ) ); + data.push_back( exdData->getField< uint32_t >( row, 1 ) ); + data.push_back( exdData->getField< uint32_t >( row, 2 ) ); + data.push_back( exdData->getField< uint32_t >( row, 3 ) ); + data.push_back( exdData->getField< uint32_t >( row, 4 ) ); + data.push_back( exdData->getField< uint32_t >( row, 5 ) ); + data.push_back( exdData->getField< uint32_t >( row, 6 ) ); + data.push_back( exdData->getField< uint32_t >( row, 7 ) ); + data.push_back( exdData->getField< uint32_t >( row, 8 ) ); + data.push_back( exdData->getField< uint32_t >( row, 9 ) ); + data.push_back( exdData->getField< uint32_t >( row, 10 ) ); + data.push_back( exdData->getField< uint32_t >( row, 11 ) ); + data.push_back( exdData->getField< uint32_t >( row, 12 ) ); + data.push_back( exdData->getField< uint32_t >( row, 13 ) ); + data.push_back( exdData->getField< uint32_t >( row, 14 ) ); + data.push_back( exdData->getField< uint32_t >( row, 15 ) ); } Sapphire::Data::AttackType::AttackType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_AttackTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_AttackTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::BacklightColor::BacklightColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BacklightColorDat.get_row( row_id ); - color = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_BacklightColorDat.get_row( row_id ); + color = exdData->getField< uint32_t >( row, 0 ); +} + +Sapphire::Data::Ballista::Ballista( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BallistaDat.get_row( row_id ); + bNPC = exdData->getField< uint16_t >( row, 0 ); + near = exdData->getField< int8_t >( row, 1 ); + far = exdData->getField< int8_t >( row, 2 ); + angle = exdData->getField< uint16_t >( row, 3 ); + bullet = exdData->getField< uint8_t >( row, 4 ); + action0 = exdData->getField< uint16_t >( row, 7 ); + action1 = exdData->getField< uint16_t >( row, 8 ); + action2 = exdData->getField< uint16_t >( row, 9 ); + action3 = exdData->getField< uint16_t >( row, 10 ); } Sapphire::Data::Balloon::Balloon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BalloonDat.get_row( row_id ); - dialogue = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_BalloonDat.get_row( row_id ); + slowly = exdData->getField< bool >( row, 0 ); + dialogue = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::BaseParam::BaseParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BaseParamDat.get_row( row_id ); - order = exdData->getField< int8_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); - description = exdData->getField< std::string >( row, 2 ); - oneHWpn = exdData->getField< uint8_t >( row, 4 ); - oH = exdData->getField< uint8_t >( row, 5 ); - head = exdData->getField< uint8_t >( row, 6 ); - chest = exdData->getField< uint8_t >( row, 7 ); - hands = exdData->getField< uint8_t >( row, 8 ); - waist = exdData->getField< uint8_t >( row, 9 ); - legs = exdData->getField< uint8_t >( row, 10 ); - feet = exdData->getField< uint8_t >( row, 11 ); - earring = exdData->getField< uint8_t >( row, 12 ); - necklace = exdData->getField< uint8_t >( row, 13 ); - bracelet = exdData->getField< uint8_t >( row, 14 ); - ring = exdData->getField< uint8_t >( row, 15 ); - twoHWpn = exdData->getField< uint8_t >( row, 16 ); - chestHead = exdData->getField< uint8_t >( row, 18 ); - chestHeadLegsFeet = exdData->getField< uint8_t >( row, 19 ); - legsFeet = exdData->getField< uint8_t >( row, 21 ); - headChestHandsLegsFeet = exdData->getField< uint8_t >( row, 22 ); - chestLegsGloves = exdData->getField< uint8_t >( row, 23 ); - chestLegsFeet = exdData->getField< uint8_t >( row, 24 ); + auto row = exdData->m_BaseParamDat.get_row( row_id ); + packetIndex = exdData->getField< int8_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); + description = exdData->getField< std::string >( row, 2 ); + orderPriority = exdData->getField< uint8_t >( row, 3 ); + oneHWpn = exdData->getField< uint8_t >( row, 4 ); + oH = exdData->getField< uint8_t >( row, 5 ); + head = exdData->getField< uint8_t >( row, 6 ); + chest = exdData->getField< uint8_t >( row, 7 ); + hands = exdData->getField< uint8_t >( row, 8 ); + waist = exdData->getField< uint8_t >( row, 9 ); + legs = exdData->getField< uint8_t >( row, 10 ); + feet = exdData->getField< uint8_t >( row, 11 ); + earring = exdData->getField< uint8_t >( row, 12 ); + necklace = exdData->getField< uint8_t >( row, 13 ); + bracelet = exdData->getField< uint8_t >( row, 14 ); + ring = exdData->getField< uint8_t >( row, 15 ); + twoHWpn = exdData->getField< uint8_t >( row, 16 ); + underArmor = exdData->getField< uint8_t >( row, 17 ); + chestHead = exdData->getField< uint8_t >( row, 18 ); + chestHeadLegsFeet = exdData->getField< uint8_t >( row, 19 ); + legsFeet = exdData->getField< uint8_t >( row, 21 ); + headChestHandsLegsFeet = exdData->getField< uint8_t >( row, 22 ); + chestLegsGloves = exdData->getField< uint8_t >( row, 23 ); + chestLegsFeet = exdData->getField< uint8_t >( row, 24 ); + meldParam.push_back( exdData->getField< uint8_t >( row, 25 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 26 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 27 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 28 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 29 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 30 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 31 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 32 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 33 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 34 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 35 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 36 ) ); + meldParam.push_back( exdData->getField< uint8_t >( row, 37 ) ); } Sapphire::Data::BattleLeve::BattleLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BattleLeveDat.get_row( row_id ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 16 ) ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 17 ) ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 18 ) ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 19 ) ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 20 ) ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 21 ) ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 22 ) ); - enemyLevel.push_back( exdData->getField< uint16_t >( row, 23 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 24 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 25 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 26 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 27 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 28 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 29 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 30 ) ); - bNpcName.push_back( exdData->getField< uint32_t >( row, 31 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 32 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 33 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 34 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 35 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 36 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 37 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 38 ) ); - itemsInvolved.push_back( exdData->getField< int32_t >( row, 39 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 40 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 41 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 42 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 43 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 44 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 45 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 46 ) ); - itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 47 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 48 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 49 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 50 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 51 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 52 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 53 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 54 ) ); - itemDropRate.push_back( exdData->getField< uint8_t >( row, 55 ) ); + auto row = exdData->m_BattleLeveDat.get_row( row_id ); + time.push_back( exdData->getField< uint16_t >( row, 0 ) ); + time.push_back( exdData->getField< uint16_t >( row, 1 ) ); + time.push_back( exdData->getField< uint16_t >( row, 2 ) ); + time.push_back( exdData->getField< uint16_t >( row, 3 ) ); + time.push_back( exdData->getField< uint16_t >( row, 4 ) ); + time.push_back( exdData->getField< uint16_t >( row, 5 ) ); + time.push_back( exdData->getField< uint16_t >( row, 6 ) ); + time.push_back( exdData->getField< uint16_t >( row, 7 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 8 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 9 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 10 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 11 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 12 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 13 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 14 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 15 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 16 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 17 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 18 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 19 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 20 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 21 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 22 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 23 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 24 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 25 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 26 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 27 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 28 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 29 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 30 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 31 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 32 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 33 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 34 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 35 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 36 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 37 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 38 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 39 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 40 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 41 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 42 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 43 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 44 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 45 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 46 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 47 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 48 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 49 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 50 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 51 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 52 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 53 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 54 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 55 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 56 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 57 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 58 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 59 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 60 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 61 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 62 ) ); + toDoNumberInvolved.push_back( exdData->getField< uint32_t >( row, 63 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 168 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 169 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 170 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 171 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 172 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 173 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 174 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 175 ) ); + rule = exdData->getField< int32_t >( row, 176 ); + varient = exdData->getField< uint8_t >( row, 177 ); + objective0 = exdData->getField< uint16_t >( row, 178 ); + objective1 = exdData->getField< uint16_t >( row, 179 ); + objective2 = exdData->getField< uint16_t >( row, 180 ); + help0 = exdData->getField< uint16_t >( row, 181 ); + help1 = exdData->getField< uint16_t >( row, 182 ); +} + +Sapphire::Data::BattleLeveRule::BattleLeveRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BattleLeveRuleDat.get_row( row_id ); + rule = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::BeastRankBonus::BeastRankBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BeastRankBonusDat.get_row( row_id ); - item = exdData->getField< uint32_t >( row, 8 ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 9 ) ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 10 ) ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 11 ) ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 12 ) ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 13 ) ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 14 ) ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 15 ) ); - itemQuantity.push_back( exdData->getField< uint8_t >( row, 16 ) ); + auto row = exdData->m_BeastRankBonusDat.get_row( row_id ); + neutral = exdData->getField< uint16_t >( row, 0 ); + recognized = exdData->getField< uint16_t >( row, 1 ); + friendly = exdData->getField< uint16_t >( row, 2 ); + trusted = exdData->getField< uint16_t >( row, 3 ); + respected = exdData->getField< uint16_t >( row, 4 ); + honored = exdData->getField< uint16_t >( row, 5 ); + sworn = exdData->getField< uint16_t >( row, 6 ); + alliedBloodsworn = exdData->getField< uint16_t >( row, 7 ); + item = exdData->getField< uint32_t >( row, 8 ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 9 ) ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 10 ) ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 11 ) ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 12 ) ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 13 ) ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 14 ) ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 15 ) ); + itemQuantity.push_back( exdData->getField< uint8_t >( row, 16 ) ); } Sapphire::Data::BeastReputationRank::BeastReputationRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BeastReputationRankDat.get_row( row_id ); - requiredReputation = exdData->getField< uint16_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_BeastReputationRankDat.get_row( row_id ); + requiredReputation = exdData->getField< uint16_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); + alliedNames = exdData->getField< std::string >( row, 2 ); + color = exdData->getField< uint32_t >( row, 3 ); } Sapphire::Data::BeastTribe::BeastTribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BeastTribeDat.get_row( row_id ); - minLevel = exdData->getField< uint8_t >( row, 0 ); - maxLevel = exdData->getField< uint8_t >( row, 1 ); - beastRankBonus = exdData->getField< uint8_t >( row, 2 ); - iconReputation = exdData->getField< uint32_t >( row, 3 ); - icon = exdData->getField< uint32_t >( row, 4 ); - maxRank = exdData->getField< uint8_t >( row, 5 ); - alliedBeastTribeQuest = exdData->getField< uint32_t >( row, 6 ); - expansion = exdData->getField< uint8_t >( row, 7 ); - currencyItem = exdData->getField< uint32_t >( row, 8 ); - displayOrder = exdData->getField< uint8_t >( row, 9 ); - name = exdData->getField< std::string >( row, 10 ); - nameRelation = exdData->getField< std::string >( row, 18 ); + auto row = exdData->m_BeastTribeDat.get_row( row_id ); + minLevel = exdData->getField< uint8_t >( row, 1 ); + beastRankBonus = exdData->getField< uint8_t >( row, 2 ); + iconReputation = exdData->getField< uint32_t >( row, 3 ); + icon = exdData->getField< uint32_t >( row, 4 ); + maxRank = exdData->getField< uint8_t >( row, 5 ); + expansion = exdData->getField< uint8_t >( row, 6 ); + currencyItem = exdData->getField< uint32_t >( row, 7 ); + displayOrder = exdData->getField< uint8_t >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); + adjective = exdData->getField< int8_t >( row, 10 ); + plural = exdData->getField< std::string >( row, 11 ); + possessivePronoun = exdData->getField< int8_t >( row, 12 ); + startsWithVowel = exdData->getField< int8_t >( row, 13 ); + pronoun = exdData->getField< int8_t >( row, 14 ); + article = exdData->getField< int8_t >( row, 15 ); + dEF = exdData->getField< int8_t >( row, 16 ); + nameRelation = exdData->getField< std::string >( row, 17 ); } Sapphire::Data::Behavior::Behavior( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BehaviorDat.get_row( row_id, subRow ); - balloon = exdData->getField< uint16_t >( row, 6 ); + auto row = exdData->m_BehaviorDat.get_row( row_id, subRow ); + condition0Target = exdData->getField< uint8_t >( row, 2 ); + condition0Type = exdData->getField< uint8_t >( row, 3 ); + balloon = exdData->getField< int32_t >( row, 4 ); + condition1Target = exdData->getField< uint8_t >( row, 9 ); + condition1Type = exdData->getField< uint8_t >( row, 10 ); + contentArgument0 = exdData->getField< uint32_t >( row, 11 ); + contentArgument1 = exdData->getField< uint8_t >( row, 12 ); +} + +Sapphire::Data::BehaviorPath::BehaviorPath( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BehaviorPathDat.get_row( row_id ); + isTurnTransition = exdData->getField< bool >( row, 0 ); + isFadeOut = exdData->getField< bool >( row, 1 ); + isFadeIn = exdData->getField< bool >( row, 2 ); + isWalking = exdData->getField< bool >( row, 3 ); + speed = exdData->getField< float >( row, 5 ); +} + +Sapphire::Data::BenchmarkOverrideEquipment::BenchmarkOverrideEquipment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BenchmarkOverrideEquipmentDat.get_row( row_id ); + modelMainHand = exdData->getField< uint64_t >( row, 4 ); + dyeMainHand = exdData->getField< uint8_t >( row, 5 ); + modelOffHand = exdData->getField< uint64_t >( row, 6 ); + dyeOffHand = exdData->getField< uint8_t >( row, 7 ); + modelHead = exdData->getField< uint32_t >( row, 10 ); + dyeHead = exdData->getField< uint8_t >( row, 11 ); + modelBody = exdData->getField< uint32_t >( row, 12 ); + dyeBody = exdData->getField< uint8_t >( row, 13 ); + modelHands = exdData->getField< uint32_t >( row, 14 ); + dyeHands = exdData->getField< uint8_t >( row, 15 ); + modelLegs = exdData->getField< uint32_t >( row, 16 ); + dyeLegs = exdData->getField< uint8_t >( row, 17 ); + modelFeet = exdData->getField< uint32_t >( row, 18 ); + dyeFeet = exdData->getField< uint8_t >( row, 19 ); + modelEars = exdData->getField< uint32_t >( row, 20 ); + dyeEars = exdData->getField< uint8_t >( row, 21 ); + modelNeck = exdData->getField< uint32_t >( row, 22 ); + dyeNeck = exdData->getField< uint8_t >( row, 23 ); + modelWrists = exdData->getField< uint32_t >( row, 24 ); + dyeWrists = exdData->getField< uint8_t >( row, 25 ); + modelLeftRing = exdData->getField< uint32_t >( row, 26 ); + dyeLeftRing = exdData->getField< uint8_t >( row, 27 ); + modelRightRing = exdData->getField< uint32_t >( row, 28 ); + dyeRightRing = exdData->getField< uint8_t >( row, 29 ); } Sapphire::Data::BGM::BGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BGMDat.get_row( row_id ); - file = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_BGMDat.get_row( row_id ); + file = exdData->getField< std::string >( row, 0 ); + priority = exdData->getField< uint8_t >( row, 1 ); + disableRestartTimeOut = exdData->getField< bool >( row, 2 ); + disableRestart = exdData->getField< bool >( row, 3 ); + passEnd = exdData->getField< bool >( row, 4 ); + disableRestartResetTime = exdData->getField< float >( row, 5 ); + specialMode = exdData->getField< uint8_t >( row, 6 ); } Sapphire::Data::BGMFade::BGMFade( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BGMFadeDat.get_row( row_id ); - bGMFadeType = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_BGMFadeDat.get_row( row_id ); + sceneOut = exdData->getField< int32_t >( row, 0 ); + sceneIn = exdData->getField< int32_t >( row, 1 ); + bGMFadeType = exdData->getField< int32_t >( row, 2 ); +} + +Sapphire::Data::BGMFadeType::BGMFadeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BGMFadeTypeDat.get_row( row_id ); + fadeOutTime = exdData->getField< float >( row, 0 ); + fadeInTime = exdData->getField< float >( row, 1 ); + fadeInStartTime = exdData->getField< float >( row, 2 ); + resumeFadeInTime = exdData->getField< float >( row, 3 ); +} + +Sapphire::Data::BGMScene::BGMScene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BGMSceneDat.get_row( row_id ); + enableDisableRestart = exdData->getField< bool >( row, 0 ); + resume = exdData->getField< bool >( row, 1 ); + enablePassEnd = exdData->getField< bool >( row, 2 ); + forceAutoReset = exdData->getField< bool >( row, 3 ); + ignoreBattle = exdData->getField< bool >( row, 4 ); } Sapphire::Data::BGMSituation::BGMSituation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BGMSituationDat.get_row( row_id ); - bGMDay = exdData->getField< uint16_t >( row, 0 ); - bGMNight = exdData->getField< uint16_t >( row, 1 ); - bGMBattle = exdData->getField< uint16_t >( row, 2 ); - bGMField = exdData->getField< uint16_t >( row, 3 ); + auto row = exdData->m_BGMSituationDat.get_row( row_id ); + daytimeID = exdData->getField< uint16_t >( row, 0 ); + nightID = exdData->getField< uint16_t >( row, 1 ); + battleID = exdData->getField< uint16_t >( row, 2 ); + daybreakID = exdData->getField< uint16_t >( row, 3 ); + twilightID = exdData->getField< uint16_t >( row, 4 ); } Sapphire::Data::BGMSwitch::BGMSwitch( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BGMSwitchDat.get_row( row_id, subRow ); - bGMSystemDefine = exdData->getField< uint8_t >( row, 0 ); - quest = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_BGMSwitchDat.get_row( row_id, subRow ); + bGMSystemDefine = exdData->getField< uint8_t >( row, 0 ); + quest = exdData->getField< uint32_t >( row, 1 ); + bGM = exdData->getField< uint16_t >( row, 3 ); } Sapphire::Data::BGMSystemDefine::BGMSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BGMSystemDefineDat.get_row( row_id ); - define = exdData->getField< float >( row, 0 ); + auto row = exdData->m_BGMSystemDefineDat.get_row( row_id ); + define = exdData->getField< float >( row, 0 ); } Sapphire::Data::BNpcAnnounceIcon::BNpcAnnounceIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BNpcAnnounceIconDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_BNpcAnnounceIconDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::BNpcBase::BNpcBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BNpcBaseDat.get_row( row_id ); - behavior = exdData->getField< uint16_t >( row, 0 ); - actionTimelineMove = exdData->getField< uint8_t >( row, 1 ); - scale = exdData->getField< float >( row, 4 ); - modelChara = exdData->getField< uint16_t >( row, 5 ); - bNpcCustomize = exdData->getField< uint16_t >( row, 6 ); - npcEquip = exdData->getField< uint16_t >( row, 7 ); - arrayEventHandler = exdData->getField< int32_t >( row, 11 ); - bNpcParts = exdData->getField< uint8_t >( row, 12 ); + auto row = exdData->m_BNpcBaseDat.get_row( row_id ); + behavior = exdData->getField< uint16_t >( row, 0 ); + battalion = exdData->getField< uint8_t >( row, 1 ); + linkRace = exdData->getField< uint8_t >( row, 2 ); + rank = exdData->getField< uint8_t >( row, 3 ); + scale = exdData->getField< float >( row, 4 ); + modelChara = exdData->getField< uint16_t >( row, 5 ); + bNpcCustomize = exdData->getField< uint16_t >( row, 6 ); + npcEquip = exdData->getField< uint16_t >( row, 7 ); + special = exdData->getField< uint16_t >( row, 8 ); + sEPack = exdData->getField< uint8_t >( row, 9 ); + arrayEventHandler = exdData->getField< int32_t >( row, 11 ); + bNpcParts = exdData->getField< uint8_t >( row, 12 ); + isTargetLine = exdData->getField< bool >( row, 14 ); + isDisplayLevel = exdData->getField< bool >( row, 15 ); } Sapphire::Data::BNpcCustomize::BNpcCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BNpcCustomizeDat.get_row( row_id ); - race = exdData->getField< uint8_t >( row, 0 ); - gender = exdData->getField< uint8_t >( row, 1 ); - bodyType = exdData->getField< uint8_t >( row, 2 ); - height = exdData->getField< uint8_t >( row, 3 ); - tribe = exdData->getField< uint8_t >( row, 4 ); - face = exdData->getField< uint8_t >( row, 5 ); - hairStyle = exdData->getField< uint8_t >( row, 6 ); - hairHighlight = exdData->getField< uint8_t >( row, 7 ); - skinColor = exdData->getField< uint8_t >( row, 8 ); - eyeHeterochromia = exdData->getField< uint8_t >( row, 9 ); - hairColor = exdData->getField< uint8_t >( row, 10 ); - hairHighlightColor = exdData->getField< uint8_t >( row, 11 ); - facialFeature = exdData->getField< uint8_t >( row, 12 ); - facialFeatureColor = exdData->getField< uint8_t >( row, 13 ); - eyebrows = exdData->getField< uint8_t >( row, 14 ); - eyeColor = exdData->getField< uint8_t >( row, 15 ); - eyeShape = exdData->getField< uint8_t >( row, 16 ); - nose = exdData->getField< uint8_t >( row, 17 ); - jaw = exdData->getField< uint8_t >( row, 18 ); - mouth = exdData->getField< uint8_t >( row, 19 ); - lipColor = exdData->getField< uint8_t >( row, 20 ); - bustOrTone1 = exdData->getField< uint8_t >( row, 21 ); - extraFeature1 = exdData->getField< uint8_t >( row, 22 ); - extraFeature2OrBust = exdData->getField< uint8_t >( row, 23 ); - facePaint = exdData->getField< uint8_t >( row, 24 ); - facePaintColor = exdData->getField< uint8_t >( row, 25 ); + auto row = exdData->m_BNpcCustomizeDat.get_row( row_id ); + race = exdData->getField< uint8_t >( row, 0 ); + gender = exdData->getField< uint8_t >( row, 1 ); + bodyType = exdData->getField< uint8_t >( row, 2 ); + height = exdData->getField< uint8_t >( row, 3 ); + tribe = exdData->getField< uint8_t >( row, 4 ); + face = exdData->getField< uint8_t >( row, 5 ); + hairStyle = exdData->getField< uint8_t >( row, 6 ); + hairHighlight = exdData->getField< uint8_t >( row, 7 ); + skinColor = exdData->getField< uint8_t >( row, 8 ); + eyeHeterochromia = exdData->getField< uint8_t >( row, 9 ); + hairColor = exdData->getField< uint8_t >( row, 10 ); + hairHighlightColor = exdData->getField< uint8_t >( row, 11 ); + facialFeature = exdData->getField< uint8_t >( row, 12 ); + facialFeatureColor = exdData->getField< uint8_t >( row, 13 ); + eyebrows = exdData->getField< uint8_t >( row, 14 ); + eyeColor = exdData->getField< uint8_t >( row, 15 ); + eyeShape = exdData->getField< uint8_t >( row, 16 ); + nose = exdData->getField< uint8_t >( row, 17 ); + jaw = exdData->getField< uint8_t >( row, 18 ); + mouth = exdData->getField< uint8_t >( row, 19 ); + lipColor = exdData->getField< uint8_t >( row, 20 ); + bustOrTone1 = exdData->getField< uint8_t >( row, 21 ); + extraFeature1 = exdData->getField< uint8_t >( row, 22 ); + extraFeature2OrBust = exdData->getField< uint8_t >( row, 23 ); + facePaint = exdData->getField< uint8_t >( row, 24 ); + facePaintColor = exdData->getField< uint8_t >( row, 25 ); } Sapphire::Data::BNpcName::BNpcName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BNpcNameDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); + auto row = exdData->m_BNpcNameDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); } Sapphire::Data::BNpcParts::BNpcParts( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BNpcPartsDat.get_row( row_id ); - bNpcBase1 = exdData->getField< uint16_t >( row, 0 ); - partSlot1 = exdData->getField< uint8_t >( row, 1 ); - x1 = exdData->getField< float >( row, 6 ); - y1 = exdData->getField< float >( row, 7 ); - z1 = exdData->getField< float >( row, 8 ); - scale1 = exdData->getField< float >( row, 10 ); - bNpcBase2 = exdData->getField< uint16_t >( row, 11 ); - partSlot2 = exdData->getField< uint8_t >( row, 12 ); - x2 = exdData->getField< float >( row, 17 ); - y2 = exdData->getField< float >( row, 18 ); - z2 = exdData->getField< float >( row, 19 ); - scale2 = exdData->getField< float >( row, 21 ); - bNpcBase3 = exdData->getField< uint16_t >( row, 22 ); - partSlot3 = exdData->getField< uint8_t >( row, 23 ); - x3 = exdData->getField< float >( row, 28 ); - y3 = exdData->getField< float >( row, 29 ); - z3 = exdData->getField< float >( row, 30 ); - scale3 = exdData->getField< int16_t >( row, 31 ); - bNpcBase4 = exdData->getField< uint16_t >( row, 33 ); - partSlot4 = exdData->getField< uint8_t >( row, 34 ); - x4 = exdData->getField< float >( row, 39 ); - y4 = exdData->getField< float >( row, 40 ); - z4 = exdData->getField< float >( row, 41 ); - scale4 = exdData->getField< float >( row, 43 ); - bNpcBase5 = exdData->getField< uint16_t >( row, 44 ); - partSlot5 = exdData->getField< uint8_t >( row, 45 ); - x5 = exdData->getField< float >( row, 50 ); - y5 = exdData->getField< float >( row, 51 ); - z5 = exdData->getField< float >( row, 52 ); - scale5 = exdData->getField< float >( row, 54 ); + auto row = exdData->m_BNpcPartsDat.get_row( row_id ); + bNpcBase1 = exdData->getField< uint16_t >( row, 0 ); + partSlot1 = exdData->getField< uint8_t >( row, 1 ); + x1 = exdData->getField< float >( row, 6 ); + y1 = exdData->getField< float >( row, 7 ); + z1 = exdData->getField< float >( row, 8 ); + scale1 = exdData->getField< float >( row, 10 ); + bNpcBase2 = exdData->getField< uint16_t >( row, 11 ); + partSlot2 = exdData->getField< uint8_t >( row, 12 ); + x2 = exdData->getField< float >( row, 17 ); + y2 = exdData->getField< float >( row, 18 ); + z2 = exdData->getField< float >( row, 19 ); + scale2 = exdData->getField< float >( row, 21 ); + bNpcBase3 = exdData->getField< uint16_t >( row, 22 ); + partSlot3 = exdData->getField< uint8_t >( row, 23 ); + x3 = exdData->getField< float >( row, 28 ); + y3 = exdData->getField< float >( row, 29 ); + z3 = exdData->getField< float >( row, 30 ); + scale3 = exdData->getField< int16_t >( row, 31 ); + bNpcBase4 = exdData->getField< uint16_t >( row, 33 ); + partSlot4 = exdData->getField< uint8_t >( row, 34 ); + x4 = exdData->getField< float >( row, 39 ); + y4 = exdData->getField< float >( row, 40 ); + z4 = exdData->getField< float >( row, 41 ); + scale4 = exdData->getField< float >( row, 43 ); + bNpcBase5 = exdData->getField< uint16_t >( row, 44 ); + partSlot5 = exdData->getField< uint8_t >( row, 45 ); + x5 = exdData->getField< float >( row, 50 ); + y5 = exdData->getField< float >( row, 51 ); + z5 = exdData->getField< float >( row, 52 ); + scale5 = exdData->getField< float >( row, 54 ); +} + +Sapphire::Data::BNpcState::BNpcState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BNpcStateDat.get_row( row_id ); + slot = exdData->getField< uint8_t >( row, 0 ); + overRay = exdData->getField< int8_t >( row, 1 ); + idle = exdData->getField< uint16_t >( row, 4 ); + attribute0 = exdData->getField< uint8_t >( row, 5 ); + attributeFlag0 = exdData->getField< bool >( row, 6 ); + attribute1 = exdData->getField< uint8_t >( row, 7 ); + attributeFlag1 = exdData->getField< bool >( row, 8 ); + attribute2 = exdData->getField< uint8_t >( row, 9 ); + attributeFlag2 = exdData->getField< bool >( row, 10 ); + scale = exdData->getField< float >( row, 11 ); + loopTimeline = exdData->getField< int32_t >( row, 13 ); } Sapphire::Data::Buddy::Buddy( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BuddyDat.get_row( row_id ); - questRequirement2 = exdData->getField< int32_t >( row, 1 ); - questRequirement1 = exdData->getField< int32_t >( row, 2 ); - soundEffect4 = exdData->getField< std::string >( row, 4 ); - soundEffect3 = exdData->getField< std::string >( row, 5 ); - soundEffect2 = exdData->getField< std::string >( row, 6 ); - soundEffect1 = exdData->getField< std::string >( row, 7 ); + auto row = exdData->m_BuddyDat.get_row( row_id ); + base = exdData->getField< uint8_t >( row, 0 ); + questRequirement2 = exdData->getField< int32_t >( row, 1 ); + questRequirement1 = exdData->getField< int32_t >( row, 2 ); + baseEquip = exdData->getField< int32_t >( row, 3 ); + soundEffect4 = exdData->getField< std::string >( row, 4 ); + soundEffect3 = exdData->getField< std::string >( row, 5 ); + soundEffect2 = exdData->getField< std::string >( row, 6 ); + soundEffect1 = exdData->getField< std::string >( row, 7 ); } Sapphire::Data::BuddyAction::BuddyAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BuddyActionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< int32_t >( row, 2 ); - iconStatus = exdData->getField< int32_t >( row, 3 ); + auto row = exdData->m_BuddyActionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< int32_t >( row, 2 ); + iconStatus = exdData->getField< int32_t >( row, 3 ); + reward = exdData->getField< uint16_t >( row, 4 ); + sort = exdData->getField< uint8_t >( row, 5 ); } Sapphire::Data::BuddyEquip::BuddyEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BuddyEquipDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - name = exdData->getField< std::string >( row, 8 ); - modelTop = exdData->getField< int32_t >( row, 9 ); - modelBody = exdData->getField< int32_t >( row, 10 ); - modelLegs = exdData->getField< int32_t >( row, 11 ); - grandCompany = exdData->getField< uint8_t >( row, 12 ); - iconHead = exdData->getField< uint16_t >( row, 13 ); - iconBody = exdData->getField< uint16_t >( row, 14 ); - iconLegs = exdData->getField< uint16_t >( row, 15 ); + auto row = exdData->m_BuddyEquipDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + name = exdData->getField< std::string >( row, 8 ); + modelTop = exdData->getField< int32_t >( row, 9 ); + modelBody = exdData->getField< int32_t >( row, 10 ); + modelLegs = exdData->getField< int32_t >( row, 11 ); + grandCompany = exdData->getField< uint8_t >( row, 12 ); + iconHead = exdData->getField< uint16_t >( row, 13 ); + iconBody = exdData->getField< uint16_t >( row, 14 ); + iconLegs = exdData->getField< uint16_t >( row, 15 ); } Sapphire::Data::BuddyItem::BuddyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BuddyItemDat.get_row( row_id ); - item = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_BuddyItemDat.get_row( row_id ); + item = exdData->getField< uint16_t >( row, 0 ); + useField = exdData->getField< bool >( row, 1 ); + useTraining = exdData->getField< bool >( row, 2 ); + status = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::BuddyRank::BuddyRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BuddyRankDat.get_row( row_id ); - expRequired = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_BuddyRankDat.get_row( row_id ); + expRequired = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::BuddySkill::BuddySkill( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_BuddySkillDat.get_row( row_id ); - buddyLevel = exdData->getField< uint8_t >( row, 0 ); - isActive = exdData->getField< bool >( row, 1 ); - defender = exdData->getField< uint16_t >( row, 2 ); - attacker = exdData->getField< uint16_t >( row, 3 ); - healer = exdData->getField< uint16_t >( row, 4 ); + auto row = exdData->m_BuddySkillDat.get_row( row_id ); + buddyLevel = exdData->getField< uint8_t >( row, 0 ); + isActive = exdData->getField< bool >( row, 1 ); + defender = exdData->getField< uint16_t >( row, 2 ); + attacker = exdData->getField< uint16_t >( row, 3 ); + healer = exdData->getField< uint16_t >( row, 4 ); } Sapphire::Data::Cabinet::Cabinet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CabinetDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - order = exdData->getField< uint16_t >( row, 1 ); - category = exdData->getField< uint8_t >( row, 2 ); + auto row = exdData->m_CabinetDat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + order = exdData->getField< uint16_t >( row, 1 ); + category = exdData->getField< uint8_t >( row, 2 ); } Sapphire::Data::CabinetCategory::CabinetCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CabinetCategoryDat.get_row( row_id ); - menuOrder = exdData->getField< uint8_t >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); - category = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_CabinetCategoryDat.get_row( row_id ); + menuOrder = exdData->getField< uint8_t >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + category = exdData->getField< int32_t >( row, 2 ); } Sapphire::Data::Calendar::Calendar( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CalendarDat.get_row( row_id ); - month.push_back( exdData->getField< uint8_t >( row, 0 ) ); - month.push_back( exdData->getField< uint8_t >( row, 1 ) ); - month.push_back( exdData->getField< uint8_t >( row, 2 ) ); - month.push_back( exdData->getField< uint8_t >( row, 3 ) ); - month.push_back( exdData->getField< uint8_t >( row, 4 ) ); - month.push_back( exdData->getField< uint8_t >( row, 5 ) ); - month.push_back( exdData->getField< uint8_t >( row, 6 ) ); - month.push_back( exdData->getField< uint8_t >( row, 7 ) ); - month.push_back( exdData->getField< uint8_t >( row, 8 ) ); - month.push_back( exdData->getField< uint8_t >( row, 9 ) ); - month.push_back( exdData->getField< uint8_t >( row, 10 ) ); - month.push_back( exdData->getField< uint8_t >( row, 11 ) ); - month.push_back( exdData->getField< uint8_t >( row, 12 ) ); - month.push_back( exdData->getField< uint8_t >( row, 13 ) ); - month.push_back( exdData->getField< uint8_t >( row, 14 ) ); - month.push_back( exdData->getField< uint8_t >( row, 15 ) ); - month.push_back( exdData->getField< uint8_t >( row, 16 ) ); - month.push_back( exdData->getField< uint8_t >( row, 17 ) ); - month.push_back( exdData->getField< uint8_t >( row, 18 ) ); - month.push_back( exdData->getField< uint8_t >( row, 19 ) ); - month.push_back( exdData->getField< uint8_t >( row, 20 ) ); - month.push_back( exdData->getField< uint8_t >( row, 21 ) ); - month.push_back( exdData->getField< uint8_t >( row, 22 ) ); - month.push_back( exdData->getField< uint8_t >( row, 23 ) ); - month.push_back( exdData->getField< uint8_t >( row, 24 ) ); - month.push_back( exdData->getField< uint8_t >( row, 25 ) ); - month.push_back( exdData->getField< uint8_t >( row, 26 ) ); - month.push_back( exdData->getField< uint8_t >( row, 27 ) ); - month.push_back( exdData->getField< uint8_t >( row, 28 ) ); - month.push_back( exdData->getField< uint8_t >( row, 29 ) ); - month.push_back( exdData->getField< uint8_t >( row, 30 ) ); - month.push_back( exdData->getField< uint8_t >( row, 31 ) ); - day.push_back( exdData->getField< uint8_t >( row, 32 ) ); - day.push_back( exdData->getField< uint8_t >( row, 33 ) ); - day.push_back( exdData->getField< uint8_t >( row, 34 ) ); - day.push_back( exdData->getField< uint8_t >( row, 35 ) ); - day.push_back( exdData->getField< uint8_t >( row, 36 ) ); - day.push_back( exdData->getField< uint8_t >( row, 37 ) ); - day.push_back( exdData->getField< uint8_t >( row, 38 ) ); - day.push_back( exdData->getField< uint8_t >( row, 39 ) ); - day.push_back( exdData->getField< uint8_t >( row, 40 ) ); - day.push_back( exdData->getField< uint8_t >( row, 41 ) ); - day.push_back( exdData->getField< uint8_t >( row, 42 ) ); - day.push_back( exdData->getField< uint8_t >( row, 43 ) ); - day.push_back( exdData->getField< uint8_t >( row, 44 ) ); - day.push_back( exdData->getField< uint8_t >( row, 45 ) ); - day.push_back( exdData->getField< uint8_t >( row, 46 ) ); - day.push_back( exdData->getField< uint8_t >( row, 47 ) ); - day.push_back( exdData->getField< uint8_t >( row, 48 ) ); - day.push_back( exdData->getField< uint8_t >( row, 49 ) ); - day.push_back( exdData->getField< uint8_t >( row, 50 ) ); - day.push_back( exdData->getField< uint8_t >( row, 51 ) ); - day.push_back( exdData->getField< uint8_t >( row, 52 ) ); - day.push_back( exdData->getField< uint8_t >( row, 53 ) ); - day.push_back( exdData->getField< uint8_t >( row, 54 ) ); - day.push_back( exdData->getField< uint8_t >( row, 55 ) ); - day.push_back( exdData->getField< uint8_t >( row, 56 ) ); - day.push_back( exdData->getField< uint8_t >( row, 57 ) ); - day.push_back( exdData->getField< uint8_t >( row, 58 ) ); - day.push_back( exdData->getField< uint8_t >( row, 59 ) ); - day.push_back( exdData->getField< uint8_t >( row, 60 ) ); - day.push_back( exdData->getField< uint8_t >( row, 61 ) ); - day.push_back( exdData->getField< uint8_t >( row, 62 ) ); - day.push_back( exdData->getField< uint8_t >( row, 63 ) ); + auto row = exdData->m_CalendarDat.get_row( row_id ); + month.push_back( exdData->getField< uint8_t >( row, 0 ) ); + month.push_back( exdData->getField< uint8_t >( row, 1 ) ); + month.push_back( exdData->getField< uint8_t >( row, 2 ) ); + month.push_back( exdData->getField< uint8_t >( row, 3 ) ); + month.push_back( exdData->getField< uint8_t >( row, 4 ) ); + month.push_back( exdData->getField< uint8_t >( row, 5 ) ); + month.push_back( exdData->getField< uint8_t >( row, 6 ) ); + month.push_back( exdData->getField< uint8_t >( row, 7 ) ); + month.push_back( exdData->getField< uint8_t >( row, 8 ) ); + month.push_back( exdData->getField< uint8_t >( row, 9 ) ); + month.push_back( exdData->getField< uint8_t >( row, 10 ) ); + month.push_back( exdData->getField< uint8_t >( row, 11 ) ); + month.push_back( exdData->getField< uint8_t >( row, 12 ) ); + month.push_back( exdData->getField< uint8_t >( row, 13 ) ); + month.push_back( exdData->getField< uint8_t >( row, 14 ) ); + month.push_back( exdData->getField< uint8_t >( row, 15 ) ); + month.push_back( exdData->getField< uint8_t >( row, 16 ) ); + month.push_back( exdData->getField< uint8_t >( row, 17 ) ); + month.push_back( exdData->getField< uint8_t >( row, 18 ) ); + month.push_back( exdData->getField< uint8_t >( row, 19 ) ); + month.push_back( exdData->getField< uint8_t >( row, 20 ) ); + month.push_back( exdData->getField< uint8_t >( row, 21 ) ); + month.push_back( exdData->getField< uint8_t >( row, 22 ) ); + month.push_back( exdData->getField< uint8_t >( row, 23 ) ); + month.push_back( exdData->getField< uint8_t >( row, 24 ) ); + month.push_back( exdData->getField< uint8_t >( row, 25 ) ); + month.push_back( exdData->getField< uint8_t >( row, 26 ) ); + month.push_back( exdData->getField< uint8_t >( row, 27 ) ); + month.push_back( exdData->getField< uint8_t >( row, 28 ) ); + month.push_back( exdData->getField< uint8_t >( row, 29 ) ); + month.push_back( exdData->getField< uint8_t >( row, 30 ) ); + month.push_back( exdData->getField< uint8_t >( row, 31 ) ); + day.push_back( exdData->getField< uint8_t >( row, 32 ) ); + day.push_back( exdData->getField< uint8_t >( row, 33 ) ); + day.push_back( exdData->getField< uint8_t >( row, 34 ) ); + day.push_back( exdData->getField< uint8_t >( row, 35 ) ); + day.push_back( exdData->getField< uint8_t >( row, 36 ) ); + day.push_back( exdData->getField< uint8_t >( row, 37 ) ); + day.push_back( exdData->getField< uint8_t >( row, 38 ) ); + day.push_back( exdData->getField< uint8_t >( row, 39 ) ); + day.push_back( exdData->getField< uint8_t >( row, 40 ) ); + day.push_back( exdData->getField< uint8_t >( row, 41 ) ); + day.push_back( exdData->getField< uint8_t >( row, 42 ) ); + day.push_back( exdData->getField< uint8_t >( row, 43 ) ); + day.push_back( exdData->getField< uint8_t >( row, 44 ) ); + day.push_back( exdData->getField< uint8_t >( row, 45 ) ); + day.push_back( exdData->getField< uint8_t >( row, 46 ) ); + day.push_back( exdData->getField< uint8_t >( row, 47 ) ); + day.push_back( exdData->getField< uint8_t >( row, 48 ) ); + day.push_back( exdData->getField< uint8_t >( row, 49 ) ); + day.push_back( exdData->getField< uint8_t >( row, 50 ) ); + day.push_back( exdData->getField< uint8_t >( row, 51 ) ); + day.push_back( exdData->getField< uint8_t >( row, 52 ) ); + day.push_back( exdData->getField< uint8_t >( row, 53 ) ); + day.push_back( exdData->getField< uint8_t >( row, 54 ) ); + day.push_back( exdData->getField< uint8_t >( row, 55 ) ); + day.push_back( exdData->getField< uint8_t >( row, 56 ) ); + day.push_back( exdData->getField< uint8_t >( row, 57 ) ); + day.push_back( exdData->getField< uint8_t >( row, 58 ) ); + day.push_back( exdData->getField< uint8_t >( row, 59 ) ); + day.push_back( exdData->getField< uint8_t >( row, 60 ) ); + day.push_back( exdData->getField< uint8_t >( row, 61 ) ); + day.push_back( exdData->getField< uint8_t >( row, 62 ) ); + day.push_back( exdData->getField< uint8_t >( row, 63 ) ); +} + +Sapphire::Data::Carry::Carry( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CarryDat.get_row( row_id ); + model = exdData->getField< uint64_t >( row, 0 ); + timeline = exdData->getField< uint8_t >( row, 1 ); +} + +Sapphire::Data::Channeling::Channeling( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ChannelingDat.get_row( row_id ); + file = exdData->getField< std::string >( row, 0 ); + widthScale = exdData->getField< uint8_t >( row, 1 ); + addedIn53 = exdData->getField< bool >( row, 2 ); +} + +Sapphire::Data::CharaMakeClassEquip::CharaMakeClassEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CharaMakeClassEquipDat.get_row( row_id ); + helmet = exdData->getField< uint64_t >( row, 0 ); + top = exdData->getField< uint64_t >( row, 1 ); + glove = exdData->getField< uint64_t >( row, 2 ); + down = exdData->getField< uint64_t >( row, 3 ); + shoes = exdData->getField< uint64_t >( row, 4 ); + weapon = exdData->getField< uint64_t >( row, 5 ); + subWeapon = exdData->getField< uint64_t >( row, 6 ); + _class = exdData->getField< int32_t >( row, 7 ); } Sapphire::Data::CharaMakeCustomize::CharaMakeCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CharaMakeCustomizeDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 1 ); - data = exdData->getField< uint16_t >( row, 2 ); - isPurchasable = exdData->getField< bool >( row, 3 ); + auto row = exdData->m_CharaMakeCustomizeDat.get_row( row_id ); + featureID = exdData->getField< uint8_t >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + data = exdData->getField< uint16_t >( row, 2 ); + isPurchasable = exdData->getField< bool >( row, 3 ); + hint = exdData->getField< uint32_t >( row, 4 ); + hintItem = exdData->getField< uint32_t >( row, 5 ); +} + +Sapphire::Data::CharaMakeName::CharaMakeName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CharaMakeNameDat.get_row( row_id ); + hyurMidlanderMale = exdData->getField< std::string >( row, 0 ); + hyurMidlanderFemale = exdData->getField< std::string >( row, 1 ); + hyurMidlanderLastName = exdData->getField< std::string >( row, 2 ); + hyurHighlanderMale = exdData->getField< std::string >( row, 3 ); + hyurHighlanderFemale = exdData->getField< std::string >( row, 4 ); + hyurHighlanderLastName = exdData->getField< std::string >( row, 5 ); + elezenMale = exdData->getField< std::string >( row, 6 ); + elezenFemale = exdData->getField< std::string >( row, 7 ); + elezenWildwoodLastName = exdData->getField< std::string >( row, 8 ); + elezenDuskwightLastName = exdData->getField< std::string >( row, 9 ); + miqoteSunMale = exdData->getField< std::string >( row, 10 ); + miqoteSunFemale = exdData->getField< std::string >( row, 11 ); + miqoteSunMaleLastName = exdData->getField< std::string >( row, 12 ); + miqoteSunFemaleLastName = exdData->getField< std::string >( row, 13 ); + miqoteMoonMale = exdData->getField< std::string >( row, 14 ); + miqoteMoonFemale = exdData->getField< std::string >( row, 15 ); + miqoteMoonLastname = exdData->getField< std::string >( row, 16 ); + lalafellPlainsfolkFirstNameStart = exdData->getField< std::string >( row, 17 ); + lalafellPlainsfolkLastNameStart = exdData->getField< std::string >( row, 18 ); + lalafellPlainsfolkEndOfNames = exdData->getField< std::string >( row, 19 ); + lalafellDunesfolkMale = exdData->getField< std::string >( row, 20 ); + lalafellDunesfolkMaleLastName = exdData->getField< std::string >( row, 21 ); + lalafellDunesfolkFemale = exdData->getField< std::string >( row, 22 ); + lalafellDunesfolkFemaleLastName = exdData->getField< std::string >( row, 23 ); + roegadynSeaWolfMale = exdData->getField< std::string >( row, 24 ); + roegadynSeaWolfMaleLastName = exdData->getField< std::string >( row, 25 ); + roegadynSeaWolfFemale = exdData->getField< std::string >( row, 26 ); + roegadynSeaWolfFemaleLastName = exdData->getField< std::string >( row, 27 ); + roegadynHellsguardFirstName = exdData->getField< std::string >( row, 28 ); + roegadynHellsguardMaleLastName = exdData->getField< std::string >( row, 29 ); + roegadynHellsguardFemaleLastName = exdData->getField< std::string >( row, 30 ); + auRaRaenMale = exdData->getField< std::string >( row, 31 ); + auRaRaenFemale = exdData->getField< std::string >( row, 32 ); + auRaRaenLastName = exdData->getField< std::string >( row, 33 ); + auRaXaelaMale = exdData->getField< std::string >( row, 34 ); + auRaXaelaFemale = exdData->getField< std::string >( row, 35 ); + auRaXaelaLastName = exdData->getField< std::string >( row, 36 ); + hrothgarHellionsFirstName = exdData->getField< std::string >( row, 37 ); + hrothgarHellionsLastName = exdData->getField< std::string >( row, 38 ); + hrothgarLostFirstName = exdData->getField< std::string >( row, 39 ); + hrothgarLostLastName = exdData->getField< std::string >( row, 40 ); + vieraFirstName = exdData->getField< std::string >( row, 41 ); + vieraRavaLastName = exdData->getField< std::string >( row, 42 ); + vieraVeenaLastName = exdData->getField< std::string >( row, 43 ); } Sapphire::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CharaMakeTypeDat.get_row( row_id ); - race = exdData->getField< int32_t >( row, 0 ); - tribe = exdData->getField< int32_t >( row, 1 ); - gender = exdData->getField< int8_t >( row, 2 ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3291 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3292 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3293 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3294 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3295 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3296 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3297 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3298 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3299 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3300 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3301 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3302 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3303 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3304 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3305 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3306 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3307 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3308 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3309 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3310 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3311 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3312 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3313 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3314 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3315 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3316 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3317 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3318 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3319 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3320 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3321 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3322 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3323 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3324 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3325 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3326 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3327 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3328 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3329 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3330 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3331 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3332 ) ); + auto row = exdData->m_CharaMakeTypeDat.get_row( row_id ); + race = exdData->getField< int32_t >( row, 0 ); + tribe = exdData->getField< int32_t >( row, 1 ); + gender = exdData->getField< int8_t >( row, 2 ); + menu.push_back( exdData->getField< uint32_t >( row, 3 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 4 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 5 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 6 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 7 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 8 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 9 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 10 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 11 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 12 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 13 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 14 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 15 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 16 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 17 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 18 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 19 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 20 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 21 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 22 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 23 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 24 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 25 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 26 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 27 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 28 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 29 ) ); + menu.push_back( exdData->getField< uint32_t >( row, 30 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 31 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 32 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 33 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 34 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 35 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 36 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 37 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 38 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 39 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 40 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 41 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 42 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 43 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 44 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 45 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 46 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 47 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 48 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 49 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 50 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 51 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 52 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 53 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 54 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 55 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 56 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 57 ) ); + initVal.push_back( exdData->getField< uint8_t >( row, 58 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 59 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 60 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 61 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 62 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 63 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 64 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 65 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 66 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 67 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 68 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 69 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 70 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 71 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 72 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 73 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 74 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 75 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 76 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 77 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 78 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 79 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 80 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 81 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 82 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 83 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 84 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 85 ) ); + subMenuType.push_back( exdData->getField< uint8_t >( row, 86 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 87 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 88 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 89 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 90 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 91 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 92 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 93 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 94 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 95 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 96 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 97 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 98 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 99 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 100 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 101 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 102 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 103 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 104 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 105 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 106 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 107 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 108 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 109 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 110 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 111 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 112 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 113 ) ); + subMenuNum.push_back( exdData->getField< uint8_t >( row, 114 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 115 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 116 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 117 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 118 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 119 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 120 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 121 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 122 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 123 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 124 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 125 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 126 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 127 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 128 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 129 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 130 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 131 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 132 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 133 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 134 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 135 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 136 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 137 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 138 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 139 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 140 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 141 ) ); + lookAt.push_back( exdData->getField< uint8_t >( row, 142 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 143 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 144 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 145 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 146 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 147 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 148 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 149 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 150 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 151 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 152 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 153 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 154 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 155 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 156 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 157 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 158 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 159 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 160 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 161 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 162 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 163 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 164 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 165 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 166 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 167 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 168 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 169 ) ); + subMenuMask.push_back( exdData->getField< uint32_t >( row, 170 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 171 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 172 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 173 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 174 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 175 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 176 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 177 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 178 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 179 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 180 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 181 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 182 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 183 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 184 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 185 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 186 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 187 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 188 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 189 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 190 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 191 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 192 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 193 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 194 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 195 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 196 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 197 ) ); + customize.push_back( exdData->getField< uint32_t >( row, 198 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3279 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3280 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3281 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3282 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3283 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3284 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3285 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3286 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3287 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3288 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3289 ) ); + voiceStruct.push_back( exdData->getField< uint8_t >( row, 3290 ) ); } Sapphire::Data::ChocoboRace::ChocoboRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceDat.get_row( row_id ); - chocoboRaceRank = exdData->getField< uint8_t >( row, 0 ); - chocoboRaceTerritory = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_ChocoboRaceDat.get_row( row_id ); + chocoboRaceRank = exdData->getField< uint8_t >( row, 0 ); + chocoboRaceTerritory = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::ChocoboRaceAbility::ChocoboRaceAbility( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceAbilityDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< uint32_t >( row, 2 ); - chocoboRaceAbilityType = exdData->getField< int8_t >( row, 3 ); - value = exdData->getField< uint8_t >( row, 4 ); + auto row = exdData->m_ChocoboRaceAbilityDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< uint32_t >( row, 2 ); + chocoboRaceAbilityType = exdData->getField< int8_t >( row, 3 ); + value = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::ChocoboRaceAbilityType::ChocoboRaceAbilityType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceAbilityTypeDat.get_row( row_id ); - isActive = exdData->getField< bool >( row, 0 ); + auto row = exdData->m_ChocoboRaceAbilityTypeDat.get_row( row_id ); + isActive = exdData->getField< bool >( row, 0 ); } Sapphire::Data::ChocoboRaceItem::ChocoboRaceItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceItemDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_ChocoboRaceItemDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::ChocoboRaceRank::ChocoboRaceRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceRankDat.get_row( row_id ); - ratingMin = exdData->getField< uint16_t >( row, 0 ); - ratingMax = exdData->getField< uint16_t >( row, 1 ); - name = exdData->getField< uint16_t >( row, 2 ); - fee = exdData->getField< uint16_t >( row, 3 ); - icon = exdData->getField< int32_t >( row, 4 ); + auto row = exdData->m_ChocoboRaceRankDat.get_row( row_id ); + ratingMin = exdData->getField< uint16_t >( row, 0 ); + ratingMax = exdData->getField< uint16_t >( row, 1 ); + name = exdData->getField< uint16_t >( row, 2 ); + fee = exdData->getField< uint16_t >( row, 3 ); + icon = exdData->getField< int32_t >( row, 4 ); } Sapphire::Data::ChocoboRaceStatus::ChocoboRaceStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceStatusDat.get_row( row_id ); - status = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_ChocoboRaceStatusDat.get_row( row_id ); + status = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::ChocoboRaceTerritory::ChocoboRaceTerritory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceTerritoryDat.get_row( row_id ); - name = exdData->getField< uint16_t >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_ChocoboRaceTerritoryDat.get_row( row_id ); + name = exdData->getField< uint16_t >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::ChocoboRaceTutorial::ChocoboRaceTutorial( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceTutorialDat.get_row( row_id ); - npcYell.push_back( exdData->getField< int32_t >( row, 0 ) ); - npcYell.push_back( exdData->getField< int32_t >( row, 1 ) ); - npcYell.push_back( exdData->getField< int32_t >( row, 2 ) ); - npcYell.push_back( exdData->getField< int32_t >( row, 3 ) ); - npcYell.push_back( exdData->getField< int32_t >( row, 4 ) ); - npcYell.push_back( exdData->getField< int32_t >( row, 5 ) ); - npcYell.push_back( exdData->getField< int32_t >( row, 6 ) ); - npcYell.push_back( exdData->getField< int32_t >( row, 7 ) ); + auto row = exdData->m_ChocoboRaceTutorialDat.get_row( row_id ); + npcYell.push_back( exdData->getField< int32_t >( row, 0 ) ); + npcYell.push_back( exdData->getField< int32_t >( row, 1 ) ); + npcYell.push_back( exdData->getField< int32_t >( row, 2 ) ); + npcYell.push_back( exdData->getField< int32_t >( row, 3 ) ); + npcYell.push_back( exdData->getField< int32_t >( row, 4 ) ); + npcYell.push_back( exdData->getField< int32_t >( row, 5 ) ); + npcYell.push_back( exdData->getField< int32_t >( row, 6 ) ); + npcYell.push_back( exdData->getField< int32_t >( row, 7 ) ); } Sapphire::Data::ChocoboRaceWeather::ChocoboRaceWeather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboRaceWeatherDat.get_row( row_id ); - weatherType1 = exdData->getField< int32_t >( row, 0 ); - weatherType2 = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_ChocoboRaceWeatherDat.get_row( row_id ); + weatherType1 = exdData->getField< int32_t >( row, 0 ); + weatherType2 = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::ChocoboTaxi::ChocoboTaxi( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboTaxiDat.get_row( row_id ); - location = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_ChocoboTaxiDat.get_row( row_id ); + location = exdData->getField< uint32_t >( row, 0 ); + fare = exdData->getField< uint8_t >( row, 1 ); + timeRequired = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::ChocoboTaxiStand::ChocoboTaxiStand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ChocoboTaxiStandDat.get_row( row_id ); - placeName = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_ChocoboTaxiStandDat.get_row( row_id ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 0 ) ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 1 ) ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 2 ) ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 3 ) ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 4 ) ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 5 ) ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 6 ) ); + targetLocations.push_back( exdData->getField< uint16_t >( row, 7 ) ); + placeName = exdData->getField< std::string >( row, 8 ); +} + +Sapphire::Data::CircleActivity::CircleActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CircleActivityDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + order = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::ClassJob::ClassJob( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ClassJobDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - abbreviation = exdData->getField< std::string >( row, 1 ); - classJobCategory = exdData->getField< uint8_t >( row, 3 ); - expArrayIndex = exdData->getField< int8_t >( row, 4 ); - modifierHitPoints = exdData->getField< uint16_t >( row, 9 ); - modifierManaPoints = exdData->getField< uint16_t >( row, 10 ); - modifierStrength = exdData->getField< uint16_t >( row, 11 ); - modifierVitality = exdData->getField< uint16_t >( row, 12 ); - modifierDexterity = exdData->getField< uint16_t >( row, 13 ); - modifierIntelligence = exdData->getField< uint16_t >( row, 14 ); - modifierMind = exdData->getField< uint16_t >( row, 15 ); - modifierPiety = exdData->getField< uint16_t >( row, 16 ); - classJobParent = exdData->getField< uint8_t >( row, 26 ); - nameEnglish = exdData->getField< std::string >( row, 27 ); - itemStartingWeapon = exdData->getField< int32_t >( row, 28 ); - limitBreak1 = exdData->getField< uint16_t >( row, 34 ); - limitBreak2 = exdData->getField< uint16_t >( row, 35 ); - limitBreak3 = exdData->getField< uint16_t >( row, 36 ); - itemSoulCrystal = exdData->getField< uint32_t >( row, 38 ); - unlockQuest = exdData->getField< uint32_t >( row, 39 ); - relicQuest = exdData->getField< uint32_t >( row, 40 ); - prerequisite = exdData->getField< uint32_t >( row, 41 ); - startingLevel = exdData->getField< uint8_t >( row, 42 ); + auto row = exdData->m_ClassJobDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + abbreviation = exdData->getField< std::string >( row, 1 ); + classJobCategory = exdData->getField< uint8_t >( row, 3 ); + expArrayIndex = exdData->getField< int8_t >( row, 4 ); + battleClassIndex = exdData->getField< int8_t >( row, 5 ); + jobIndex = exdData->getField< uint8_t >( row, 7 ); + modifierHitPoints = exdData->getField< uint16_t >( row, 9 ); + modifierManaPoints = exdData->getField< uint16_t >( row, 10 ); + modifierStrength = exdData->getField< uint16_t >( row, 11 ); + modifierVitality = exdData->getField< uint16_t >( row, 12 ); + modifierDexterity = exdData->getField< uint16_t >( row, 13 ); + modifierIntelligence = exdData->getField< uint16_t >( row, 14 ); + modifierMind = exdData->getField< uint16_t >( row, 15 ); + modifierPiety = exdData->getField< uint16_t >( row, 16 ); + classJobParent = exdData->getField< uint8_t >( row, 26 ); + nameEnglish = exdData->getField< std::string >( row, 27 ); + itemStartingWeapon = exdData->getField< int32_t >( row, 28 ); + role = exdData->getField< uint8_t >( row, 30 ); + startingTown = exdData->getField< uint8_t >( row, 31 ); + monsterNote = exdData->getField< int8_t >( row, 32 ); + primaryStat = exdData->getField< uint8_t >( row, 33 ); + limitBreak1 = exdData->getField< uint16_t >( row, 34 ); + limitBreak2 = exdData->getField< uint16_t >( row, 35 ); + limitBreak3 = exdData->getField< uint16_t >( row, 36 ); + uIPriority = exdData->getField< uint8_t >( row, 37 ); + itemSoulCrystal = exdData->getField< uint32_t >( row, 38 ); + unlockQuest = exdData->getField< uint32_t >( row, 39 ); + relicQuest = exdData->getField< uint32_t >( row, 40 ); + prerequisite = exdData->getField< uint32_t >( row, 41 ); + startingLevel = exdData->getField< uint8_t >( row, 42 ); + partyBonus = exdData->getField< uint8_t >( row, 43 ); + isLimitedJob = exdData->getField< bool >( row, 44 ); + canQueueForDuty = exdData->getField< bool >( row, 45 ); } Sapphire::Data::ClassJobCategory::ClassJobCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ClassJobCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - aDV = exdData->getField< bool >( row, 1 ); - gLA = exdData->getField< bool >( row, 2 ); - pGL = exdData->getField< bool >( row, 3 ); - mRD = exdData->getField< bool >( row, 4 ); - lNC = exdData->getField< bool >( row, 5 ); - aRC = exdData->getField< bool >( row, 6 ); - cNJ = exdData->getField< bool >( row, 7 ); - tHM = exdData->getField< bool >( row, 8 ); - cRP = exdData->getField< bool >( row, 9 ); - bSM = exdData->getField< bool >( row, 10 ); - aRM = exdData->getField< bool >( row, 11 ); - gSM = exdData->getField< bool >( row, 12 ); - lTW = exdData->getField< bool >( row, 13 ); - wVR = exdData->getField< bool >( row, 14 ); - aLC = exdData->getField< bool >( row, 15 ); - cUL = exdData->getField< bool >( row, 16 ); - mIN = exdData->getField< bool >( row, 17 ); - bTN = exdData->getField< bool >( row, 18 ); - fSH = exdData->getField< bool >( row, 19 ); - pLD = exdData->getField< bool >( row, 20 ); - mNK = exdData->getField< bool >( row, 21 ); - wAR = exdData->getField< bool >( row, 22 ); - dRG = exdData->getField< bool >( row, 23 ); - bRD = exdData->getField< bool >( row, 24 ); - wHM = exdData->getField< bool >( row, 25 ); - bLM = exdData->getField< bool >( row, 26 ); - aCN = exdData->getField< bool >( row, 27 ); - sMN = exdData->getField< bool >( row, 28 ); - sCH = exdData->getField< bool >( row, 29 ); - rOG = exdData->getField< bool >( row, 30 ); - nIN = exdData->getField< bool >( row, 31 ); - mCH = exdData->getField< bool >( row, 32 ); - dRK = exdData->getField< bool >( row, 33 ); - aST = exdData->getField< bool >( row, 34 ); - sAM = exdData->getField< bool >( row, 35 ); - rDM = exdData->getField< bool >( row, 36 ); + auto row = exdData->m_ClassJobCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + aDV = exdData->getField< bool >( row, 1 ); + gLA = exdData->getField< bool >( row, 2 ); + pGL = exdData->getField< bool >( row, 3 ); + mRD = exdData->getField< bool >( row, 4 ); + lNC = exdData->getField< bool >( row, 5 ); + aRC = exdData->getField< bool >( row, 6 ); + cNJ = exdData->getField< bool >( row, 7 ); + tHM = exdData->getField< bool >( row, 8 ); + cRP = exdData->getField< bool >( row, 9 ); + bSM = exdData->getField< bool >( row, 10 ); + aRM = exdData->getField< bool >( row, 11 ); + gSM = exdData->getField< bool >( row, 12 ); + lTW = exdData->getField< bool >( row, 13 ); + wVR = exdData->getField< bool >( row, 14 ); + aLC = exdData->getField< bool >( row, 15 ); + cUL = exdData->getField< bool >( row, 16 ); + mIN = exdData->getField< bool >( row, 17 ); + bTN = exdData->getField< bool >( row, 18 ); + fSH = exdData->getField< bool >( row, 19 ); + pLD = exdData->getField< bool >( row, 20 ); + mNK = exdData->getField< bool >( row, 21 ); + wAR = exdData->getField< bool >( row, 22 ); + dRG = exdData->getField< bool >( row, 23 ); + bRD = exdData->getField< bool >( row, 24 ); + wHM = exdData->getField< bool >( row, 25 ); + bLM = exdData->getField< bool >( row, 26 ); + aCN = exdData->getField< bool >( row, 27 ); + sMN = exdData->getField< bool >( row, 28 ); + sCH = exdData->getField< bool >( row, 29 ); + rOG = exdData->getField< bool >( row, 30 ); + nIN = exdData->getField< bool >( row, 31 ); + mCH = exdData->getField< bool >( row, 32 ); + dRK = exdData->getField< bool >( row, 33 ); + aST = exdData->getField< bool >( row, 34 ); + sAM = exdData->getField< bool >( row, 35 ); + rDM = exdData->getField< bool >( row, 36 ); + bLU = exdData->getField< bool >( row, 37 ); + gNB = exdData->getField< bool >( row, 38 ); + dNC = exdData->getField< bool >( row, 39 ); +} + +Sapphire::Data::CollectablesShop::CollectablesShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CollectablesShopDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + quest = exdData->getField< uint32_t >( row, 1 ); + shopItems.push_back( exdData->getField< uint16_t >( row, 3 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 4 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 5 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 6 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 7 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 8 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 9 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 10 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 11 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 12 ) ); + shopItems.push_back( exdData->getField< uint16_t >( row, 13 ) ); +} + +Sapphire::Data::CollectablesShopItem::CollectablesShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CollectablesShopItemDat.get_row( row_id, subRow ); + item = exdData->getField< uint32_t >( row, 0 ); + collectablesShopItemGroup = exdData->getField< uint8_t >( row, 1 ); + levelMin = exdData->getField< uint16_t >( row, 2 ); + levelMax = exdData->getField< uint16_t >( row, 3 ); + collectablesShopRefine = exdData->getField< uint16_t >( row, 6 ); + collectablesShopRewardScrip = exdData->getField< uint16_t >( row, 7 ); +} + +Sapphire::Data::CollectablesShopItemGroup::CollectablesShopItemGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CollectablesShopItemGroupDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::CollectablesShopRefine::CollectablesShopRefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CollectablesShopRefineDat.get_row( row_id ); + lowCollectability = exdData->getField< uint16_t >( row, 0 ); + midCollectability = exdData->getField< uint16_t >( row, 1 ); + highCollectability = exdData->getField< uint16_t >( row, 2 ); +} + +Sapphire::Data::CollectablesShopRewardItem::CollectablesShopRewardItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CollectablesShopRewardItemDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 0 ); +} + +Sapphire::Data::CollectablesShopRewardScrip::CollectablesShopRewardScrip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CollectablesShopRewardScripDat.get_row( row_id ); + currency = exdData->getField< uint16_t >( row, 0 ); + lowReward = exdData->getField< uint16_t >( row, 1 ); + midReward = exdData->getField< uint16_t >( row, 2 ); + highReward = exdData->getField< uint16_t >( row, 3 ); + expRatioLow = exdData->getField< uint16_t >( row, 4 ); + expRatioMid = exdData->getField< uint16_t >( row, 5 ); + expRatioHigh = exdData->getField< uint16_t >( row, 6 ); } Sapphire::Data::Companion::Companion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanionDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - model = exdData->getField< uint16_t >( row, 8 ); - behavior = exdData->getField< uint8_t >( row, 14 ); - icon = exdData->getField< uint16_t >( row, 26 ); - cost = exdData->getField< uint8_t >( row, 30 ); - hP = exdData->getField< uint16_t >( row, 31 ); - skillAngle = exdData->getField< uint16_t >( row, 33 ); - skillCost = exdData->getField< uint8_t >( row, 34 ); - minionRace = exdData->getField< uint8_t >( row, 37 ); + auto row = exdData->m_CompanionDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + model = exdData->getField< uint16_t >( row, 8 ); + scale = exdData->getField< uint8_t >( row, 9 ); + inactiveIdle0 = exdData->getField< uint8_t >( row, 10 ); + inactiveIdle1 = exdData->getField< uint8_t >( row, 11 ); + inactiveBattle = exdData->getField< uint8_t >( row, 12 ); + inactiveWandering = exdData->getField< uint8_t >( row, 13 ); + behavior = exdData->getField< uint8_t >( row, 14 ); + special = exdData->getField< uint8_t >( row, 15 ); + wanderingWait = exdData->getField< uint8_t >( row, 16 ); + priority = exdData->getField< uint16_t >( row, 17 ); + roulette = exdData->getField< bool >( row, 18 ); + battle = exdData->getField< bool >( row, 20 ); + lookAt = exdData->getField< bool >( row, 21 ); + poke = exdData->getField< bool >( row, 22 ); + enemy = exdData->getField< uint16_t >( row, 23 ); + stroke = exdData->getField< bool >( row, 24 ); + clapping = exdData->getField< bool >( row, 25 ); + icon = exdData->getField< uint16_t >( row, 26 ); + order = exdData->getField< uint16_t >( row, 27 ); + cost = exdData->getField< uint8_t >( row, 30 ); + hP = exdData->getField< uint16_t >( row, 31 ); + skillAngle = exdData->getField< uint16_t >( row, 33 ); + skillCost = exdData->getField< uint8_t >( row, 34 ); + minionRace = exdData->getField< uint8_t >( row, 37 ); } Sapphire::Data::CompanionMove::CompanionMove( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanionMoveDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_CompanionMoveDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::CompanionTransient::CompanionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanionTransientDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); - descriptionEnhanced = exdData->getField< std::string >( row, 1 ); - tooltip = exdData->getField< std::string >( row, 2 ); - specialActionName = exdData->getField< std::string >( row, 3 ); - specialActionDescription = exdData->getField< std::string >( row, 4 ); - attack = exdData->getField< uint8_t >( row, 5 ); - defense = exdData->getField< uint8_t >( row, 6 ); - speed = exdData->getField< uint8_t >( row, 7 ); - hasAreaAttack = exdData->getField< bool >( row, 8 ); - strengthGate = exdData->getField< bool >( row, 9 ); - strengthEye = exdData->getField< bool >( row, 10 ); - strengthShield = exdData->getField< bool >( row, 11 ); - strengthArcana = exdData->getField< bool >( row, 12 ); - minionSkillType = exdData->getField< uint8_t >( row, 13 ); + auto row = exdData->m_CompanionTransientDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); + descriptionEnhanced = exdData->getField< std::string >( row, 1 ); + tooltip = exdData->getField< std::string >( row, 2 ); + specialActionName = exdData->getField< std::string >( row, 3 ); + specialActionDescription = exdData->getField< std::string >( row, 4 ); + attack = exdData->getField< uint8_t >( row, 5 ); + defense = exdData->getField< uint8_t >( row, 6 ); + speed = exdData->getField< uint8_t >( row, 7 ); + hasAreaAttack = exdData->getField< bool >( row, 8 ); + strengthGate = exdData->getField< bool >( row, 9 ); + strengthEye = exdData->getField< bool >( row, 10 ); + strengthShield = exdData->getField< bool >( row, 11 ); + strengthArcana = exdData->getField< bool >( row, 12 ); + minionSkillType = exdData->getField< uint8_t >( row, 13 ); } Sapphire::Data::CompanyAction::CompanyAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyActionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< int32_t >( row, 2 ); - fCRank = exdData->getField< uint8_t >( row, 3 ); - cost = exdData->getField< uint32_t >( row, 4 ); - order = exdData->getField< uint8_t >( row, 5 ); - purchasable = exdData->getField< bool >( row, 6 ); + auto row = exdData->m_CompanyActionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< int32_t >( row, 2 ); + fCRank = exdData->getField< uint8_t >( row, 3 ); + cost = exdData->getField< uint32_t >( row, 4 ); + order = exdData->getField< uint8_t >( row, 5 ); + purchasable = exdData->getField< bool >( row, 6 ); } Sapphire::Data::CompanyCraftDraft::CompanyCraftDraft( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftDraftDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - companyCraftDraftCategory = exdData->getField< uint8_t >( row, 1 ); - order = exdData->getField< uint32_t >( row, 8 ); + auto row = exdData->m_CompanyCraftDraftDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + companyCraftDraftCategory = exdData->getField< uint8_t >( row, 1 ); + order = exdData->getField< uint32_t >( row, 8 ); } Sapphire::Data::CompanyCraftDraftCategory::CompanyCraftDraftCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftDraftCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_CompanyCraftDraftCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::CompanyCraftManufactoryState::CompanyCraftManufactoryState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftManufactoryStateDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_CompanyCraftManufactoryStateDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::CompanyCraftPart::CompanyCraftPart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftPartDat.get_row( row_id ); - companyCraftType = exdData->getField< uint8_t >( row, 1 ); - companyCraftProcess.push_back( exdData->getField< uint16_t >( row, 2 ) ); - companyCraftProcess.push_back( exdData->getField< uint16_t >( row, 3 ) ); - companyCraftProcess.push_back( exdData->getField< uint16_t >( row, 4 ) ); + auto row = exdData->m_CompanyCraftPartDat.get_row( row_id ); + companyCraftType = exdData->getField< uint8_t >( row, 1 ); + companyCraftProcess.push_back( exdData->getField< uint16_t >( row, 2 ) ); + companyCraftProcess.push_back( exdData->getField< uint16_t >( row, 3 ) ); + companyCraftProcess.push_back( exdData->getField< uint16_t >( row, 4 ) ); } Sapphire::Data::CompanyCraftProcess::CompanyCraftProcess( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftProcessDat.get_row( row_id ); + auto row = exdData->m_CompanyCraftProcessDat.get_row( row_id ); } Sapphire::Data::CompanyCraftSequence::CompanyCraftSequence( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftSequenceDat.get_row( row_id ); - resultItem = exdData->getField< int32_t >( row, 0 ); - companyCraftDraftCategory = exdData->getField< int32_t >( row, 2 ); - companyCraftType = exdData->getField< int32_t >( row, 3 ); - companyCraftDraft = exdData->getField< int32_t >( row, 4 ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 5 ) ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 6 ) ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 7 ) ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 8 ) ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 9 ) ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 10 ) ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 11 ) ); - companyCraftPart.push_back( exdData->getField< uint16_t >( row, 12 ) ); + auto row = exdData->m_CompanyCraftSequenceDat.get_row( row_id ); + resultItem = exdData->getField< int32_t >( row, 0 ); + category = exdData->getField< int32_t >( row, 1 ); + companyCraftDraftCategory = exdData->getField< int32_t >( row, 2 ); + companyCraftType = exdData->getField< int32_t >( row, 3 ); + companyCraftDraft = exdData->getField< int32_t >( row, 4 ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 5 ) ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 6 ) ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 7 ) ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 8 ) ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 9 ) ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 10 ) ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 11 ) ); + companyCraftPart.push_back( exdData->getField< uint16_t >( row, 12 ) ); + order = exdData->getField< uint32_t >( row, 13 ); } Sapphire::Data::CompanyCraftSupplyItem::CompanyCraftSupplyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftSupplyItemDat.get_row( row_id ); - item = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_CompanyCraftSupplyItemDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::CompanyCraftType::CompanyCraftType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompanyCraftTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_CompanyCraftTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::CompanyLeve::CompanyLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CompanyLeveDat.get_row( row_id ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 0 ) ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 1 ) ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 2 ) ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 3 ) ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 4 ) ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 5 ) ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 6 ) ); + routePointTime.push_back( exdData->getField< uint16_t >( row, 7 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 8 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 9 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 10 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 11 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 12 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 13 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 14 ) ); + baseID.push_back( exdData->getField< int32_t >( row, 15 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 16 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 17 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 18 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 19 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 20 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 21 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 22 ) ); + enemyLevel.push_back( exdData->getField< uint16_t >( row, 23 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 24 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 25 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 26 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 27 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 28 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 29 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 30 ) ); + bNpcName.push_back( exdData->getField< uint32_t >( row, 31 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 32 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 33 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 34 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 35 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 36 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 37 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 38 ) ); + itemsInvolved.push_back( exdData->getField< int32_t >( row, 39 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 40 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 41 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 42 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 43 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 44 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 45 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 46 ) ); + itemsInvolvedQty.push_back( exdData->getField< uint8_t >( row, 47 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 48 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 49 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 50 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 51 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 52 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 53 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 54 ) ); + itemDropRate.push_back( exdData->getField< uint8_t >( row, 55 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 168 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 169 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 170 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 171 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 172 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 173 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 174 ) ); + toDoSequence.push_back( exdData->getField< uint8_t >( row, 175 ) ); + rule = exdData->getField< int32_t >( row, 176 ); + ruleParam = exdData->getField< uint8_t >( row, 177 ); +} + +Sapphire::Data::CompanyLeveRule::CompanyLeveRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CompanyLeveRuleDat.get_row( row_id ); + type = exdData->getField< std::string >( row, 0 ); + objective = exdData->getField< uint16_t >( row, 1 ); + help = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::CompleteJournal::CompleteJournal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompleteJournalDat.get_row( row_id ); - requiredLevel = exdData->getField< uint16_t >( row, 1 ); - icon = exdData->getField< int32_t >( row, 3 ); - name = exdData->getField< std::string >( row, 5 ); - cutscene.push_back( exdData->getField< int32_t >( row, 6 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 7 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 8 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 9 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 10 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 11 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 12 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 13 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 14 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 15 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 16 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 17 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 18 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 19 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 20 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 21 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 22 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 23 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 24 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 25 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 26 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 27 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 28 ) ); - cutscene.push_back( exdData->getField< int32_t >( row, 29 ) ); + auto row = exdData->m_CompleteJournalDat.get_row( row_id ); + requiredLevel = exdData->getField< uint16_t >( row, 1 ); + icon = exdData->getField< int32_t >( row, 3 ); + name = exdData->getField< std::string >( row, 5 ); + cutscene.push_back( exdData->getField< int32_t >( row, 6 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 7 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 8 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 9 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 10 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 11 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 12 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 13 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 14 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 15 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 16 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 17 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 18 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 19 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 20 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 21 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 22 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 23 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 24 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 25 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 26 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 27 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 28 ) ); + cutscene.push_back( exdData->getField< int32_t >( row, 29 ) ); } Sapphire::Data::CompleteJournalCategory::CompleteJournalCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CompleteJournalCategoryDat.get_row( row_id ); - firstQuest = exdData->getField< uint32_t >( row, 0 ); - lastQuest = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_CompleteJournalCategoryDat.get_row( row_id ); + firstQuest = exdData->getField< uint32_t >( row, 0 ); + lastQuest = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::Condition::Condition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ConditionDat.get_row( row_id ); + logMessage = exdData->getField< uint32_t >( row, 2 ); +} + +Sapphire::Data::ConfigKey::ConfigKey( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ConfigKeyDat.get_row( row_id ); + label = exdData->getField< std::string >( row, 0 ); + param = exdData->getField< uint8_t >( row, 1 ); + platform = exdData->getField< uint8_t >( row, 2 ); + required = exdData->getField< bool >( row, 3 ); + category = exdData->getField< uint8_t >( row, 4 ); + text = exdData->getField< std::string >( row, 7 ); } Sapphire::Data::ContentCloseCycle::ContentCloseCycle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentCloseCycleDat.get_row( row_id ); - unixtime = exdData->getField< uint32_t >( row, 0 ); - timeSeconds = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_ContentCloseCycleDat.get_row( row_id ); + unixtime = exdData->getField< uint32_t >( row, 0 ); + timeSeconds = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::ContentExAction::ContentExAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentExActionDat.get_row( row_id ); - name = exdData->getField< uint32_t >( row, 0 ); - charges = exdData->getField< uint8_t >( row, 2 ); + auto row = exdData->m_ContentExActionDat.get_row( row_id ); + name = exdData->getField< uint32_t >( row, 0 ); + charges = exdData->getField< uint8_t >( row, 2 ); } Sapphire::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentFinderConditionDat.get_row( row_id ); - territoryType = exdData->getField< uint16_t >( row, 1 ); - contentLinkType = exdData->getField< uint8_t >( row, 2 ); - content = exdData->getField< uint16_t >( row, 3 ); - contentMemberType = exdData->getField< uint8_t >( row, 9 ); - classJobLevelRequired = exdData->getField< uint8_t >( row, 15 ); - classJobLevelSync = exdData->getField< uint8_t >( row, 16 ); - itemLevelRequired = exdData->getField< uint16_t >( row, 17 ); - itemLevelSync = exdData->getField< uint16_t >( row, 18 ); - allowReplacement = exdData->getField< bool >( row, 20 ); - highEndDuty = exdData->getField< bool >( row, 26 ); - dutyRecorderAllowed = exdData->getField< bool >( row, 30 ); - name = exdData->getField< std::string >( row, 34 ); - contentType = exdData->getField< uint8_t >( row, 35 ); - transient = exdData->getField< uint32_t >( row, 37 ); - image = exdData->getField< uint32_t >( row, 39 ); + auto row = exdData->m_ContentFinderConditionDat.get_row( row_id ); + shortCode = exdData->getField< std::string >( row, 0 ); + territoryType = exdData->getField< uint16_t >( row, 1 ); + contentLinkType = exdData->getField< uint8_t >( row, 2 ); + content = exdData->getField< uint16_t >( row, 3 ); + pvP = exdData->getField< bool >( row, 4 ); + acceptClassJobCategory = exdData->getField< uint8_t >( row, 8 ); + contentMemberType = exdData->getField< uint8_t >( row, 9 ); + unlockQuest = exdData->getField< uint32_t >( row, 13 ); + classJobLevelRequired = exdData->getField< uint8_t >( row, 15 ); + classJobLevelSync = exdData->getField< uint8_t >( row, 16 ); + itemLevelRequired = exdData->getField< uint16_t >( row, 17 ); + itemLevelSync = exdData->getField< uint16_t >( row, 18 ); + addedIn53 = exdData->getField< bool >( row, 19 ); + allowUndersized = exdData->getField< bool >( row, 20 ); + allowReplacement = exdData->getField< bool >( row, 21 ); + highEndDuty = exdData->getField< bool >( row, 27 ); + dutyRecorderAllowed = exdData->getField< bool >( row, 31 ); + name = exdData->getField< std::string >( row, 36 ); + contentType = exdData->getField< uint8_t >( row, 37 ); + transientKey = exdData->getField< uint8_t >( row, 38 ); + transient = exdData->getField< uint32_t >( row, 39 ); + sortKey = exdData->getField< uint16_t >( row, 40 ); + image = exdData->getField< uint32_t >( row, 41 ); + icon = exdData->getField< uint32_t >( row, 42 ); + levelingRoulette = exdData->getField< bool >( row, 44 ); + level5060Roulette = exdData->getField< bool >( row, 45 ); + mSQRoulette = exdData->getField< bool >( row, 46 ); + guildHestRoulette = exdData->getField< bool >( row, 47 ); + expertRoulette = exdData->getField< bool >( row, 48 ); + trialRoulette = exdData->getField< bool >( row, 49 ); + dailyFrontlineChallenge = exdData->getField< bool >( row, 50 ); + level70Roulette = exdData->getField< bool >( row, 51 ); + mentorRoulette = exdData->getField< bool >( row, 52 ); + allianceRoulette = exdData->getField< bool >( row, 58 ); + normalRaidRoulette = exdData->getField< bool >( row, 60 ); } Sapphire::Data::ContentFinderConditionTransient::ContentFinderConditionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentFinderConditionTransientDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ContentFinderConditionTransientDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::ContentGauge::ContentGauge( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentGaugeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - color = exdData->getField< uint8_t >( row, 1 ); - textString = exdData->getField< std::string >( row, 3 ); + auto row = exdData->m_ContentGaugeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + color = exdData->getField< uint8_t >( row, 1 ); + textString = exdData->getField< std::string >( row, 3 ); } Sapphire::Data::ContentGaugeColor::ContentGaugeColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentGaugeColorDat.get_row( row_id ); - androidColor1 = exdData->getField< uint32_t >( row, 0 ); - androidColor2 = exdData->getField< uint32_t >( row, 1 ); - androidColor3 = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_ContentGaugeColorDat.get_row( row_id ); + androidColor1 = exdData->getField< uint32_t >( row, 0 ); + androidColor2 = exdData->getField< uint32_t >( row, 1 ); + androidColor3 = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::ContentMemberType::ContentMemberType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentMemberTypeDat.get_row( row_id ); - tanksPerParty = exdData->getField< uint8_t >( row, 9 ); - healersPerParty = exdData->getField< uint8_t >( row, 10 ); - meleesPerParty = exdData->getField< uint8_t >( row, 11 ); - rangedPerParty = exdData->getField< uint8_t >( row, 12 ); + auto row = exdData->m_ContentMemberTypeDat.get_row( row_id ); + tanksPerParty = exdData->getField< uint8_t >( row, 9 ); + healersPerParty = exdData->getField< uint8_t >( row, 10 ); + meleesPerParty = exdData->getField< uint8_t >( row, 11 ); + rangedPerParty = exdData->getField< uint8_t >( row, 12 ); } Sapphire::Data::ContentNpcTalk::ContentNpcTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentNpcTalkDat.get_row( row_id ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 1 ) ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 2 ) ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 3 ) ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 4 ) ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 5 ) ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 6 ) ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 7 ) ); - contentTalk.push_back( exdData->getField< uint32_t >( row, 8 ) ); + auto row = exdData->m_ContentNpcTalkDat.get_row( row_id ); + type = exdData->getField< int32_t >( row, 0 ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 1 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 2 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 3 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 4 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 5 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 6 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 7 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 8 ) ); +} + +Sapphire::Data::ContentRandomSelect::ContentRandomSelect( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ContentRandomSelectDat.get_row( row_id, subRow ); + name = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::ContentRoulette::ContentRoulette( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentRouletteDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 2 ); - dutyType = exdData->getField< std::string >( row, 3 ); - isInDutyFinder = exdData->getField< bool >( row, 6 ); - openRule = exdData->getField< uint8_t >( row, 7 ); - requiredLevel = exdData->getField< uint8_t >( row, 9 ); - itemLevelRequired = exdData->getField< uint16_t >( row, 11 ); - icon = exdData->getField< uint32_t >( row, 13 ); - contentRouletteRoleBonus = exdData->getField< uint8_t >( row, 14 ); - rewardTomeA = exdData->getField< uint16_t >( row, 15 ); - rewardTomeB = exdData->getField< uint16_t >( row, 16 ); - rewardTomeC = exdData->getField< uint16_t >( row, 17 ); - sortKey = exdData->getField< uint8_t >( row, 20 ); - contentMemberType = exdData->getField< uint8_t >( row, 22 ); - requireAllDuties = exdData->getField< bool >( row, 32 ); - contentRouletteOpenRule = exdData->getField< uint8_t >( row, 34 ); - instanceContent = exdData->getField< uint16_t >( row, 35 ); + auto row = exdData->m_ContentRouletteDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 2 ); + dutyType = exdData->getField< std::string >( row, 3 ); + isInDutyFinder = exdData->getField< bool >( row, 6 ); + openRule = exdData->getField< bool >( row, 7 ); + requiredLevel = exdData->getField< bool >( row, 9 ); + itemLevelRequired = exdData->getField< uint8_t >( row, 11 ); + icon = exdData->getField< uint16_t >( row, 13 ); + contentRouletteRoleBonus = exdData->getField< uint32_t >( row, 14 ); + rewardTomeA = exdData->getField< uint8_t >( row, 15 ); + rewardTomeB = exdData->getField< uint16_t >( row, 16 ); + rewardTomeC = exdData->getField< uint16_t >( row, 17 ); + sortKey = exdData->getField< uint16_t >( row, 20 ); + contentMemberType = exdData->getField< uint8_t >( row, 22 ); + requireAllDuties = exdData->getField< bool >( row, 32 ); + contentRouletteOpenRule = exdData->getField< bool >( row, 34 ); + instanceContent = exdData->getField< uint8_t >( row, 35 ); } Sapphire::Data::ContentRouletteOpenRule::ContentRouletteOpenRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentRouletteOpenRuleDat.get_row( row_id ); - type = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_ContentRouletteOpenRuleDat.get_row( row_id ); + type = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::ContentRouletteRoleBonus::ContentRouletteRoleBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentRouletteRoleBonusDat.get_row( row_id ); - itemRewardType = exdData->getField< uint32_t >( row, 6 ); - rewardAmount = exdData->getField< uint8_t >( row, 7 ); + auto row = exdData->m_ContentRouletteRoleBonusDat.get_row( row_id ); + itemRewardType = exdData->getField< uint32_t >( row, 6 ); + rewardAmount = exdData->getField< uint8_t >( row, 7 ); } Sapphire::Data::ContentsNote::ContentsNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentsNoteDat.get_row( row_id ); - contentType = exdData->getField< uint8_t >( row, 0 ); - menuOrder = exdData->getField< uint8_t >( row, 2 ); - requiredAmount = exdData->getField< int32_t >( row, 3 ); - expMultiplier = exdData->getField< int32_t >( row, 5 ); - gilRward = exdData->getField< int32_t >( row, 7 ); - levelUnlock = exdData->getField< uint16_t >( row, 8 ); - howTo = exdData->getField< uint16_t >( row, 9 ); - name = exdData->getField< std::string >( row, 11 ); - description = exdData->getField< std::string >( row, 12 ); - expCap = exdData->getField< int32_t >( row, 13 ); + auto row = exdData->m_ContentsNoteDat.get_row( row_id ); + contentType = exdData->getField< uint8_t >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + menuOrder = exdData->getField< uint8_t >( row, 2 ); + requiredAmount = exdData->getField< int32_t >( row, 3 ); + reward0 = exdData->getField< uint8_t >( row, 4 ); + expMultiplier = exdData->getField< int32_t >( row, 5 ); + reward1 = exdData->getField< uint8_t >( row, 6 ); + gilRward = exdData->getField< int32_t >( row, 7 ); + levelUnlock = exdData->getField< uint16_t >( row, 8 ); + howTo = exdData->getField< uint16_t >( row, 9 ); + reqUnlock = exdData->getField< uint32_t >( row, 10 ); + name = exdData->getField< std::string >( row, 11 ); + description = exdData->getField< std::string >( row, 12 ); + expCap = exdData->getField< int32_t >( row, 13 ); } Sapphire::Data::ContentTalk::ContentTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentTalkDat.get_row( row_id ); - contentTalkParam = exdData->getField< uint8_t >( row, 0 ); - text = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_ContentTalkDat.get_row( row_id ); + contentTalkParam = exdData->getField< uint8_t >( row, 0 ); + text = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::ContentTalkParam::ContentTalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentTalkParamDat.get_row( row_id ); - param = exdData->getField< bool >( row, 0 ); - testAction = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_ContentTalkParamDat.get_row( row_id ); + param = exdData->getField< bool >( row, 0 ); + testAction = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::ContentType::ContentType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ContentTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< uint32_t >( row, 1 ); - iconDutyFinder = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_ContentTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + iconDutyFinder = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::CraftAction::CraftAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CraftActionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - animationStart = exdData->getField< uint16_t >( row, 2 ); - animationEnd = exdData->getField< uint16_t >( row, 3 ); - icon = exdData->getField< uint16_t >( row, 4 ); - classJob = exdData->getField< int8_t >( row, 5 ); - classJobCategory = exdData->getField< uint8_t >( row, 6 ); - classJobLevel = exdData->getField< uint8_t >( row, 7 ); - questRequirement = exdData->getField< uint32_t >( row, 8 ); - specialist = exdData->getField< bool >( row, 9 ); - cost = exdData->getField< uint8_t >( row, 11 ); - cRP = exdData->getField< int32_t >( row, 12 ); - bSM = exdData->getField< int32_t >( row, 13 ); - aRM = exdData->getField< int32_t >( row, 14 ); - gSM = exdData->getField< int32_t >( row, 15 ); - lTW = exdData->getField< int32_t >( row, 16 ); - wVR = exdData->getField< int32_t >( row, 17 ); - aLC = exdData->getField< int32_t >( row, 18 ); - cUL = exdData->getField< int32_t >( row, 19 ); + auto row = exdData->m_CraftActionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + animationStart = exdData->getField< uint16_t >( row, 2 ); + animationEnd = exdData->getField< uint16_t >( row, 3 ); + icon = exdData->getField< uint16_t >( row, 4 ); + classJob = exdData->getField< int8_t >( row, 5 ); + classJobCategory = exdData->getField< uint8_t >( row, 6 ); + classJobLevel = exdData->getField< uint8_t >( row, 7 ); + questRequirement = exdData->getField< uint32_t >( row, 8 ); + specialist = exdData->getField< bool >( row, 9 ); + cost = exdData->getField< uint8_t >( row, 11 ); + cRP = exdData->getField< int32_t >( row, 12 ); + bSM = exdData->getField< int32_t >( row, 13 ); + aRM = exdData->getField< int32_t >( row, 14 ); + gSM = exdData->getField< int32_t >( row, 15 ); + lTW = exdData->getField< int32_t >( row, 16 ); + wVR = exdData->getField< int32_t >( row, 17 ); + aLC = exdData->getField< int32_t >( row, 18 ); + cUL = exdData->getField< int32_t >( row, 19 ); } Sapphire::Data::CraftLeve::CraftLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CraftLeveDat.get_row( row_id ); - leve = exdData->getField< int32_t >( row, 0 ); - craftLeveTalk = exdData->getField< int32_t >( row, 1 ); - repeats = exdData->getField< uint8_t >( row, 2 ); + auto row = exdData->m_CraftLeveDat.get_row( row_id ); + leve = exdData->getField< int32_t >( row, 0 ); + craftLeveTalk = exdData->getField< int32_t >( row, 1 ); + repeats = exdData->getField< uint8_t >( row, 2 ); +} + +Sapphire::Data::CraftLevelDifference::CraftLevelDifference( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CraftLevelDifferenceDat.get_row( row_id ); + difference = exdData->getField< int16_t >( row, 0 ); + progressFactor = exdData->getField< int16_t >( row, 1 ); + qualityFactor = exdData->getField< int16_t >( row, 2 ); } Sapphire::Data::CraftType::CraftType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CraftTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_CraftTypeDat.get_row( row_id ); + mainPhysical = exdData->getField< uint8_t >( row, 0 ); + subPhysical = exdData->getField< uint8_t >( row, 1 ); + name = exdData->getField< std::string >( row, 2 ); } Sapphire::Data::Credit::Credit( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CreditDat.get_row( row_id, subRow ); - roles1 = exdData->getField< uint16_t >( row, 1 ); - japaneseCast1 = exdData->getField< uint16_t >( row, 2 ); - englishCast1 = exdData->getField< uint16_t >( row, 3 ); - frenchCast1 = exdData->getField< uint16_t >( row, 4 ); - germanCast1 = exdData->getField< uint16_t >( row, 5 ); - roles2 = exdData->getField< uint16_t >( row, 6 ); - japaneseCast2 = exdData->getField< uint16_t >( row, 7 ); - englishCast2 = exdData->getField< uint16_t >( row, 8 ); - frenchCast2 = exdData->getField< uint16_t >( row, 9 ); - germanCast2 = exdData->getField< uint16_t >( row, 10 ); + auto row = exdData->m_CreditDat.get_row( row_id, subRow ); + roles1 = exdData->getField< uint16_t >( row, 1 ); + japaneseCast1 = exdData->getField< uint16_t >( row, 2 ); + englishCast1 = exdData->getField< uint16_t >( row, 3 ); + frenchCast1 = exdData->getField< uint16_t >( row, 4 ); + germanCast1 = exdData->getField< uint16_t >( row, 5 ); + roles2 = exdData->getField< uint16_t >( row, 6 ); + japaneseCast2 = exdData->getField< uint16_t >( row, 7 ); + englishCast2 = exdData->getField< uint16_t >( row, 8 ); + frenchCast2 = exdData->getField< uint16_t >( row, 9 ); + germanCast2 = exdData->getField< uint16_t >( row, 10 ); } Sapphire::Data::CreditBackImage::CreditBackImage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CreditBackImageDat.get_row( row_id, subRow ); - backImage = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_CreditBackImageDat.get_row( row_id, subRow ); + backImage = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::CreditCast::CreditCast( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CreditCastDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_CreditCastDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::CreditList::CreditList( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CreditListDat.get_row( row_id, subRow ); + scale = exdData->getField< uint16_t >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + font = exdData->getField< uint32_t >( row, 2 ); + cast = exdData->getField< uint32_t >( row, 5 ); +} + +Sapphire::Data::CreditListText::CreditListText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CreditListTextDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Currency::Currency( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CurrencyDat.get_row( row_id ); - item = exdData->getField< uint32_t >( row, 0 ); - limit = exdData->getField< uint32_t >( row, 3 ); + auto row = exdData->m_CurrencyDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 0 ); + limit = exdData->getField< uint32_t >( row, 3 ); } Sapphire::Data::CustomTalk::CustomTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CustomTalkDat.get_row( row_id ); - iconActor = exdData->getField< uint32_t >( row, 0 ); - iconMap = exdData->getField< uint32_t >( row, 1 ); - name = exdData->getField< std::string >( row, 2 ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 3 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 4 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 5 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 6 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 7 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 8 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 9 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 10 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 11 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 12 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 13 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 14 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 15 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 16 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 17 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 18 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 19 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 20 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 21 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 22 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 23 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 24 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 25 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 26 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 27 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 28 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 29 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 30 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 31 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 32 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 33 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 34 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 35 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 36 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 37 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 38 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 39 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 40 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 41 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 42 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 43 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 44 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 45 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 46 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 47 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 48 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 49 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 50 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 51 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 52 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 53 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 54 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 55 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 56 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 57 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 58 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 59 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 60 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 61 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 62 ) ); - text = exdData->getField< bool >( row, 66 ); + auto row = exdData->m_CustomTalkDat.get_row( row_id ); + iconActor = exdData->getField< uint32_t >( row, 0 ); + iconMap = exdData->getField< uint32_t >( row, 1 ); + name = exdData->getField< std::string >( row, 2 ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 3 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 4 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 5 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 6 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 7 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 8 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 9 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 10 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 11 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 12 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 13 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 14 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 15 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 16 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 17 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 18 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 19 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 20 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 21 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 22 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 23 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 24 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 25 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 26 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 27 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 28 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 29 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 30 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 31 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 32 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 33 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 34 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 35 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 36 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 37 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 38 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 39 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 40 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 41 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 42 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 43 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 44 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 45 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 46 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 47 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 48 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 49 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 50 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 51 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 52 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 53 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 54 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 55 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 56 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 57 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 58 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 59 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 60 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 61 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 62 ) ); + text = exdData->getField< bool >( row, 66 ); } Sapphire::Data::CustomTalkDynamicIcon::CustomTalkDynamicIcon( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CustomTalkDynamicIconDat.get_row( row_id, subRow ); - smallIcon = exdData->getField< uint32_t >( row, 0 ); - largeIcon = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_CustomTalkDynamicIconDat.get_row( row_id, subRow ); + smallIcon = exdData->getField< uint32_t >( row, 0 ); + largeIcon = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::CustomTalkNestHandlers::CustomTalkNestHandlers( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CustomTalkNestHandlersDat.get_row( row_id, subRow ); - nestHandler = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_CustomTalkNestHandlersDat.get_row( row_id, subRow ); + nestHandler = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::Cutscene::Cutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CutsceneDat.get_row( row_id ); - path = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_CutsceneDat.get_row( row_id ); + path = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::CutsceneMotion::CutsceneMotion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CutsceneMotionDat.get_row( row_id ); + wALK_LOOP_SPEED = exdData->getField< float >( row, 0 ); + rUN_LOOP_SPEED = exdData->getField< float >( row, 1 ); + sLOWWALK_LOOP_SPEED = exdData->getField< float >( row, 2 ); + sLOWRUN_LOOP_SPEED = exdData->getField< float >( row, 3 ); + bATTLEWALK_LOOP_SPEED = exdData->getField< float >( row, 4 ); + bATTLERUN_LOOP_SPEED = exdData->getField< float >( row, 5 ); + dASH_LOOP_SPEED = exdData->getField< float >( row, 6 ); + tURN_CW90_FRAME = exdData->getField< uint8_t >( row, 7 ); + tURN_CCW90_FRAME = exdData->getField< uint8_t >( row, 8 ); + tURN_CW180_FRAME = exdData->getField< uint8_t >( row, 9 ); + tURN_CCW180_FRAME = exdData->getField< uint8_t >( row, 10 ); +} + +Sapphire::Data::CutsceneWorkIndex::CutsceneWorkIndex( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CutsceneWorkIndexDat.get_row( row_id ); + workIndex = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::CutScreenImage::CutScreenImage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_CutScreenImageDat.get_row( row_id ); - image = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_CutScreenImageDat.get_row( row_id ); + type = exdData->getField< int16_t >( row, 0 ); + image = exdData->getField< int32_t >( row, 1 ); +} + +Sapphire::Data::CycleTime::CycleTime( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CycleTimeDat.get_row( row_id ); + firstCycle = exdData->getField< uint32_t >( row, 0 ); + cycle = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::DailySupplyItem::DailySupplyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DailySupplyItemDat.get_row( row_id ); + auto row = exdData->m_DailySupplyItemDat.get_row( row_id ); +} + +Sapphire::Data::DawnContent::DawnContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnContentDat.get_row( row_id ); + content = exdData->getField< uint32_t >( row, 0 ); + exp = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::DawnGrowMember::DawnGrowMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnGrowMemberDat.get_row( row_id ); + member = exdData->getField< uint32_t >( row, 0 ); + imageName = exdData->getField< uint32_t >( row, 1 ); + bigImageOld = exdData->getField< uint32_t >( row, 2 ); + bigImageNew = exdData->getField< uint32_t >( row, 3 ); + smallImageOld = exdData->getField< uint32_t >( row, 4 ); + smallImageNew = exdData->getField< uint32_t >( row, 5 ); + _class = exdData->getField< uint8_t >( row, 6 ); +} + +Sapphire::Data::DawnMemberUIParam::DawnMemberUIParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnMemberUIParamDat.get_row( row_id ); + classSingular = exdData->getField< std::string >( row, 0 ); + voiceLine = exdData->getField< uint32_t >( row, 1 ); + classPlural = exdData->getField< std::string >( row, 2 ); +} + +Sapphire::Data::DawnQuestAnnounce::DawnQuestAnnounce( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnQuestAnnounceDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); + content = exdData->getField< uint8_t >( row, 1 ); + eNPC.push_back( exdData->getField< uint32_t >( row, 2 ) ); + eNPC.push_back( exdData->getField< uint32_t >( row, 3 ) ); + eNPC.push_back( exdData->getField< uint32_t >( row, 4 ) ); + eNPC.push_back( exdData->getField< uint32_t >( row, 5 ) ); + eNPC.push_back( exdData->getField< uint32_t >( row, 6 ) ); + eNPC.push_back( exdData->getField< uint32_t >( row, 7 ) ); +} + +Sapphire::Data::DawnQuestMember::DawnQuestMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnQuestMemberDat.get_row( row_id ); + member = exdData->getField< uint32_t >( row, 0 ); + imageName = exdData->getField< uint32_t >( row, 1 ); + bigImageOld = exdData->getField< uint32_t >( row, 2 ); + bigImageNew = exdData->getField< uint32_t >( row, 3 ); + _class = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::DeepDungeon::DeepDungeon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 22 ); + auto row = exdData->m_DeepDungeonDat.get_row( row_id ); + aetherpoolArm = exdData->getField< uint8_t >( row, 0 ); + aetherpoolArmor = exdData->getField< uint8_t >( row, 1 ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 2 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 3 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 4 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 5 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 6 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 7 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 8 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 9 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 10 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 11 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 12 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 13 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 14 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 15 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 16 ) ); + pomanderSlot.push_back( exdData->getField< uint8_t >( row, 17 ) ); + magiciteSlot.push_back( exdData->getField< uint8_t >( row, 18 ) ); + magiciteSlot.push_back( exdData->getField< uint8_t >( row, 19 ) ); + magiciteSlot.push_back( exdData->getField< uint8_t >( row, 20 ) ); + magiciteSlot.push_back( exdData->getField< uint8_t >( row, 21 ) ); + name = exdData->getField< std::string >( row, 22 ); + contentFinderConditionStart = exdData->getField< uint16_t >( row, 23 ); } Sapphire::Data::DeepDungeonBan::DeepDungeonBan( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonBanDat.get_row( row_id ); - screenImage = exdData->getField< uint16_t >( row, 0 ); - logMessage = exdData->getField< uint16_t >( row, 1 ); - name = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_DeepDungeonBanDat.get_row( row_id ); + screenImage = exdData->getField< uint16_t >( row, 0 ); + logMessage = exdData->getField< uint16_t >( row, 1 ); + name = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::DeepDungeonDanger::DeepDungeonDanger( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonDangerDat.get_row( row_id ); - screenImage = exdData->getField< uint16_t >( row, 0 ); - logMessage = exdData->getField< uint16_t >( row, 1 ); - name = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_DeepDungeonDangerDat.get_row( row_id ); + screenImage = exdData->getField< uint16_t >( row, 0 ); + logMessage = exdData->getField< uint16_t >( row, 1 ); + name = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::DeepDungeonEquipment::DeepDungeonEquipment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonEquipmentDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 0 ); - singular = exdData->getField< std::string >( row, 1 ); - adjective = exdData->getField< int8_t >( row, 2 ); - plural = exdData->getField< std::string >( row, 3 ); - possessivePronoun = exdData->getField< int8_t >( row, 4 ); - startsWithVowel = exdData->getField< int8_t >( row, 5 ); - pronoun = exdData->getField< int8_t >( row, 7 ); - article = exdData->getField< int8_t >( row, 8 ); - name = exdData->getField< std::string >( row, 9 ); - description = exdData->getField< std::string >( row, 10 ); + auto row = exdData->m_DeepDungeonEquipmentDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 0 ); + singular = exdData->getField< std::string >( row, 1 ); + adjective = exdData->getField< int8_t >( row, 2 ); + plural = exdData->getField< std::string >( row, 3 ); + possessivePronoun = exdData->getField< int8_t >( row, 4 ); + startsWithVowel = exdData->getField< int8_t >( row, 5 ); + pronoun = exdData->getField< int8_t >( row, 7 ); + article = exdData->getField< int8_t >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); + description = exdData->getField< std::string >( row, 10 ); } Sapphire::Data::DeepDungeonFloorEffectUI::DeepDungeonFloorEffectUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonFloorEffectUIDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); - description = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_DeepDungeonFloorEffectUIDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); + description = exdData->getField< std::string >( row, 2 ); } Sapphire::Data::DeepDungeonItem::DeepDungeonItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonItemDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 0 ); - singular = exdData->getField< std::string >( row, 1 ); - adjective = exdData->getField< int8_t >( row, 2 ); - plural = exdData->getField< std::string >( row, 3 ); - possessivePronoun = exdData->getField< int8_t >( row, 4 ); - startsWithVowel = exdData->getField< int8_t >( row, 5 ); - pronoun = exdData->getField< int8_t >( row, 7 ); - article = exdData->getField< int8_t >( row, 8 ); - name = exdData->getField< std::string >( row, 9 ); - tooltip = exdData->getField< std::string >( row, 10 ); - action = exdData->getField< uint32_t >( row, 11 ); + auto row = exdData->m_DeepDungeonItemDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 0 ); + singular = exdData->getField< std::string >( row, 1 ); + adjective = exdData->getField< int8_t >( row, 2 ); + plural = exdData->getField< std::string >( row, 3 ); + possessivePronoun = exdData->getField< int8_t >( row, 4 ); + startsWithVowel = exdData->getField< int8_t >( row, 5 ); + pronoun = exdData->getField< int8_t >( row, 7 ); + article = exdData->getField< int8_t >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); + tooltip = exdData->getField< std::string >( row, 10 ); + action = exdData->getField< uint32_t >( row, 11 ); } Sapphire::Data::DeepDungeonLayer::DeepDungeonLayer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonLayerDat.get_row( row_id ); - deepDungeon = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_DeepDungeonLayerDat.get_row( row_id ); + deepDungeon = exdData->getField< uint8_t >( row, 0 ); + floorSet = exdData->getField< uint8_t >( row, 1 ); + roomA = exdData->getField< uint16_t >( row, 2 ); + roomB = exdData->getField< uint16_t >( row, 3 ); + roomC = exdData->getField< uint16_t >( row, 4 ); + wepMinLv = exdData->getField< uint8_t >( row, 5 ); + armourMinLv = exdData->getField< uint8_t >( row, 6 ); } Sapphire::Data::DeepDungeonMagicStone::DeepDungeonMagicStone( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonMagicStoneDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 0 ); - singular = exdData->getField< std::string >( row, 1 ); - adjective = exdData->getField< int8_t >( row, 2 ); - plural = exdData->getField< std::string >( row, 3 ); - possessivePronoun = exdData->getField< int8_t >( row, 4 ); - startsWithVowel = exdData->getField< int8_t >( row, 5 ); - pronoun = exdData->getField< int8_t >( row, 7 ); - article = exdData->getField< int8_t >( row, 8 ); - name = exdData->getField< std::string >( row, 9 ); - tooltip = exdData->getField< std::string >( row, 10 ); + auto row = exdData->m_DeepDungeonMagicStoneDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 0 ); + singular = exdData->getField< std::string >( row, 1 ); + adjective = exdData->getField< int8_t >( row, 2 ); + plural = exdData->getField< std::string >( row, 3 ); + possessivePronoun = exdData->getField< int8_t >( row, 4 ); + startsWithVowel = exdData->getField< int8_t >( row, 5 ); + pronoun = exdData->getField< int8_t >( row, 7 ); + article = exdData->getField< int8_t >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); + tooltip = exdData->getField< std::string >( row, 10 ); } Sapphire::Data::DeepDungeonMap5X::DeepDungeonMap5X( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonMap5XDat.get_row( row_id, subRow ); - deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 0 ) ); - deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 1 ) ); - deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 2 ) ); - deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 3 ) ); - deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 4 ) ); + auto row = exdData->m_DeepDungeonMap5XDat.get_row( row_id, subRow ); + deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 0 ) ); + deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 1 ) ); + deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 2 ) ); + deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 3 ) ); + deepDungeonRoom.push_back( exdData->getField< uint16_t >( row, 4 ) ); } Sapphire::Data::DeepDungeonRoom::DeepDungeonRoom( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonRoomDat.get_row( row_id ); - level.push_back( exdData->getField< uint32_t >( row, 0 ) ); - level.push_back( exdData->getField< uint32_t >( row, 1 ) ); - level.push_back( exdData->getField< uint32_t >( row, 2 ) ); - level.push_back( exdData->getField< uint32_t >( row, 3 ) ); - level.push_back( exdData->getField< uint32_t >( row, 4 ) ); + auto row = exdData->m_DeepDungeonRoomDat.get_row( row_id ); + level.push_back( exdData->getField< uint32_t >( row, 0 ) ); + level.push_back( exdData->getField< uint32_t >( row, 1 ) ); + level.push_back( exdData->getField< uint32_t >( row, 2 ) ); + level.push_back( exdData->getField< uint32_t >( row, 3 ) ); + level.push_back( exdData->getField< uint32_t >( row, 4 ) ); } Sapphire::Data::DeepDungeonStatus::DeepDungeonStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeepDungeonStatusDat.get_row( row_id ); - screenImage = exdData->getField< uint16_t >( row, 0 ); - logMessage = exdData->getField< uint16_t >( row, 1 ); - name = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_DeepDungeonStatusDat.get_row( row_id ); + screenImage = exdData->getField< uint16_t >( row, 0 ); + logMessage = exdData->getField< uint16_t >( row, 1 ); + name = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::DefaultTalk::DefaultTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DefaultTalkDat.get_row( row_id ); - actionTimelinePose.push_back( exdData->getField< uint16_t >( row, 5 ) ); - actionTimelinePose.push_back( exdData->getField< uint16_t >( row, 6 ) ); - actionTimelinePose.push_back( exdData->getField< uint16_t >( row, 7 ) ); - text.push_back( exdData->getField< std::string >( row, 20 ) ); - text.push_back( exdData->getField< std::string >( row, 21 ) ); - text.push_back( exdData->getField< std::string >( row, 22 ) ); + auto row = exdData->m_DefaultTalkDat.get_row( row_id ); + actionTimelinePose.push_back( exdData->getField< uint16_t >( row, 5 ) ); + actionTimelinePose.push_back( exdData->getField< uint16_t >( row, 6 ) ); + actionTimelinePose.push_back( exdData->getField< uint16_t >( row, 7 ) ); + text.push_back( exdData->getField< std::string >( row, 20 ) ); + text.push_back( exdData->getField< std::string >( row, 21 ) ); + text.push_back( exdData->getField< std::string >( row, 22 ) ); } Sapphire::Data::DefaultTalkLipSyncType::DefaultTalkLipSyncType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DefaultTalkLipSyncTypeDat.get_row( row_id ); - actionTimeline = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_DefaultTalkLipSyncTypeDat.get_row( row_id ); + actionTimeline = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::DeliveryQuest::DeliveryQuest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DeliveryQuestDat.get_row( row_id ); - quest = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_DeliveryQuestDat.get_row( row_id ); + quest = exdData->getField< int32_t >( row, 0 ); +} + +Sapphire::Data::Description::Description( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DescriptionDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); + textLong = exdData->getField< std::string >( row, 1 ); + textShort = exdData->getField< std::string >( row, 2 ); + textCommentary = exdData->getField< std::string >( row, 3 ); + section = exdData->getField< uint32_t >( row, 5 ); } Sapphire::Data::DescriptionPage::DescriptionPage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DescriptionPageDat.get_row( row_id, subRow ); - text1 = exdData->getField< uint32_t >( row, 1 ); - image1 = exdData->getField< uint32_t >( row, 2 ); - text2 = exdData->getField< uint32_t >( row, 3 ); - image2 = exdData->getField< uint32_t >( row, 4 ); - text3 = exdData->getField< uint32_t >( row, 5 ); - image3 = exdData->getField< uint32_t >( row, 6 ); - text4 = exdData->getField< uint32_t >( row, 7 ); - image4 = exdData->getField< uint32_t >( row, 8 ); - text5 = exdData->getField< uint32_t >( row, 9 ); - image5 = exdData->getField< uint32_t >( row, 10 ); - text6 = exdData->getField< uint32_t >( row, 11 ); - image6 = exdData->getField< uint32_t >( row, 12 ); - text7 = exdData->getField< uint32_t >( row, 13 ); - image7 = exdData->getField< uint32_t >( row, 14 ); - text8 = exdData->getField< uint32_t >( row, 15 ); - image8 = exdData->getField< uint32_t >( row, 16 ); - text9 = exdData->getField< uint32_t >( row, 17 ); - image9 = exdData->getField< uint32_t >( row, 18 ); + auto row = exdData->m_DescriptionPageDat.get_row( row_id, subRow ); + quest = exdData->getField< uint32_t >( row, 0 ); + text1 = exdData->getField< uint16_t >( row, 1 ); + image1 = exdData->getField< uint32_t >( row, 2 ); + text2 = exdData->getField< uint16_t >( row, 3 ); + image2 = exdData->getField< uint32_t >( row, 4 ); + text3 = exdData->getField< uint16_t >( row, 5 ); + image3 = exdData->getField< uint32_t >( row, 6 ); + text4 = exdData->getField< uint16_t >( row, 7 ); + image4 = exdData->getField< uint32_t >( row, 8 ); + text5 = exdData->getField< uint16_t >( row, 9 ); + image5 = exdData->getField< uint32_t >( row, 10 ); + text6 = exdData->getField< uint16_t >( row, 11 ); + image6 = exdData->getField< uint32_t >( row, 12 ); + text7 = exdData->getField< uint16_t >( row, 13 ); + image7 = exdData->getField< uint32_t >( row, 14 ); + text8 = exdData->getField< uint16_t >( row, 15 ); + image8 = exdData->getField< uint32_t >( row, 16 ); + text9 = exdData->getField< uint16_t >( row, 17 ); + image9 = exdData->getField< uint32_t >( row, 18 ); +} + +Sapphire::Data::DescriptionSection::DescriptionSection( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DescriptionSectionDat.get_row( row_id, subRow ); + string = exdData->getField< uint16_t >( row, 0 ); + page = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::DescriptionString::DescriptionString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DescriptionStringDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_DescriptionStringDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::DisposalShop::DisposalShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DisposalShopDat.get_row( row_id ); - shopName = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_DisposalShopDat.get_row( row_id ); + shopName = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::DisposalShopFilterType::DisposalShopFilterType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DisposalShopFilterTypeDat.get_row( row_id ); - category = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_DisposalShopFilterTypeDat.get_row( row_id ); + category = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::DisposalShopItem::DisposalShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DisposalShopItemDat.get_row( row_id, subRow ); - itemDisposed = exdData->getField< int32_t >( row, 0 ); - itemReceived = exdData->getField< int32_t >( row, 2 ); - quantityReceived = exdData->getField< uint32_t >( row, 4 ); + auto row = exdData->m_DisposalShopItemDat.get_row( row_id, subRow ); + itemDisposed = exdData->getField< int32_t >( row, 0 ); + itemReceived = exdData->getField< int32_t >( row, 2 ); + quantityReceived = exdData->getField< uint32_t >( row, 4 ); } Sapphire::Data::DpsChallenge::DpsChallenge( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DpsChallengeDat.get_row( row_id ); - playerLevel = exdData->getField< uint16_t >( row, 0 ); - placeName = exdData->getField< uint16_t >( row, 1 ); - icon = exdData->getField< uint32_t >( row, 2 ); - order = exdData->getField< uint16_t >( row, 3 ); - name = exdData->getField< std::string >( row, 4 ); - description = exdData->getField< std::string >( row, 5 ); + auto row = exdData->m_DpsChallengeDat.get_row( row_id ); + playerLevel = exdData->getField< uint16_t >( row, 0 ); + placeName = exdData->getField< uint16_t >( row, 1 ); + icon = exdData->getField< uint32_t >( row, 2 ); + order = exdData->getField< uint16_t >( row, 3 ); + name = exdData->getField< std::string >( row, 4 ); + description = exdData->getField< std::string >( row, 5 ); } Sapphire::Data::DpsChallengeOfficer::DpsChallengeOfficer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DpsChallengeOfficerDat.get_row( row_id ); - unlockQuest = exdData->getField< uint32_t >( row, 0 ); - challengeName.push_back( exdData->getField< uint16_t >( row, 1 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 2 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 3 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 4 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 5 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 6 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 7 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 8 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 9 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 10 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 11 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 12 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 13 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 14 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 15 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 16 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 17 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 18 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 19 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 20 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 21 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 22 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 23 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 24 ) ); - challengeName.push_back( exdData->getField< uint16_t >( row, 25 ) ); + auto row = exdData->m_DpsChallengeOfficerDat.get_row( row_id ); + unlockQuest = exdData->getField< uint32_t >( row, 0 ); + challengeName.push_back( exdData->getField< uint16_t >( row, 1 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 2 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 3 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 4 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 5 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 6 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 7 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 8 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 9 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 10 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 11 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 12 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 13 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 14 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 15 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 16 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 17 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 18 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 19 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 20 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 21 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 22 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 23 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 24 ) ); + challengeName.push_back( exdData->getField< uint16_t >( row, 25 ) ); } Sapphire::Data::DpsChallengeTransient::DpsChallengeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_DpsChallengeTransientDat.get_row( row_id ); - instanceContent = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_DpsChallengeTransientDat.get_row( row_id ); + instanceContent = exdData->getField< uint16_t >( row, 0 ); +} + +Sapphire::Data::DynamicEvent::DynamicEvent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DynamicEventDat.get_row( row_id ); + eventType = exdData->getField< uint8_t >( row, 0 ); + enemyType = exdData->getField< uint8_t >( row, 1 ); + lGBEventObject = exdData->getField< uint32_t >( row, 4 ); + lGBMapRange = exdData->getField< uint32_t >( row, 5 ); + quest = exdData->getField< uint32_t >( row, 6 ); + singleBattle = exdData->getField< uint8_t >( row, 8 ); + announce = exdData->getField< uint32_t >( row, 9 ); + name = exdData->getField< std::string >( row, 10 ); + description = exdData->getField< std::string >( row, 11 ); +} + +Sapphire::Data::DynamicEventEnemyType::DynamicEventEnemyType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DynamicEventEnemyTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::DynamicEventSingleBattle::DynamicEventSingleBattle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DynamicEventSingleBattleDat.get_row( row_id ); + actionIcon = exdData->getField< int32_t >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + text = exdData->getField< std::string >( row, 2 ); +} + +Sapphire::Data::DynamicEventType::DynamicEventType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DynamicEventTypeDat.get_row( row_id ); + iconObjective0 = exdData->getField< uint32_t >( row, 0 ); + iconObjective1 = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::EmjAddon::EmjAddon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EmjAddonDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_EmjAddonDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::EmjDani::EmjDani( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EmjDaniDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_EmjDaniDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::Emote::Emote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EmoteDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - actionTimeline.push_back( exdData->getField< uint16_t >( row, 1 ) ); - actionTimeline.push_back( exdData->getField< uint16_t >( row, 2 ) ); - actionTimeline.push_back( exdData->getField< uint16_t >( row, 3 ) ); - actionTimeline.push_back( exdData->getField< uint16_t >( row, 4 ) ); - actionTimeline.push_back( exdData->getField< uint16_t >( row, 5 ) ); - actionTimeline.push_back( exdData->getField< uint16_t >( row, 6 ) ); - actionTimeline.push_back( exdData->getField< uint16_t >( row, 7 ) ); - emoteCategory = exdData->getField< uint8_t >( row, 11 ); - emoteMode = exdData->getField< uint8_t >( row, 12 ); - hasCancelEmote = exdData->getField< bool >( row, 15 ); - drawsWeapon = exdData->getField< bool >( row, 16 ); - textCommand = exdData->getField< int32_t >( row, 18 ); - icon = exdData->getField< uint16_t >( row, 19 ); - logMessageTargeted = exdData->getField< uint16_t >( row, 20 ); - logMessageUntargeted = exdData->getField< uint16_t >( row, 21 ); - unlockLink = exdData->getField< uint32_t >( row, 22 ); + auto row = exdData->m_EmoteDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + actionTimeline.push_back( exdData->getField< uint16_t >( row, 1 ) ); + actionTimeline.push_back( exdData->getField< uint16_t >( row, 2 ) ); + actionTimeline.push_back( exdData->getField< uint16_t >( row, 3 ) ); + actionTimeline.push_back( exdData->getField< uint16_t >( row, 4 ) ); + actionTimeline.push_back( exdData->getField< uint16_t >( row, 5 ) ); + actionTimeline.push_back( exdData->getField< uint16_t >( row, 6 ) ); + actionTimeline.push_back( exdData->getField< uint16_t >( row, 7 ) ); + emoteCategory = exdData->getField< uint8_t >( row, 11 ); + emoteMode = exdData->getField< uint8_t >( row, 12 ); + hasCancelEmote = exdData->getField< bool >( row, 15 ); + drawsWeapon = exdData->getField< bool >( row, 16 ); + textCommand = exdData->getField< int32_t >( row, 18 ); + icon = exdData->getField< uint16_t >( row, 19 ); + logMessageTargeted = exdData->getField< uint16_t >( row, 20 ); + logMessageUntargeted = exdData->getField< uint16_t >( row, 21 ); + unlockLink = exdData->getField< uint32_t >( row, 22 ); } Sapphire::Data::EmoteCategory::EmoteCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EmoteCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_EmoteCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::EmoteMode::EmoteMode( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_EmoteModeDat.get_row( row_id ); + startEmote = exdData->getField< uint16_t >( row, 0 ); + endEmote = exdData->getField< uint16_t >( row, 1 ); + move = exdData->getField< bool >( row, 2 ); + camera = exdData->getField< bool >( row, 3 ); + endOnRotate = exdData->getField< bool >( row, 4 ); + endOnEmote = exdData->getField< bool >( row, 5 ); + conditionMode = exdData->getField< uint8_t >( row, 6 ); } Sapphire::Data::ENpcBase::ENpcBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ENpcBaseDat.get_row( row_id ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 2 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 3 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 4 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 5 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 6 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 7 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 8 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 9 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 10 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 11 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 12 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 13 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 14 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 15 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 16 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 17 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 18 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 19 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 20 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 21 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 22 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 23 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 24 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 25 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 26 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 27 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 28 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 29 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 30 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 31 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 32 ) ); - eNpcData.push_back( exdData->getField< uint32_t >( row, 33 ) ); - race = exdData->getField< uint8_t >( row, 36 ); - gender = exdData->getField< uint8_t >( row, 37 ); - bodyType = exdData->getField< uint8_t >( row, 38 ); - height = exdData->getField< uint8_t >( row, 39 ); - tribe = exdData->getField< uint8_t >( row, 40 ); - face = exdData->getField< uint8_t >( row, 41 ); - hairStyle = exdData->getField< uint8_t >( row, 42 ); - hairHighlight = exdData->getField< uint8_t >( row, 43 ); - skinColor = exdData->getField< uint8_t >( row, 44 ); - eyeHeterochromia = exdData->getField< uint8_t >( row, 45 ); - hairColor = exdData->getField< uint8_t >( row, 46 ); - hairHighlightColor = exdData->getField< uint8_t >( row, 47 ); - facialFeature = exdData->getField< uint8_t >( row, 48 ); - facialFeatureColor = exdData->getField< uint8_t >( row, 49 ); - eyebrows = exdData->getField< uint8_t >( row, 50 ); - eyeColor = exdData->getField< uint8_t >( row, 51 ); - eyeShape = exdData->getField< uint8_t >( row, 52 ); - nose = exdData->getField< uint8_t >( row, 53 ); - jaw = exdData->getField< uint8_t >( row, 54 ); - mouth = exdData->getField< uint8_t >( row, 55 ); - lipColor = exdData->getField< uint8_t >( row, 56 ); - bustOrTone1 = exdData->getField< uint8_t >( row, 57 ); - extraFeature1 = exdData->getField< uint8_t >( row, 58 ); - extraFeature2OrBust = exdData->getField< uint8_t >( row, 59 ); - facePaint = exdData->getField< uint8_t >( row, 60 ); - facePaintColor = exdData->getField< uint8_t >( row, 61 ); - npcEquip = exdData->getField< uint16_t >( row, 63 ); - behavior = exdData->getField< uint16_t >( row, 64 ); - modelMainHand = exdData->getField< uint64_t >( row, 65 ); - dyeMainHand = exdData->getField< uint8_t >( row, 66 ); - modelOffHand = exdData->getField< uint64_t >( row, 67 ); - dyeOffHand = exdData->getField< uint8_t >( row, 68 ); - modelHead = exdData->getField< uint32_t >( row, 69 ); - dyeHead = exdData->getField< uint8_t >( row, 70 ); - visor = exdData->getField< bool >( row, 71 ); - modelBody = exdData->getField< uint32_t >( row, 72 ); - dyeBody = exdData->getField< uint8_t >( row, 73 ); - modelHands = exdData->getField< uint32_t >( row, 74 ); - dyeHands = exdData->getField< uint8_t >( row, 75 ); - modelLegs = exdData->getField< uint32_t >( row, 76 ); - dyeLegs = exdData->getField< uint8_t >( row, 77 ); - modelFeet = exdData->getField< uint32_t >( row, 78 ); - dyeFeet = exdData->getField< uint8_t >( row, 79 ); - modelEars = exdData->getField< uint32_t >( row, 80 ); - dyeEars = exdData->getField< uint8_t >( row, 81 ); - modelNeck = exdData->getField< uint32_t >( row, 82 ); - dyeNeck = exdData->getField< uint8_t >( row, 83 ); - modelWrists = exdData->getField< uint32_t >( row, 84 ); - dyeWrists = exdData->getField< uint8_t >( row, 85 ); - modelLeftRing = exdData->getField< uint32_t >( row, 86 ); - dyeLeftRing = exdData->getField< uint8_t >( row, 87 ); - modelRightRing = exdData->getField< uint32_t >( row, 88 ); - dyeRightRing = exdData->getField< uint8_t >( row, 89 ); - balloon = exdData->getField< uint16_t >( row, 91 ); + auto row = exdData->m_ENpcBaseDat.get_row( row_id ); + eventHandler = exdData->getField< uint16_t >( row, 0 ); + important = exdData->getField< bool >( row, 1 ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 2 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 3 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 4 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 5 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 6 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 7 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 8 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 9 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 10 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 11 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 12 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 13 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 14 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 15 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 16 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 17 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 18 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 19 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 20 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 21 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 22 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 23 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 24 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 25 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 26 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 27 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 28 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 29 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 30 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 31 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 32 ) ); + eNpcData.push_back( exdData->getField< uint32_t >( row, 33 ) ); + scale = exdData->getField< float >( row, 34 ); + modelChara = exdData->getField< uint16_t >( row, 35 ); + race = exdData->getField< uint8_t >( row, 36 ); + gender = exdData->getField< uint8_t >( row, 37 ); + bodyType = exdData->getField< uint8_t >( row, 38 ); + height = exdData->getField< uint8_t >( row, 39 ); + tribe = exdData->getField< uint8_t >( row, 40 ); + face = exdData->getField< uint8_t >( row, 41 ); + hairStyle = exdData->getField< uint8_t >( row, 42 ); + hairHighlight = exdData->getField< uint8_t >( row, 43 ); + skinColor = exdData->getField< uint8_t >( row, 44 ); + eyeHeterochromia = exdData->getField< uint8_t >( row, 45 ); + hairColor = exdData->getField< uint8_t >( row, 46 ); + hairHighlightColor = exdData->getField< uint8_t >( row, 47 ); + facialFeature = exdData->getField< uint8_t >( row, 48 ); + facialFeatureColor = exdData->getField< uint8_t >( row, 49 ); + eyebrows = exdData->getField< uint8_t >( row, 50 ); + eyeColor = exdData->getField< uint8_t >( row, 51 ); + eyeShape = exdData->getField< uint8_t >( row, 52 ); + nose = exdData->getField< uint8_t >( row, 53 ); + jaw = exdData->getField< uint8_t >( row, 54 ); + mouth = exdData->getField< uint8_t >( row, 55 ); + lipColor = exdData->getField< uint8_t >( row, 56 ); + bustOrTone1 = exdData->getField< uint8_t >( row, 57 ); + extraFeature1 = exdData->getField< uint8_t >( row, 58 ); + extraFeature2OrBust = exdData->getField< uint8_t >( row, 59 ); + facePaint = exdData->getField< uint8_t >( row, 60 ); + facePaintColor = exdData->getField< uint8_t >( row, 61 ); + npcEquip = exdData->getField< uint16_t >( row, 63 ); + behavior = exdData->getField< uint16_t >( row, 64 ); + modelMainHand = exdData->getField< uint64_t >( row, 65 ); + dyeMainHand = exdData->getField< uint8_t >( row, 66 ); + modelOffHand = exdData->getField< uint64_t >( row, 67 ); + dyeOffHand = exdData->getField< uint8_t >( row, 68 ); + modelHead = exdData->getField< uint32_t >( row, 69 ); + dyeHead = exdData->getField< uint8_t >( row, 70 ); + visor = exdData->getField< bool >( row, 71 ); + modelBody = exdData->getField< uint32_t >( row, 72 ); + dyeBody = exdData->getField< uint8_t >( row, 73 ); + modelHands = exdData->getField< uint32_t >( row, 74 ); + dyeHands = exdData->getField< uint8_t >( row, 75 ); + modelLegs = exdData->getField< uint32_t >( row, 76 ); + dyeLegs = exdData->getField< uint8_t >( row, 77 ); + modelFeet = exdData->getField< uint32_t >( row, 78 ); + dyeFeet = exdData->getField< uint8_t >( row, 79 ); + modelEars = exdData->getField< uint32_t >( row, 80 ); + dyeEars = exdData->getField< uint8_t >( row, 81 ); + modelNeck = exdData->getField< uint32_t >( row, 82 ); + dyeNeck = exdData->getField< uint8_t >( row, 83 ); + modelWrists = exdData->getField< uint32_t >( row, 84 ); + dyeWrists = exdData->getField< uint8_t >( row, 85 ); + modelLeftRing = exdData->getField< uint32_t >( row, 86 ); + dyeLeftRing = exdData->getField< uint8_t >( row, 87 ); + modelRightRing = exdData->getField< uint32_t >( row, 88 ); + dyeRightRing = exdData->getField< uint8_t >( row, 89 ); + invisibility = exdData->getField< uint8_t >( row, 90 ); + balloon = exdData->getField< uint16_t >( row, 91 ); + notRewriteHeight = exdData->getField< bool >( row, 92 ); + defaultBalloon = exdData->getField< uint8_t >( row, 93 ); } Sapphire::Data::ENpcDressUp::ENpcDressUp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ENpcDressUpDat.get_row( row_id ); - eNpcDressUpDress = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_ENpcDressUpDat.get_row( row_id ); + eNpcDressUpDress = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::ENpcDressUpDress::ENpcDressUpDress( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ENpcDressUpDressDat.get_row( row_id, subRow ); - eNpc = exdData->getField< uint32_t >( row, 6 ); + auto row = exdData->m_ENpcDressUpDressDat.get_row( row_id, subRow ); + addedIn530 = exdData->getField< bool >( row, 5 ); + eNpc = exdData->getField< uint32_t >( row, 7 ); + addedIn531 = exdData->getField< uint16_t >( row, 8 ); + behavior = exdData->getField< uint16_t >( row, 9 ); + addedIn532 = exdData->getField< uint8_t >( row, 36 ); + modelMainHand = exdData->getField< uint64_t >( row, 37 ); + dyeMainHand = exdData->getField< uint8_t >( row, 38 ); + modelOffHand = exdData->getField< uint64_t >( row, 39 ); + dyeOffHand = exdData->getField< uint8_t >( row, 40 ); + modelHead = exdData->getField< uint32_t >( row, 41 ); + dyeHead = exdData->getField< uint8_t >( row, 42 ); + modelBody = exdData->getField< uint32_t >( row, 43 ); + dyeBody = exdData->getField< uint8_t >( row, 44 ); + modelHands = exdData->getField< uint32_t >( row, 45 ); + dyeHands = exdData->getField< uint8_t >( row, 46 ); + modelLegs = exdData->getField< uint32_t >( row, 47 ); + dyeLegs = exdData->getField< uint8_t >( row, 48 ); + modelFeet = exdData->getField< uint32_t >( row, 49 ); + dyeFeet = exdData->getField< uint8_t >( row, 50 ); } Sapphire::Data::ENpcResident::ENpcResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ENpcResidentDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - title = exdData->getField< std::string >( row, 8 ); - map = exdData->getField< uint8_t >( row, 9 ); + auto row = exdData->m_ENpcResidentDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + title = exdData->getField< std::string >( row, 8 ); + map = exdData->getField< uint8_t >( row, 9 ); } Sapphire::Data::EObj::EObj( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EObjDat.get_row( row_id ); - data = exdData->getField< uint32_t >( row, 9 ); - sgbPath = exdData->getField< uint16_t >( row, 11 ); + auto row = exdData->m_EObjDat.get_row( row_id ); + popType = exdData->getField< uint8_t >( row, 8 ); + data = exdData->getField< uint32_t >( row, 9 ); + invisibility = exdData->getField< uint8_t >( row, 10 ); + sgbPath = exdData->getField< uint16_t >( row, 11 ); + eyeCollision = exdData->getField< bool >( row, 12 ); + directorControl = exdData->getField< bool >( row, 13 ); + target = exdData->getField< bool >( row, 14 ); + eventHighAddition = exdData->getField< uint8_t >( row, 15 ); + addedIn53 = exdData->getField< bool >( row, 18 ); } Sapphire::Data::EObjName::EObjName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EObjNameDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); + auto row = exdData->m_EObjNameDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); } Sapphire::Data::EquipRaceCategory::EquipRaceCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EquipRaceCategoryDat.get_row( row_id ); - hyur = exdData->getField< bool >( row, 0 ); - elezen = exdData->getField< bool >( row, 1 ); - lalafell = exdData->getField< bool >( row, 2 ); - miqote = exdData->getField< bool >( row, 3 ); - roegadyn = exdData->getField< bool >( row, 4 ); - auRa = exdData->getField< bool >( row, 5 ); - male = exdData->getField< bool >( row, 6 ); - female = exdData->getField< bool >( row, 7 ); + auto row = exdData->m_EquipRaceCategoryDat.get_row( row_id ); + hyur = exdData->getField< bool >( row, 0 ); + elezen = exdData->getField< bool >( row, 1 ); + lalafell = exdData->getField< bool >( row, 2 ); + miqote = exdData->getField< bool >( row, 3 ); + roegadyn = exdData->getField< bool >( row, 4 ); + auRa = exdData->getField< bool >( row, 5 ); + male = exdData->getField< bool >( row, 8 ); + female = exdData->getField< bool >( row, 9 ); } Sapphire::Data::EquipSlotCategory::EquipSlotCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EquipSlotCategoryDat.get_row( row_id ); - mainHand = exdData->getField< int8_t >( row, 0 ); - offHand = exdData->getField< int8_t >( row, 1 ); - head = exdData->getField< int8_t >( row, 2 ); - body = exdData->getField< int8_t >( row, 3 ); - gloves = exdData->getField< int8_t >( row, 4 ); - waist = exdData->getField< int8_t >( row, 5 ); - legs = exdData->getField< int8_t >( row, 6 ); - feet = exdData->getField< int8_t >( row, 7 ); - ears = exdData->getField< int8_t >( row, 8 ); - neck = exdData->getField< int8_t >( row, 9 ); - wrists = exdData->getField< int8_t >( row, 10 ); - fingerL = exdData->getField< int8_t >( row, 11 ); - fingerR = exdData->getField< int8_t >( row, 12 ); - soulCrystal = exdData->getField< int8_t >( row, 13 ); + auto row = exdData->m_EquipSlotCategoryDat.get_row( row_id ); + mainHand = exdData->getField< int8_t >( row, 0 ); + offHand = exdData->getField< int8_t >( row, 1 ); + head = exdData->getField< int8_t >( row, 2 ); + body = exdData->getField< int8_t >( row, 3 ); + gloves = exdData->getField< int8_t >( row, 4 ); + waist = exdData->getField< int8_t >( row, 5 ); + legs = exdData->getField< int8_t >( row, 6 ); + feet = exdData->getField< int8_t >( row, 7 ); + ears = exdData->getField< int8_t >( row, 8 ); + neck = exdData->getField< int8_t >( row, 9 ); + wrists = exdData->getField< int8_t >( row, 10 ); + fingerL = exdData->getField< int8_t >( row, 11 ); + fingerR = exdData->getField< int8_t >( row, 12 ); + soulCrystal = exdData->getField< int8_t >( row, 13 ); } Sapphire::Data::EurekaAetherItem::EurekaAetherItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaAetherItemDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - name = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_EurekaAetherItemDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + name = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::EurekaAethernet::EurekaAethernet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaAethernetDat.get_row( row_id ); - location = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_EurekaAethernetDat.get_row( row_id ); + location = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::EurekaGrowData::EurekaGrowData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaGrowDataDat.get_row( row_id ); - baseResistance = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_EurekaGrowDataDat.get_row( row_id ); + baseResistance = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::EurekaLogosMixerProbability::EurekaLogosMixerProbability( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaLogosMixerProbabilityDat.get_row( row_id ); - probability = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_EurekaLogosMixerProbabilityDat.get_row( row_id ); + probability = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::EurekaMagiaAction::EurekaMagiaAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaMagiaActionDat.get_row( row_id ); - action = exdData->getField< uint32_t >( row, 0 ); - maxUses = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_EurekaMagiaActionDat.get_row( row_id ); + action = exdData->getField< uint32_t >( row, 0 ); + maxUses = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::EurekaMagiciteItem::EurekaMagiciteItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaMagiciteItemDat.get_row( row_id ); - eurekaMagiciteItemType = exdData->getField< uint8_t >( row, 0 ); - classJobCategory = exdData->getField< uint8_t >( row, 1 ); - item = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_EurekaMagiciteItemDat.get_row( row_id ); + eurekaMagiciteItemType = exdData->getField< uint8_t >( row, 0 ); + classJobCategory = exdData->getField< uint8_t >( row, 1 ); + item = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::EurekaMagiciteItemType::EurekaMagiciteItemType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaMagiciteItemTypeDat.get_row( row_id ); - type = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_EurekaMagiciteItemTypeDat.get_row( row_id ); + type = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::EurekaSphereElementAdjust::EurekaSphereElementAdjust( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EurekaSphereElementAdjustDat.get_row( row_id ); - powerModifier = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_EurekaSphereElementAdjustDat.get_row( row_id ); + powerModifier = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::EventAction::EventAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EventActionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< uint16_t >( row, 1 ); - castTime = exdData->getField< uint8_t >( row, 2 ); - animation.push_back( exdData->getField< uint16_t >( row, 3 ) ); - animation.push_back( exdData->getField< uint16_t >( row, 4 ) ); - animation.push_back( exdData->getField< uint16_t >( row, 5 ) ); + auto row = exdData->m_EventActionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< uint16_t >( row, 1 ); + castTime = exdData->getField< uint8_t >( row, 2 ); + animation.push_back( exdData->getField< uint16_t >( row, 3 ) ); + animation.push_back( exdData->getField< uint16_t >( row, 4 ) ); + animation.push_back( exdData->getField< uint16_t >( row, 5 ) ); } Sapphire::Data::EventIconPriority::EventIconPriority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EventIconPriorityDat.get_row( row_id ); - icon.push_back( exdData->getField< uint32_t >( row, 0 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 1 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 2 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 3 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 4 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 5 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 6 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 7 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 8 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 9 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 10 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 11 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 12 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 13 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 14 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 15 ) ); + auto row = exdData->m_EventIconPriorityDat.get_row( row_id ); + icon.push_back( exdData->getField< uint32_t >( row, 0 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 1 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 2 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 3 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 4 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 5 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 6 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 7 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 8 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 9 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 10 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 11 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 12 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 13 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 14 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 15 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 16 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 17 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 18 ) ); } Sapphire::Data::EventIconType::EventIconType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EventIconTypeDat.get_row( row_id ); - npcIconAvailable = exdData->getField< uint32_t >( row, 0 ); - mapIconAvailable = exdData->getField< uint32_t >( row, 1 ); - npcIconInvalid = exdData->getField< uint32_t >( row, 2 ); - mapIconInvalid = exdData->getField< uint32_t >( row, 3 ); - iconRange = exdData->getField< uint8_t >( row, 4 ); + auto row = exdData->m_EventIconTypeDat.get_row( row_id ); + npcIconAvailable = exdData->getField< uint32_t >( row, 0 ); + mapIconAvailable = exdData->getField< uint32_t >( row, 1 ); + npcIconInvalid = exdData->getField< uint32_t >( row, 2 ); + mapIconInvalid = exdData->getField< uint32_t >( row, 3 ); + iconRange = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::EventItem::EventItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EventItemDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - name = exdData->getField< std::string >( row, 9 ); - icon = exdData->getField< uint16_t >( row, 10 ); - action = exdData->getField< uint16_t >( row, 11 ); - stackSize = exdData->getField< uint8_t >( row, 12 ); - quest = exdData->getField< uint32_t >( row, 14 ); - castTime = exdData->getField< uint8_t >( row, 15 ); + auto row = exdData->m_EventItemDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + name = exdData->getField< std::string >( row, 9 ); + icon = exdData->getField< uint16_t >( row, 10 ); + action = exdData->getField< uint16_t >( row, 11 ); + stackSize = exdData->getField< uint8_t >( row, 12 ); + quest = exdData->getField< uint32_t >( row, 14 ); + castTime = exdData->getField< uint8_t >( row, 15 ); + castTimeline = exdData->getField< uint8_t >( row, 16 ); + timeline = exdData->getField< uint8_t >( row, 17 ); } Sapphire::Data::EventItemCastTimeline::EventItemCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EventItemCastTimelineDat.get_row( row_id ); - actionTimeline = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_EventItemCastTimelineDat.get_row( row_id ); + actionTimeline = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::EventItemHelp::EventItemHelp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EventItemHelpDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_EventItemHelpDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::EventItemTimeline::EventItemTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_EventItemTimelineDat.get_row( row_id ); - actionTimeline = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_EventItemTimelineDat.get_row( row_id ); + actionTimeline = exdData->getField< uint32_t >( row, 0 ); +} + +Sapphire::Data::EventSystemDefine::EventSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_EventSystemDefineDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); + defineValue = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::ExportedSG::ExportedSG( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ExportedSGDat.get_row( row_id ); - sgbPath = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ExportedSGDat.get_row( row_id ); + sgbPath = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::ExVersion::ExVersion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ExVersionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ExVersionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + acceptJingle = exdData->getField< uint16_t >( row, 1 ); + completeJingle = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::Fate::Fate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FateDat.get_row( row_id ); - eurekaFate = exdData->getField< uint8_t >( row, 0 ); - location = exdData->getField< uint32_t >( row, 2 ); - classJobLevel = exdData->getField< uint8_t >( row, 3 ); - classJobLevelMax = exdData->getField< uint8_t >( row, 4 ); - eventItem = exdData->getField< uint32_t >( row, 5 ); - iconObjective = exdData->getField< uint32_t >( row, 10 ); - iconMap = exdData->getField< uint32_t >( row, 11 ); - music = exdData->getField< int32_t >( row, 13 ); - hasWorldMapIcon = exdData->getField< bool >( row, 19 ); - name = exdData->getField< std::string >( row, 27 ); - description = exdData->getField< std::string >( row, 28 ); - objective = exdData->getField< std::string >( row, 29 ); - statusText.push_back( exdData->getField< std::string >( row, 30 ) ); - statusText.push_back( exdData->getField< std::string >( row, 31 ) ); - statusText.push_back( exdData->getField< std::string >( row, 32 ) ); - arrayIndex = exdData->getField< uint32_t >( row, 33 ); + auto row = exdData->m_FateDat.get_row( row_id ); + eurekaFate = exdData->getField< uint8_t >( row, 0 ); + rule = exdData->getField< uint8_t >( row, 1 ); + fateRuleEx = exdData->getField< uint16_t >( row, 2 ); + location = exdData->getField< uint32_t >( row, 3 ); + classJobLevel = exdData->getField< uint8_t >( row, 4 ); + classJobLevelMax = exdData->getField< uint8_t >( row, 5 ); + eventItem = exdData->getField< uint32_t >( row, 6 ); + typeToDoValue.push_back( exdData->getField< uint8_t >( row, 7 ) ); + typeToDoValue.push_back( exdData->getField< uint8_t >( row, 8 ) ); + typeToDoValue.push_back( exdData->getField< uint8_t >( row, 9 ) ); + iconObjective = exdData->getField< uint32_t >( row, 10 ); + iconMap = exdData->getField< uint32_t >( row, 11 ); + iconInactiveMap = exdData->getField< uint32_t >( row, 12 ); + music = exdData->getField< int32_t >( row, 13 ); + lGBGuardNPCLocation = exdData->getField< uint32_t >( row, 14 ); + screenImageAccept = exdData->getField< uint16_t >( row, 15 ); + screenImageComplete = exdData->getField< uint16_t >( row, 16 ); + screenImageFailed = exdData->getField< uint16_t >( row, 17 ); + specialFate = exdData->getField< bool >( row, 20 ); + givenStatus = exdData->getField< uint16_t >( row, 22 ); + adventEvent = exdData->getField< bool >( row, 24 ); + moonFaireEvent = exdData->getField< bool >( row, 25 ); + fATEChain = exdData->getField< uint32_t >( row, 27 ); + name = exdData->getField< std::string >( row, 30 ); + description = exdData->getField< std::string >( row, 31 ); + objective = exdData->getField< std::string >( row, 32 ); + statusText.push_back( exdData->getField< std::string >( row, 33 ) ); + statusText.push_back( exdData->getField< std::string >( row, 34 ) ); + statusText.push_back( exdData->getField< std::string >( row, 35 ) ); + arrayIndex = exdData->getField< uint32_t >( row, 36 ); + reqEventItem = exdData->getField< uint32_t >( row, 38 ); + turnInEventItem = exdData->getField< uint32_t >( row, 39 ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 40 ) ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 41 ) ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 42 ) ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 43 ) ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 44 ) ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 45 ) ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 46 ) ); + objectiveIcon.push_back( exdData->getField< uint16_t >( row, 47 ) ); +} + +Sapphire::Data::FateEvent::FateEvent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FateEventDat.get_row( row_id ); + turn.push_back( exdData->getField< uint8_t >( row, 0 ) ); + turn.push_back( exdData->getField< uint8_t >( row, 1 ) ); + turn.push_back( exdData->getField< uint8_t >( row, 2 ) ); + turn.push_back( exdData->getField< uint8_t >( row, 3 ) ); + turn.push_back( exdData->getField< uint8_t >( row, 4 ) ); + turn.push_back( exdData->getField< uint8_t >( row, 5 ) ); + turn.push_back( exdData->getField< uint8_t >( row, 6 ) ); + turn.push_back( exdData->getField< uint8_t >( row, 7 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 8 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 9 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 10 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 11 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 12 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 13 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 14 ) ); + gesture.push_back( exdData->getField< uint32_t >( row, 15 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 16 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 17 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 18 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 19 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 20 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 21 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 22 ) ); + lipSync.push_back( exdData->getField< int32_t >( row, 23 ) ); + facial.push_back( exdData->getField< int32_t >( row, 24 ) ); + facial.push_back( exdData->getField< int32_t >( row, 25 ) ); + facial.push_back( exdData->getField< int32_t >( row, 26 ) ); + facial.push_back( exdData->getField< int32_t >( row, 27 ) ); + facial.push_back( exdData->getField< int32_t >( row, 28 ) ); + facial.push_back( exdData->getField< int32_t >( row, 29 ) ); + facial.push_back( exdData->getField< int32_t >( row, 30 ) ); + facial.push_back( exdData->getField< int32_t >( row, 31 ) ); + shape.push_back( exdData->getField< int32_t >( row, 32 ) ); + shape.push_back( exdData->getField< int32_t >( row, 33 ) ); + shape.push_back( exdData->getField< int32_t >( row, 34 ) ); + shape.push_back( exdData->getField< int32_t >( row, 35 ) ); + shape.push_back( exdData->getField< int32_t >( row, 36 ) ); + shape.push_back( exdData->getField< int32_t >( row, 37 ) ); + shape.push_back( exdData->getField< int32_t >( row, 38 ) ); + shape.push_back( exdData->getField< int32_t >( row, 39 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 40 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 41 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 42 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 43 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 44 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 45 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 46 ) ); + isAutoShake.push_back( exdData->getField< bool >( row, 47 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 48 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 49 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 50 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 51 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 52 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 53 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 54 ) ); + widgetType.push_back( exdData->getField< uint8_t >( row, 55 ) ); + text.push_back( exdData->getField< std::string >( row, 56 ) ); + text.push_back( exdData->getField< std::string >( row, 57 ) ); + text.push_back( exdData->getField< std::string >( row, 58 ) ); + text.push_back( exdData->getField< std::string >( row, 59 ) ); + text.push_back( exdData->getField< std::string >( row, 60 ) ); + text.push_back( exdData->getField< std::string >( row, 61 ) ); + text.push_back( exdData->getField< std::string >( row, 62 ) ); + text.push_back( exdData->getField< std::string >( row, 63 ) ); +} + +Sapphire::Data::FateMode::FateMode( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FateModeDat.get_row( row_id ); + motivationIcon = exdData->getField< uint32_t >( row, 1 ); + motivationMapMarker = exdData->getField< uint32_t >( row, 2 ); + objectiveIcon = exdData->getField< uint32_t >( row, 3 ); + objectiveMapMarker = exdData->getField< uint32_t >( row, 4 ); +} + +Sapphire::Data::FateProgressUI::FateProgressUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FateProgressUIDat.get_row( row_id ); + location = exdData->getField< int32_t >( row, 0 ); + achievement = exdData->getField< int32_t >( row, 1 ); + reqFatesToRank2 = exdData->getField< uint8_t >( row, 2 ); + reqFatesToRank3 = exdData->getField< uint8_t >( row, 3 ); + displayOrder = exdData->getField< uint8_t >( row, 4 ); +} + +Sapphire::Data::FateTokenType::FateTokenType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FateTokenTypeDat.get_row( row_id ); + currency = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::FCActivity::FCActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCActivityDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); - fCActivityCategory = exdData->getField< uint8_t >( row, 4 ); + auto row = exdData->m_FCActivityDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); + selfKind = exdData->getField< uint8_t >( row, 1 ); + targetKind = exdData->getField< uint8_t >( row, 2 ); + numParam = exdData->getField< uint8_t >( row, 3 ); + fCActivityCategory = exdData->getField< uint8_t >( row, 4 ); + iconType = exdData->getField< int8_t >( row, 5 ); } Sapphire::Data::FCActivityCategory::FCActivityCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCActivityCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_FCActivityCategoryDat.get_row( row_id ); + priority = exdData->getField< uint8_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::FCAuthority::FCAuthority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCAuthorityDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - fCAuthorityCategory = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_FCAuthorityDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + fCAuthorityCategory = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::FCAuthorityCategory::FCAuthorityCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCAuthorityCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_FCAuthorityCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::FCChestName::FCChestName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCChestNameDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_FCChestNameDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::FCCrestSymbol::FCCrestSymbol( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FCCrestSymbolDat.get_row( row_id ); + colorNum = exdData->getField< uint8_t >( row, 0 ); + fCRight = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::FccShop::FccShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FccShopDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_FccShopDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::FCHierarchy::FCHierarchy( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCHierarchyDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_FCHierarchyDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::FCProfile::FCProfile( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCProfileDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_FCProfileDat.get_row( row_id ); + priority = exdData->getField< uint8_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); +} + +Sapphire::Data::FCRank::FCRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FCRankDat.get_row( row_id ); + nextPoint = exdData->getField< uint32_t >( row, 0 ); + currentPoint = exdData->getField< uint32_t >( row, 1 ); + rights = exdData->getField< uint16_t >( row, 2 ); + fCActionActiveNum = exdData->getField< uint8_t >( row, 5 ); + fCActionStockNum = exdData->getField< uint8_t >( row, 6 ); } Sapphire::Data::FCReputation::FCReputation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCReputationDat.get_row( row_id ); - pointsToNext = exdData->getField< uint32_t >( row, 0 ); - requiredPoints = exdData->getField< uint32_t >( row, 1 ); - name = exdData->getField< std::string >( row, 4 ); + auto row = exdData->m_FCReputationDat.get_row( row_id ); + pointsToNext = exdData->getField< uint32_t >( row, 0 ); + requiredPoints = exdData->getField< uint32_t >( row, 1 ); + discountRate = exdData->getField< uint8_t >( row, 2 ); + color = exdData->getField< uint32_t >( row, 3 ); + name = exdData->getField< std::string >( row, 4 ); } Sapphire::Data::FCRights::FCRights( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FCRightsDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< uint16_t >( row, 2 ); - fCRank = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_FCRightsDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< uint16_t >( row, 2 ); + fCRank = exdData->getField< uint8_t >( row, 3 ); } Sapphire::Data::Festival::Festival( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FestivalDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_FestivalDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::FieldMarker::FieldMarker( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FieldMarkerDat.get_row( row_id ); - vFX = exdData->getField< int32_t >( row, 0 ); - icon = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_FieldMarkerDat.get_row( row_id ); + vFX = exdData->getField< int32_t >( row, 0 ); + icon = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::FishingRecordType::FishingRecordType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FishingRecordTypeDat.get_row( row_id ); - addon = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_FishingRecordTypeDat.get_row( row_id ); + addon = exdData->getField< int32_t >( row, 0 ); + rankBRequirement = exdData->getField< uint16_t >( row, 1 ); + rankARequirement = exdData->getField< uint16_t >( row, 2 ); + rankAARequirement = exdData->getField< uint16_t >( row, 3 ); + rankAAARequirement = exdData->getField< uint16_t >( row, 4 ); } Sapphire::Data::FishingRecordTypeTransient::FishingRecordTypeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FishingRecordTypeTransientDat.get_row( row_id ); - image = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_FishingRecordTypeTransientDat.get_row( row_id ); + image = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::FishingSpot::FishingSpot( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FishingSpotDat.get_row( row_id ); - gatheringLevel = exdData->getField< uint8_t >( row, 0 ); - bigFishOnReach = exdData->getField< std::string >( row, 1 ); - bigFishOnEnd = exdData->getField< std::string >( row, 2 ); - fishingSpotCategory = exdData->getField< uint8_t >( row, 3 ); - territoryType = exdData->getField< uint16_t >( row, 5 ); - x = exdData->getField< int16_t >( row, 6 ); - z = exdData->getField< int16_t >( row, 7 ); - radius = exdData->getField< uint16_t >( row, 8 ); - item.push_back( exdData->getField< int32_t >( row, 10 ) ); - item.push_back( exdData->getField< int32_t >( row, 11 ) ); - item.push_back( exdData->getField< int32_t >( row, 12 ) ); - item.push_back( exdData->getField< int32_t >( row, 13 ) ); - item.push_back( exdData->getField< int32_t >( row, 14 ) ); - item.push_back( exdData->getField< int32_t >( row, 15 ) ); - item.push_back( exdData->getField< int32_t >( row, 16 ) ); - item.push_back( exdData->getField< int32_t >( row, 17 ) ); - item.push_back( exdData->getField< int32_t >( row, 18 ) ); - item.push_back( exdData->getField< int32_t >( row, 19 ) ); - placeName = exdData->getField< uint16_t >( row, 20 ); + auto row = exdData->m_FishingSpotDat.get_row( row_id ); + gatheringLevel = exdData->getField< uint8_t >( row, 0 ); + bigFishOnReach = exdData->getField< std::string >( row, 1 ); + bigFishOnEnd = exdData->getField< std::string >( row, 2 ); + fishingSpotCategory = exdData->getField< uint8_t >( row, 3 ); + rare = exdData->getField< bool >( row, 4 ); + territoryType = exdData->getField< uint16_t >( row, 5 ); + placeNameMain = exdData->getField< uint16_t >( row, 6 ); + placeNameSub = exdData->getField< uint16_t >( row, 7 ); + x = exdData->getField< int16_t >( row, 8 ); + z = exdData->getField< int16_t >( row, 9 ); + radius = exdData->getField< uint16_t >( row, 10 ); + item.push_back( exdData->getField< int32_t >( row, 12 ) ); + item.push_back( exdData->getField< int32_t >( row, 13 ) ); + item.push_back( exdData->getField< int32_t >( row, 14 ) ); + item.push_back( exdData->getField< int32_t >( row, 15 ) ); + item.push_back( exdData->getField< int32_t >( row, 16 ) ); + item.push_back( exdData->getField< int32_t >( row, 17 ) ); + item.push_back( exdData->getField< int32_t >( row, 18 ) ); + item.push_back( exdData->getField< int32_t >( row, 19 ) ); + item.push_back( exdData->getField< int32_t >( row, 20 ) ); + item.push_back( exdData->getField< int32_t >( row, 21 ) ); + placeName = exdData->getField< uint16_t >( row, 22 ); + order = exdData->getField< uint8_t >( row, 23 ); } Sapphire::Data::FishParameter::FishParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_FishParameterDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); - item = exdData->getField< int32_t >( row, 1 ); - gatheringItemLevel = exdData->getField< uint16_t >( row, 2 ); - isHidden = exdData->getField< bool >( row, 3 ); - fishingRecordType = exdData->getField< uint8_t >( row, 5 ); - territoryType = exdData->getField< int32_t >( row, 6 ); - isInLog = exdData->getField< bool >( row, 7 ); - timeRestricted = exdData->getField< bool >( row, 8 ); - weatherRestricted = exdData->getField< bool >( row, 9 ); - gatheringSubCategory = exdData->getField< uint16_t >( row, 10 ); + auto row = exdData->m_FishParameterDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); + item = exdData->getField< int32_t >( row, 1 ); + gatheringItemLevel = exdData->getField< uint16_t >( row, 2 ); + isHidden = exdData->getField< bool >( row, 4 ); + fishingRecordType = exdData->getField< uint8_t >( row, 6 ); + territoryType = exdData->getField< int32_t >( row, 7 ); + gatheringSubCategory = exdData->getField< uint16_t >( row, 8 ); + isInLog = exdData->getField< bool >( row, 9 ); + timeRestricted = exdData->getField< bool >( row, 10 ); + weatherRestricted = exdData->getField< bool >( row, 11 ); } Sapphire::Data::Frontline03::Frontline03( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_Frontline03Dat.get_row( row_id ); - emptyIcon.push_back( exdData->getField< uint32_t >( row, 9 ) ); - emptyIcon.push_back( exdData->getField< uint32_t >( row, 10 ) ); - emptyIcon.push_back( exdData->getField< uint32_t >( row, 11 ) ); - maelstromIcon.push_back( exdData->getField< uint32_t >( row, 12 ) ); - maelstromIcon.push_back( exdData->getField< uint32_t >( row, 13 ) ); - maelstromIcon.push_back( exdData->getField< uint32_t >( row, 14 ) ); - twinAdderIcon.push_back( exdData->getField< uint32_t >( row, 15 ) ); - twinAdderIcon.push_back( exdData->getField< uint32_t >( row, 16 ) ); - twinAdderIcon.push_back( exdData->getField< uint32_t >( row, 17 ) ); - immortalFlamesIcon.push_back( exdData->getField< uint32_t >( row, 18 ) ); - immortalFlamesIcon.push_back( exdData->getField< uint32_t >( row, 19 ) ); - immortalFlamesIcon.push_back( exdData->getField< uint32_t >( row, 20 ) ); + auto row = exdData->m_Frontline03Dat.get_row( row_id ); + emptyIcon.push_back( exdData->getField< uint32_t >( row, 9 ) ); + emptyIcon.push_back( exdData->getField< uint32_t >( row, 10 ) ); + emptyIcon.push_back( exdData->getField< uint32_t >( row, 11 ) ); + maelstromIcon.push_back( exdData->getField< uint32_t >( row, 12 ) ); + maelstromIcon.push_back( exdData->getField< uint32_t >( row, 13 ) ); + maelstromIcon.push_back( exdData->getField< uint32_t >( row, 14 ) ); + twinAdderIcon.push_back( exdData->getField< uint32_t >( row, 15 ) ); + twinAdderIcon.push_back( exdData->getField< uint32_t >( row, 16 ) ); + twinAdderIcon.push_back( exdData->getField< uint32_t >( row, 17 ) ); + immortalFlamesIcon.push_back( exdData->getField< uint32_t >( row, 18 ) ); + immortalFlamesIcon.push_back( exdData->getField< uint32_t >( row, 19 ) ); + immortalFlamesIcon.push_back( exdData->getField< uint32_t >( row, 20 ) ); } Sapphire::Data::Frontline04::Frontline04( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_Frontline04Dat.get_row( row_id ); - level1 = exdData->getField< int32_t >( row, 0 ); - level2 = exdData->getField< int32_t >( row, 1 ); - level3 = exdData->getField< int32_t >( row, 2 ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 6 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 7 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 8 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 9 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 10 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 11 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 12 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 13 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 14 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 15 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 16 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 17 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 18 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 19 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 20 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 21 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 22 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 23 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 24 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 25 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 26 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 27 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 28 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 29 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 30 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 31 ) ); - unknownLevel.push_back( exdData->getField< int32_t >( row, 32 ) ); + auto row = exdData->m_Frontline04Dat.get_row( row_id ); + level1 = exdData->getField< int32_t >( row, 0 ); + level2 = exdData->getField< int32_t >( row, 1 ); + level3 = exdData->getField< int32_t >( row, 2 ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 6 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 7 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 8 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 9 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 10 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 11 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 12 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 13 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 14 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 15 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 16 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 17 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 18 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 19 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 20 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 21 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 22 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 23 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 24 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 25 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 26 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 27 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 28 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 29 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 30 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 31 ) ); + unknownLevel.push_back( exdData->getField< int32_t >( row, 32 ) ); +} + +Sapphire::Data::FurnitureCatalogCategory::FurnitureCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FurnitureCatalogCategoryDat.get_row( row_id ); + category = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::FurnitureCatalogItemList::FurnitureCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FurnitureCatalogItemListDat.get_row( row_id ); + category = exdData->getField< uint16_t >( row, 0 ); + item = exdData->getField< int32_t >( row, 1 ); + patch = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::GardeningSeed::GardeningSeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GardeningSeedDat.get_row( row_id ); - item = exdData->getField< uint32_t >( row, 0 ); - icon = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_GardeningSeedDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 0 ); + modelID = exdData->getField< uint16_t >( row, 1 ); + icon = exdData->getField< uint32_t >( row, 2 ); + sE = exdData->getField< bool >( row, 3 ); } Sapphire::Data::GatheringCondition::GatheringCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringConditionDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_GatheringConditionDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GatheringExp::GatheringExp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringExpDat.get_row( row_id ); - exp = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_GatheringExpDat.get_row( row_id ); + exp = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::GatheringItem::GatheringItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringItemDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - gatheringItemLevel = exdData->getField< uint16_t >( row, 1 ); - isHidden = exdData->getField< bool >( row, 2 ); + auto row = exdData->m_GatheringItemDat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + gatheringItemLevel = exdData->getField< uint16_t >( row, 1 ); + isHidden = exdData->getField< uint32_t >( row, 3 ); } Sapphire::Data::GatheringItemLevelConvertTable::GatheringItemLevelConvertTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringItemLevelConvertTableDat.get_row( row_id ); - gatheringItemLevel = exdData->getField< uint8_t >( row, 0 ); - stars = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_GatheringItemLevelConvertTableDat.get_row( row_id ); + gatheringItemLevel = exdData->getField< uint8_t >( row, 0 ); + stars = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::GatheringItemPoint::GatheringItemPoint( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringItemPointDat.get_row( row_id, subRow ); - gatheringPoint = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_GatheringItemPointDat.get_row( row_id, subRow ); + gatheringPoint = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::GatheringLeve::GatheringLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringLeveDat.get_row( row_id ); - requiredItem1 = exdData->getField< int32_t >( row, 4 ); - leveLevel = exdData->getField< uint8_t >( row, 5 ); - requiredItem2 = exdData->getField< int32_t >( row, 6 ); + auto row = exdData->m_GatheringLeveDat.get_row( row_id ); + route.push_back( exdData->getField< int32_t >( row, 0 ) ); + route.push_back( exdData->getField< int32_t >( row, 1 ) ); + route.push_back( exdData->getField< int32_t >( row, 2 ) ); + route.push_back( exdData->getField< int32_t >( row, 3 ) ); + requiredItem0 = exdData->getField< int32_t >( row, 4 ); + requiredItemQty0 = exdData->getField< uint8_t >( row, 5 ); + requiredItem1 = exdData->getField< int32_t >( row, 6 ); + requiredItemQty1 = exdData->getField< uint8_t >( row, 7 ); + requiredItem2 = exdData->getField< int32_t >( row, 8 ); + requiredItemQty2 = exdData->getField< uint8_t >( row, 9 ); + requiredItem3 = exdData->getField< int32_t >( row, 10 ); + requiredItemQty3 = exdData->getField< uint8_t >( row, 11 ); + itemNumber = exdData->getField< uint8_t >( row, 12 ); + rule = exdData->getField< int32_t >( row, 13 ); + varient = exdData->getField< uint8_t >( row, 14 ); + objective0 = exdData->getField< uint16_t >( row, 15 ); + objective1 = exdData->getField< uint16_t >( row, 16 ); + bNpcEntry = exdData->getField< int32_t >( row, 17 ); + useSecondaryTool = exdData->getField< bool >( row, 18 ); } Sapphire::Data::GatheringLeveRoute::GatheringLeveRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringLeveRouteDat.get_row( row_id ); + auto row = exdData->m_GatheringLeveRouteDat.get_row( row_id ); +} + +Sapphire::Data::GatheringLeveRule::GatheringLeveRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GatheringLeveRuleDat.get_row( row_id ); + rule = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GatheringNotebookList::GatheringNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringNotebookListDat.get_row( row_id ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 1 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 2 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 3 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 4 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 5 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 6 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 7 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 8 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 9 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 10 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 11 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 12 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 13 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 14 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 15 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 16 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 17 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 18 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 19 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 20 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 21 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 22 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 23 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 24 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 25 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 26 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 27 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 28 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 29 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 30 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 31 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 32 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 33 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 34 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 35 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 36 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 37 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 38 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 39 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 40 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 41 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 42 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 43 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 44 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 45 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 46 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 47 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 48 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 49 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 50 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 51 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 52 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 53 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 54 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 55 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 56 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 57 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 58 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 59 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 60 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 61 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 62 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 63 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 64 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 65 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 66 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 67 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 68 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 69 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 70 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 71 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 72 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 73 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 74 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 75 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 76 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 77 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 78 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 79 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 80 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 81 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 82 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 83 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 84 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 85 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 86 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 87 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 88 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 89 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 90 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 91 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 92 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 93 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 94 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 95 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 96 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 97 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 98 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 99 ) ); - gatheringItem.push_back( exdData->getField< int32_t >( row, 100 ) ); + auto row = exdData->m_GatheringNotebookListDat.get_row( row_id ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 1 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 2 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 3 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 4 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 5 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 6 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 7 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 8 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 9 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 10 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 11 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 12 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 13 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 14 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 15 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 16 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 17 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 18 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 19 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 20 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 21 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 22 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 23 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 24 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 25 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 26 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 27 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 28 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 29 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 30 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 31 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 32 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 33 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 34 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 35 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 36 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 37 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 38 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 39 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 40 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 41 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 42 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 43 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 44 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 45 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 46 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 47 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 48 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 49 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 50 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 51 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 52 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 53 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 54 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 55 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 56 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 57 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 58 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 59 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 60 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 61 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 62 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 63 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 64 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 65 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 66 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 67 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 68 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 69 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 70 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 71 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 72 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 73 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 74 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 75 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 76 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 77 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 78 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 79 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 80 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 81 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 82 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 83 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 84 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 85 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 86 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 87 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 88 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 89 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 90 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 91 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 92 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 93 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 94 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 95 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 96 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 97 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 98 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 99 ) ); + gatheringItem.push_back( exdData->getField< int32_t >( row, 100 ) ); } Sapphire::Data::GatheringPoint::GatheringPoint( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringPointDat.get_row( row_id ); - gatheringPointBase = exdData->getField< int32_t >( row, 1 ); - gatheringPointBonus.push_back( exdData->getField< uint16_t >( row, 3 ) ); - gatheringPointBonus.push_back( exdData->getField< uint16_t >( row, 4 ) ); - territoryType = exdData->getField< uint16_t >( row, 5 ); - placeName = exdData->getField< uint16_t >( row, 6 ); - gatheringSubCategory = exdData->getField< uint16_t >( row, 7 ); + auto row = exdData->m_GatheringPointDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + gatheringPointBase = exdData->getField< int32_t >( row, 1 ); + count = exdData->getField< uint8_t >( row, 2 ); + gatheringPointBonus.push_back( exdData->getField< uint16_t >( row, 3 ) ); + gatheringPointBonus.push_back( exdData->getField< uint16_t >( row, 4 ) ); + territoryType = exdData->getField< uint16_t >( row, 5 ); + placeName = exdData->getField< uint16_t >( row, 6 ); + gatheringSubCategory = exdData->getField< uint16_t >( row, 7 ); } Sapphire::Data::GatheringPointBase::GatheringPointBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringPointBaseDat.get_row( row_id ); - gatheringType = exdData->getField< int32_t >( row, 0 ); - gatheringLevel = exdData->getField< uint8_t >( row, 1 ); - item.push_back( exdData->getField< int32_t >( row, 2 ) ); - item.push_back( exdData->getField< int32_t >( row, 3 ) ); - item.push_back( exdData->getField< int32_t >( row, 4 ) ); - item.push_back( exdData->getField< int32_t >( row, 5 ) ); - item.push_back( exdData->getField< int32_t >( row, 6 ) ); - item.push_back( exdData->getField< int32_t >( row, 7 ) ); - item.push_back( exdData->getField< int32_t >( row, 8 ) ); - item.push_back( exdData->getField< int32_t >( row, 9 ) ); - isLimited = exdData->getField< bool >( row, 10 ); + auto row = exdData->m_GatheringPointBaseDat.get_row( row_id ); + gatheringType = exdData->getField< int32_t >( row, 0 ); + gatheringLevel = exdData->getField< uint8_t >( row, 1 ); + item.push_back( exdData->getField< int32_t >( row, 2 ) ); + item.push_back( exdData->getField< int32_t >( row, 3 ) ); + item.push_back( exdData->getField< int32_t >( row, 4 ) ); + item.push_back( exdData->getField< int32_t >( row, 5 ) ); + item.push_back( exdData->getField< int32_t >( row, 6 ) ); + item.push_back( exdData->getField< int32_t >( row, 7 ) ); + item.push_back( exdData->getField< int32_t >( row, 8 ) ); + item.push_back( exdData->getField< int32_t >( row, 9 ) ); + isLimited = exdData->getField< bool >( row, 10 ); } Sapphire::Data::GatheringPointBonus::GatheringPointBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringPointBonusDat.get_row( row_id ); - condition = exdData->getField< uint8_t >( row, 0 ); - conditionValue = exdData->getField< uint16_t >( row, 1 ); - bonusType = exdData->getField< uint8_t >( row, 3 ); - bonusValue = exdData->getField< uint16_t >( row, 4 ); + auto row = exdData->m_GatheringPointBonusDat.get_row( row_id ); + condition = exdData->getField< uint8_t >( row, 0 ); + conditionValue = exdData->getField< uint32_t >( row, 1 ); + bonusType = exdData->getField< uint8_t >( row, 3 ); + bonusValue = exdData->getField< uint16_t >( row, 4 ); + addedIn53 = exdData->getField< bool >( row, 6 ); } Sapphire::Data::GatheringPointBonusType::GatheringPointBonusType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringPointBonusTypeDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_GatheringPointBonusTypeDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GatheringPointName::GatheringPointName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringPointNameDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); + auto row = exdData->m_GatheringPointNameDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); +} + +Sapphire::Data::GatheringPointTransient::GatheringPointTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GatheringPointTransientDat.get_row( row_id ); + ephemeralStartTime = exdData->getField< uint16_t >( row, 0 ); + ephemeralEndTime = exdData->getField< uint16_t >( row, 1 ); + gatheringRarePopTimeTable = exdData->getField< int32_t >( row, 2 ); +} + +Sapphire::Data::GatheringRarePopTimeTable::GatheringRarePopTimeTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GatheringRarePopTimeTableDat.get_row( row_id ); } Sapphire::Data::GatheringSubCategory::GatheringSubCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringSubCategoryDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 4 ); - folkloreBook = exdData->getField< std::string >( row, 5 ); + auto row = exdData->m_GatheringSubCategoryDat.get_row( row_id ); + gatheringType = exdData->getField< uint8_t >( row, 0 ); + classJob = exdData->getField< uint8_t >( row, 1 ); + division = exdData->getField< uint16_t >( row, 3 ); + item = exdData->getField< int32_t >( row, 4 ); + folkloreBook = exdData->getField< std::string >( row, 5 ); } Sapphire::Data::GatheringType::GatheringType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GatheringTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - iconMain = exdData->getField< int32_t >( row, 1 ); - iconOff = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_GatheringTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + iconMain = exdData->getField< int32_t >( row, 1 ); + iconOff = exdData->getField< int32_t >( row, 2 ); } Sapphire::Data::GcArmyCaptureTactics::GcArmyCaptureTactics( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GcArmyCaptureTacticsDat.get_row( row_id ); - name = exdData->getField< int32_t >( row, 0 ); - hP = exdData->getField< uint8_t >( row, 1 ); - damageDealt = exdData->getField< uint8_t >( row, 2 ); - damageReceived = exdData->getField< uint8_t >( row, 3 ); - tactic = exdData->getField< uint32_t >( row, 4 ); - icon = exdData->getField< uint32_t >( row, 5 ); + auto row = exdData->m_GcArmyCaptureTacticsDat.get_row( row_id ); + name = exdData->getField< int32_t >( row, 0 ); + hP = exdData->getField< uint8_t >( row, 1 ); + damageDealt = exdData->getField< uint8_t >( row, 2 ); + damageReceived = exdData->getField< uint8_t >( row, 3 ); + tactic = exdData->getField< uint32_t >( row, 4 ); + icon = exdData->getField< uint32_t >( row, 5 ); } Sapphire::Data::GcArmyExpedition::GcArmyExpedition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GcArmyExpeditionDat.get_row( row_id ); - requiredFlag = exdData->getField< uint8_t >( row, 0 ); - unlockFlag = exdData->getField< uint8_t >( row, 1 ); - requiredLevel = exdData->getField< uint8_t >( row, 2 ); - requiredSeals = exdData->getField< uint16_t >( row, 3 ); - rewardExperience = exdData->getField< uint32_t >( row, 4 ); - percentBase = exdData->getField< uint8_t >( row, 5 ); - gcArmyExpeditionType = exdData->getField< uint8_t >( row, 7 ); - name = exdData->getField< std::string >( row, 8 ); - description = exdData->getField< std::string >( row, 9 ); + auto row = exdData->m_GcArmyExpeditionDat.get_row( row_id ); + requiredFlag = exdData->getField< uint8_t >( row, 0 ); + unlockFlag = exdData->getField< uint8_t >( row, 1 ); + requiredLevel = exdData->getField< uint8_t >( row, 2 ); + requiredSeals = exdData->getField< uint16_t >( row, 3 ); + rewardExperience = exdData->getField< uint32_t >( row, 4 ); + percentBase = exdData->getField< uint8_t >( row, 5 ); + gcArmyExpeditionType = exdData->getField< uint8_t >( row, 7 ); + name = exdData->getField< std::string >( row, 8 ); + description = exdData->getField< std::string >( row, 9 ); } Sapphire::Data::GcArmyExpeditionMemberBonus::GcArmyExpeditionMemberBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GcArmyExpeditionMemberBonusDat.get_row( row_id ); - race = exdData->getField< uint8_t >( row, 0 ); - classJob = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_GcArmyExpeditionMemberBonusDat.get_row( row_id ); + race = exdData->getField< uint8_t >( row, 0 ); + classJob = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::GcArmyExpeditionType::GcArmyExpeditionType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GcArmyExpeditionTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_GcArmyExpeditionTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GcArmyMemberGrow::GcArmyMemberGrow( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GcArmyMemberGrowDat.get_row( row_id ); - classJob = exdData->getField< uint8_t >( row, 0 ); - classBook = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_GcArmyMemberGrowDat.get_row( row_id ); + classJob = exdData->getField< uint8_t >( row, 0 ); + classBook = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::GcArmyTraining::GcArmyTraining( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GcArmyTrainingDat.get_row( row_id ); - physicalBonus = exdData->getField< int8_t >( row, 0 ); - mentalBonus = exdData->getField< int8_t >( row, 1 ); - tacticalBonus = exdData->getField< int8_t >( row, 2 ); - experience = exdData->getField< uint32_t >( row, 3 ); - name = exdData->getField< std::string >( row, 4 ); - description = exdData->getField< std::string >( row, 5 ); + auto row = exdData->m_GcArmyTrainingDat.get_row( row_id ); + physicalBonus = exdData->getField< int8_t >( row, 0 ); + mentalBonus = exdData->getField< int8_t >( row, 1 ); + tacticalBonus = exdData->getField< int8_t >( row, 2 ); + experience = exdData->getField< uint32_t >( row, 3 ); + name = exdData->getField< std::string >( row, 4 ); + description = exdData->getField< std::string >( row, 5 ); } Sapphire::Data::GCRankGridaniaFemaleText::GCRankGridaniaFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCRankGridaniaFemaleTextDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - nameRank = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_GCRankGridaniaFemaleTextDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + nameRank = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::GCRankGridaniaMaleText::GCRankGridaniaMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCRankGridaniaMaleTextDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - nameRank = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_GCRankGridaniaMaleTextDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + nameRank = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::GCRankLimsaFemaleText::GCRankLimsaFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCRankLimsaFemaleTextDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - nameRank = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_GCRankLimsaFemaleTextDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + nameRank = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::GCRankLimsaMaleText::GCRankLimsaMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCRankLimsaMaleTextDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - nameRank = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_GCRankLimsaMaleTextDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + nameRank = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::GCRankUldahFemaleText::GCRankUldahFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCRankUldahFemaleTextDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - nameRank = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_GCRankUldahFemaleTextDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + nameRank = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::GCRankUldahMaleText::GCRankUldahMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCRankUldahMaleTextDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - nameRank = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_GCRankUldahMaleTextDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + nameRank = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::GCScripShopCategory::GCScripShopCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCScripShopCategoryDat.get_row( row_id ); - grandCompany = exdData->getField< int8_t >( row, 0 ); - tier = exdData->getField< int8_t >( row, 1 ); - subCategory = exdData->getField< int8_t >( row, 2 ); + auto row = exdData->m_GCScripShopCategoryDat.get_row( row_id ); + grandCompany = exdData->getField< int8_t >( row, 0 ); + tier = exdData->getField< int8_t >( row, 1 ); + subCategory = exdData->getField< int8_t >( row, 2 ); } Sapphire::Data::GCScripShopItem::GCScripShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCScripShopItemDat.get_row( row_id, subRow ); - item = exdData->getField< int32_t >( row, 0 ); - requiredGrandCompanyRank = exdData->getField< int32_t >( row, 1 ); - costGCSeals = exdData->getField< uint32_t >( row, 2 ); - sortKey = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_GCScripShopItemDat.get_row( row_id, subRow ); + item = exdData->getField< int32_t >( row, 0 ); + requiredGrandCompanyRank = exdData->getField< int32_t >( row, 1 ); + costGCSeals = exdData->getField< uint32_t >( row, 2 ); + sortKey = exdData->getField< uint8_t >( row, 3 ); } Sapphire::Data::GCShop::GCShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCShopDat.get_row( row_id ); - grandCompany = exdData->getField< int8_t >( row, 0 ); + auto row = exdData->m_GCShopDat.get_row( row_id ); + grandCompany = exdData->getField< int8_t >( row, 0 ); } Sapphire::Data::GCShopItemCategory::GCShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCShopItemCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_GCShopItemCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GCSupplyDuty::GCSupplyDuty( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCSupplyDutyDat.get_row( row_id ); + auto row = exdData->m_GCSupplyDutyDat.get_row( row_id ); } Sapphire::Data::GCSupplyDutyReward::GCSupplyDutyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GCSupplyDutyRewardDat.get_row( row_id ); - experienceSupply = exdData->getField< uint32_t >( row, 0 ); - experienceProvisioning = exdData->getField< uint32_t >( row, 1 ); - sealsExpertDelivery = exdData->getField< uint32_t >( row, 2 ); - sealsSupply = exdData->getField< uint32_t >( row, 3 ); - sealsProvisioning = exdData->getField< uint32_t >( row, 4 ); + auto row = exdData->m_GCSupplyDutyRewardDat.get_row( row_id ); + experienceSupply = exdData->getField< uint32_t >( row, 0 ); + experienceProvisioning = exdData->getField< uint32_t >( row, 1 ); + sealsExpertDelivery = exdData->getField< uint32_t >( row, 2 ); + sealsSupply = exdData->getField< uint32_t >( row, 3 ); + sealsProvisioning = exdData->getField< uint32_t >( row, 4 ); } Sapphire::Data::GeneralAction::GeneralAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GeneralActionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - action = exdData->getField< uint16_t >( row, 3 ); - unlockLink = exdData->getField< uint16_t >( row, 4 ); - icon = exdData->getField< int32_t >( row, 7 ); + auto row = exdData->m_GeneralActionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + action = exdData->getField< uint16_t >( row, 3 ); + unlockLink = exdData->getField< uint16_t >( row, 4 ); + recast = exdData->getField< uint8_t >( row, 5 ); + uIPriority = exdData->getField< uint8_t >( row, 6 ); + icon = exdData->getField< int32_t >( row, 7 ); } Sapphire::Data::GFATE::GFATE( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GFATEDat.get_row( row_id ); - icon.push_back( exdData->getField< uint32_t >( row, 22 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 23 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 24 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 25 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 26 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 27 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 28 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 29 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 30 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 31 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 32 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 33 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 34 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 35 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 36 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 37 ) ); + auto row = exdData->m_GFATEDat.get_row( row_id ); + icon.push_back( exdData->getField< uint32_t >( row, 22 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 23 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 24 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 25 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 26 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 27 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 28 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 29 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 30 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 31 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 32 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 33 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 34 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 35 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 36 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 37 ) ); } Sapphire::Data::GFateClimbing2::GFateClimbing2( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GFateClimbing2Dat.get_row( row_id ); - contentEntry = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_GFateClimbing2Dat.get_row( row_id ); + contentEntry = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::GFateClimbing2Content::GFateClimbing2Content( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GFateClimbing2ContentDat.get_row( row_id ); - publicContentTextData = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_GFateClimbing2ContentDat.get_row( row_id ); + publicContentTextData = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::GFateClimbing2TotemType::GFateClimbing2TotemType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GFateClimbing2TotemTypeDat.get_row( row_id ); - publicContentTextData = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_GFateClimbing2TotemTypeDat.get_row( row_id ); + publicContentTextData = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::GFateRideShooting::GFateRideShooting( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GFateRideShootingDat.get_row( row_id ); - contentEntry = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_GFateRideShootingDat.get_row( row_id ); + contentEntry = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::GilShop::GilShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GilShopDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< uint32_t >( row, 1 ); - questRequired.push_back( exdData->getField< uint32_t >( row, 2 ) ); - questRequired.push_back( exdData->getField< uint32_t >( row, 3 ) ); - questRequired.push_back( exdData->getField< uint32_t >( row, 4 ) ); - questRequired.push_back( exdData->getField< uint32_t >( row, 5 ) ); - acceptTalk = exdData->getField< int32_t >( row, 6 ); - failTalk = exdData->getField< int32_t >( row, 7 ); + auto row = exdData->m_GilShopDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + quest = exdData->getField< uint32_t >( row, 2 ); + acceptTalk = exdData->getField< int32_t >( row, 3 ); + failTalk = exdData->getField< int32_t >( row, 4 ); } Sapphire::Data::GilShopItem::GilShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GilShopItemDat.get_row( row_id, subRow ); - item = exdData->getField< int32_t >( row, 0 ); - rowRequired.push_back( exdData->getField< int32_t >( row, 3 ) ); - rowRequired.push_back( exdData->getField< int32_t >( row, 4 ) ); - rowRequired.push_back( exdData->getField< int32_t >( row, 5 ) ); - stateRequired = exdData->getField< uint16_t >( row, 7 ); - patch = exdData->getField< uint16_t >( row, 8 ); + auto row = exdData->m_GilShopItemDat.get_row( row_id, subRow ); + item = exdData->getField< int32_t >( row, 0 ); + rowRequired.push_back( exdData->getField< int32_t >( row, 3 ) ); + rowRequired.push_back( exdData->getField< int32_t >( row, 4 ) ); + rowRequired.push_back( exdData->getField< int32_t >( row, 5 ) ); + stateRequired = exdData->getField< uint16_t >( row, 7 ); + patch = exdData->getField< uint16_t >( row, 8 ); +} + +Sapphire::Data::GimmickAccessor::GimmickAccessor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GimmickAccessorDat.get_row( row_id ); + param0 = exdData->getField< int32_t >( row, 0 ); + param1 = exdData->getField< uint32_t >( row, 1 ); + param2 = exdData->getField< uint32_t >( row, 2 ); + type = exdData->getField< uint32_t >( row, 3 ); +} + +Sapphire::Data::GimmickJump::GimmickJump( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GimmickJumpDat.get_row( row_id ); + fallDamage = exdData->getField< uint16_t >( row, 0 ); + height = exdData->getField< int8_t >( row, 1 ); + loopMotion = exdData->getField< uint32_t >( row, 2 ); + endMotion = exdData->getField< uint32_t >( row, 3 ); + startClient = exdData->getField< bool >( row, 4 ); +} + +Sapphire::Data::GimmickRect::GimmickRect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GimmickRectDat.get_row( row_id ); + layoutID = exdData->getField< uint32_t >( row, 0 ); + triggerIn = exdData->getField< uint8_t >( row, 1 ); + param0 = exdData->getField< uint32_t >( row, 2 ); + triggerOut = exdData->getField< uint8_t >( row, 6 ); + param1 = exdData->getField< uint32_t >( row, 7 ); } Sapphire::Data::GoldSaucerArcadeMachine::GoldSaucerArcadeMachine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GoldSaucerArcadeMachineDat.get_row( row_id ); - failImage = exdData->getField< uint32_t >( row, 6 ); - poor = exdData->getField< uint32_t >( row, 35 ); - good = exdData->getField< uint32_t >( row, 36 ); - great = exdData->getField< uint32_t >( row, 37 ); - excellent = exdData->getField< uint32_t >( row, 38 ); + auto row = exdData->m_GoldSaucerArcadeMachineDat.get_row( row_id ); + failImage = exdData->getField< uint32_t >( row, 6 ); + poor = exdData->getField< uint32_t >( row, 35 ); + good = exdData->getField< uint32_t >( row, 36 ); + great = exdData->getField< uint32_t >( row, 37 ); + excellent = exdData->getField< uint32_t >( row, 38 ); } Sapphire::Data::GoldSaucerTextData::GoldSaucerTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GoldSaucerTextDataDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_GoldSaucerTextDataDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GrandCompany::GrandCompany( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GrandCompanyDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_GrandCompanyDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GrandCompanyRank::GrandCompanyRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GrandCompanyRankDat.get_row( row_id ); - tier = exdData->getField< uint8_t >( row, 0 ); - order = exdData->getField< uint8_t >( row, 1 ); - maxSeals = exdData->getField< uint32_t >( row, 2 ); - requiredSeals = exdData->getField< uint32_t >( row, 3 ); - iconMaelstrom = exdData->getField< int32_t >( row, 4 ); - iconSerpents = exdData->getField< int32_t >( row, 5 ); - iconFlames = exdData->getField< int32_t >( row, 6 ); - questMaelstrom = exdData->getField< int32_t >( row, 7 ); - questSerpents = exdData->getField< int32_t >( row, 8 ); - questFlames = exdData->getField< int32_t >( row, 9 ); + auto row = exdData->m_GrandCompanyRankDat.get_row( row_id ); + tier = exdData->getField< uint8_t >( row, 0 ); + order = exdData->getField< uint8_t >( row, 1 ); + maxSeals = exdData->getField< uint32_t >( row, 2 ); + requiredSeals = exdData->getField< uint32_t >( row, 3 ); + iconMaelstrom = exdData->getField< int32_t >( row, 4 ); + iconSerpents = exdData->getField< int32_t >( row, 5 ); + iconFlames = exdData->getField< int32_t >( row, 6 ); + questMaelstrom = exdData->getField< int32_t >( row, 7 ); + questSerpents = exdData->getField< int32_t >( row, 8 ); + questFlames = exdData->getField< int32_t >( row, 9 ); +} + +Sapphire::Data::GroupPoseFrame::GroupPoseFrame( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GroupPoseFrameDat.get_row( row_id ); + image = exdData->getField< int32_t >( row, 1 ); + gridText = exdData->getField< std::string >( row, 2 ); + text = exdData->getField< std::string >( row, 6 ); +} + +Sapphire::Data::GroupPoseStamp::GroupPoseStamp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GroupPoseStampDat.get_row( row_id ); + stampIcon = exdData->getField< int32_t >( row, 0 ); + category = exdData->getField< int32_t >( row, 2 ); + name = exdData->getField< std::string >( row, 6 ); +} + +Sapphire::Data::GroupPoseStampCategory::GroupPoseStampCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GroupPoseStampCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::GuardianDeity::GuardianDeity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GuardianDeityDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_GuardianDeityDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< uint16_t >( row, 2 ); +} + +Sapphire::Data::Guide::Guide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuideDat.get_row( row_id ); + guideTitle = exdData->getField< uint16_t >( row, 0 ); + guidePage = exdData->getField< uint16_t >( row, 1 ); +} + +Sapphire::Data::GuidePage::GuidePage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuidePageDat.get_row( row_id, subRow ); + key = exdData->getField< uint8_t >( row, 0 ); + output = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::GuidePageString::GuidePageString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuidePageStringDat.get_row( row_id ); + string = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::GuideTitle::GuideTitle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuideTitleDat.get_row( row_id ); + title = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::GuildleveAssignment::GuildleveAssignment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GuildleveAssignmentDat.get_row( row_id ); - assignmentTalk = exdData->getField< uint32_t >( row, 1 ); - quest.push_back( exdData->getField< uint32_t >( row, 2 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 3 ) ); + auto row = exdData->m_GuildleveAssignmentDat.get_row( row_id ); + addedIn53 = exdData->getField< uint8_t >( row, 1 ); + assignmentTalk = exdData->getField< uint32_t >( row, 2 ); + quest.push_back( exdData->getField< uint32_t >( row, 3 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 4 ) ); } Sapphire::Data::GuildleveAssignmentCategory::GuildleveAssignmentCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GuildleveAssignmentCategoryDat.get_row( row_id ); - category.push_back( exdData->getField< int32_t >( row, 0 ) ); - category.push_back( exdData->getField< int32_t >( row, 1 ) ); - category.push_back( exdData->getField< int32_t >( row, 2 ) ); - category.push_back( exdData->getField< int32_t >( row, 3 ) ); - category.push_back( exdData->getField< int32_t >( row, 4 ) ); - category.push_back( exdData->getField< int32_t >( row, 5 ) ); - category.push_back( exdData->getField< int32_t >( row, 6 ) ); - category.push_back( exdData->getField< int32_t >( row, 7 ) ); + auto row = exdData->m_GuildleveAssignmentCategoryDat.get_row( row_id ); + category.push_back( exdData->getField< int32_t >( row, 0 ) ); + category.push_back( exdData->getField< int32_t >( row, 1 ) ); + category.push_back( exdData->getField< int32_t >( row, 2 ) ); + category.push_back( exdData->getField< int32_t >( row, 3 ) ); + category.push_back( exdData->getField< int32_t >( row, 4 ) ); + category.push_back( exdData->getField< int32_t >( row, 5 ) ); + category.push_back( exdData->getField< int32_t >( row, 6 ) ); + category.push_back( exdData->getField< int32_t >( row, 7 ) ); +} + +Sapphire::Data::GuildOrder::GuildOrder( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuildOrderDat.get_row( row_id ); + eNpcName = exdData->getField< uint32_t >( row, 0 ); + objective = exdData->getField< std::string >( row, 1 ); + description1 = exdData->getField< std::string >( row, 2 ); + description2 = exdData->getField< std::string >( row, 3 ); + description3 = exdData->getField< std::string >( row, 4 ); + completionBonusExp = exdData->getField< uint32_t >( row, 5 ); + rewardExp = exdData->getField< uint32_t >( row, 6 ); + completionBonusGil = exdData->getField< uint32_t >( row, 7 ); + rewardGil = exdData->getField< uint32_t >( row, 8 ); } Sapphire::Data::GuildOrderGuide::GuildOrderGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GuildOrderGuideDat.get_row( row_id ); + auto row = exdData->m_GuildOrderGuideDat.get_row( row_id ); } Sapphire::Data::GuildOrderOfficer::GuildOrderOfficer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_GuildOrderOfficerDat.get_row( row_id ); + auto row = exdData->m_GuildOrderOfficerDat.get_row( row_id ); } Sapphire::Data::HairMakeType::HairMakeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HairMakeTypeDat.get_row( row_id ); - race = exdData->getField< int32_t >( row, 0 ); - tribe = exdData->getField< int32_t >( row, 1 ); - gender = exdData->getField< int8_t >( row, 2 ); + auto row = exdData->m_HairMakeTypeDat.get_row( row_id ); + race = exdData->getField< int32_t >( row, 0 ); + tribe = exdData->getField< int32_t >( row, 1 ); + gender = exdData->getField< int8_t >( row, 2 ); } Sapphire::Data::HouseRetainerPose::HouseRetainerPose( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HouseRetainerPoseDat.get_row( row_id ); - actionTimeline = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_HouseRetainerPoseDat.get_row( row_id ); + actionTimeline = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::HousingAethernet::HousingAethernet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingAethernetDat.get_row( row_id ); - level = exdData->getField< uint32_t >( row, 0 ); - territoryType = exdData->getField< uint16_t >( row, 1 ); - placeName = exdData->getField< uint16_t >( row, 2 ); - order = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_HousingAethernetDat.get_row( row_id ); + level = exdData->getField< uint32_t >( row, 0 ); + territoryType = exdData->getField< uint16_t >( row, 1 ); + placeName = exdData->getField< uint16_t >( row, 2 ); + order = exdData->getField< uint8_t >( row, 3 ); } Sapphire::Data::HousingAppeal::HousingAppeal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingAppealDat.get_row( row_id ); - tag = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< uint32_t >( row, 1 ); - order = exdData->getField< uint8_t >( row, 2 ); + auto row = exdData->m_HousingAppealDat.get_row( row_id ); + tag = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + order = exdData->getField< uint8_t >( row, 2 ); } Sapphire::Data::HousingEmploymentNpcList::HousingEmploymentNpcList( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingEmploymentNpcListDat.get_row( row_id, subRow ); - race = exdData->getField< uint8_t >( row, 0 ); - eNpcBase.push_back( exdData->getField< uint32_t >( row, 1 ) ); - eNpcBase.push_back( exdData->getField< uint32_t >( row, 2 ) ); + auto row = exdData->m_HousingEmploymentNpcListDat.get_row( row_id, subRow ); + race = exdData->getField< uint8_t >( row, 0 ); + eNpcBase.push_back( exdData->getField< uint32_t >( row, 1 ) ); + eNpcBase.push_back( exdData->getField< uint32_t >( row, 2 ) ); } Sapphire::Data::HousingEmploymentNpcRace::HousingEmploymentNpcRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingEmploymentNpcRaceDat.get_row( row_id ); - race = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_HousingEmploymentNpcRaceDat.get_row( row_id ); + race = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::HousingExterior::HousingExterior( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingExteriorDat.get_row( row_id ); - placeName = exdData->getField< uint16_t >( row, 2 ); - housingSize = exdData->getField< uint8_t >( row, 3 ); - model = exdData->getField< std::string >( row, 4 ); + auto row = exdData->m_HousingExteriorDat.get_row( row_id ); + placeName = exdData->getField< uint16_t >( row, 2 ); + housingSize = exdData->getField< uint8_t >( row, 3 ); + model = exdData->getField< std::string >( row, 4 ); } Sapphire::Data::HousingFurniture::HousingFurniture( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingFurnitureDat.get_row( row_id ); - modelKey = exdData->getField< uint16_t >( row, 0 ); - housingItemCategory = exdData->getField< uint8_t >( row, 1 ); - usageType = exdData->getField< uint8_t >( row, 2 ); - usageParameter = exdData->getField< uint32_t >( row, 3 ); - housingLayoutLimit = exdData->getField< uint8_t >( row, 4 ); - aquariumTier = exdData->getField< uint8_t >( row, 5 ); - customTalk = exdData->getField< uint32_t >( row, 6 ); - item = exdData->getField< uint32_t >( row, 7 ); - destroyOnRemoval = exdData->getField< bool >( row, 8 ); - tooltip = exdData->getField< bool >( row, 9 ); -} - -Sapphire::Data::HousingMapMarkerInfo::HousingMapMarkerInfo( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_HousingMapMarkerInfoDat.get_row( row_id, subRow ); - x = exdData->getField< float >( row, 0 ); - y = exdData->getField< float >( row, 1 ); - z = exdData->getField< float >( row, 2 ); - plotNumberDistance = exdData->getField< float >( row, 3 ); - map = exdData->getField< uint16_t >( row, 4 ); -} - -Sapphire::Data::HousingMerchantPose::HousingMerchantPose( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_HousingMerchantPoseDat.get_row( row_id ); - actionTimeline = exdData->getField< uint16_t >( row, 0 ); - pose = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_HousingFurnitureDat.get_row( row_id ); + modelKey = exdData->getField< uint16_t >( row, 0 ); + housingItemCategory = exdData->getField< uint8_t >( row, 1 ); + usageType = exdData->getField< uint8_t >( row, 2 ); + usageParameter = exdData->getField< uint32_t >( row, 3 ); + aquariumTier = exdData->getField< uint8_t >( row, 5 ); + customTalk = exdData->getField< uint32_t >( row, 6 ); + item = exdData->getField< uint32_t >( row, 7 ); + destroyOnRemoval = exdData->getField< bool >( row, 8 ); + tooltip = exdData->getField< bool >( row, 9 ); } Sapphire::Data::HousingLandSet::HousingLandSet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingLandSetDat.get_row( row_id ); - plotSize.push_back( exdData->getField< uint8_t >( row, 0 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 1 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 2 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 3 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 4 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 5 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 6 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 7 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 8 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 9 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 10 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 11 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 12 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 13 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 14 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 15 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 16 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 17 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 18 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 19 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 20 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 21 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 22 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 23 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 24 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 25 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 26 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 27 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 28 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 29 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 30 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 31 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 32 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 33 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 34 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 35 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 36 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 37 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 38 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 39 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 40 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 41 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 42 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 43 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 44 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 45 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 46 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 47 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 48 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 49 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 50 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 51 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 52 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 53 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 54 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 55 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 56 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 57 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 58 ) ); - plotSize.push_back( exdData->getField< uint8_t >( row, 59 ) ); - for ( int i = 60; i < 60 + 60; i++ ) - minPrice.push_back( exdData->getField< uint32_t >( row, i ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 300 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 301 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 302 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 303 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 304 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 305 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 306 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 307 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 308 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 309 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 310 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 311 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 312 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 313 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 314 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 315 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 316 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 317 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 318 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 319 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 320 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 321 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 322 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 323 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 324 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 325 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 326 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 327 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 328 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 329 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 330 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 331 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 332 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 333 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 334 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 335 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 336 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 337 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 338 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 339 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 340 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 341 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 342 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 343 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 344 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 345 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 346 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 347 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 348 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 349 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 350 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 351 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 352 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 353 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 354 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 355 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 356 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 357 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 358 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 359 ) ); + auto row = exdData->m_HousingLandSetDat.get_row( row_id ); + plotSize.push_back( exdData->getField< uint8_t >( row, 0 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 1 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 2 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 3 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 4 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 5 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 6 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 7 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 8 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 9 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 10 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 11 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 12 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 13 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 14 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 15 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 16 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 17 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 18 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 19 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 20 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 21 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 22 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 23 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 24 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 25 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 26 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 27 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 28 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 29 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 30 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 31 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 32 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 33 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 34 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 35 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 36 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 37 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 38 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 39 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 40 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 41 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 42 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 43 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 44 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 45 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 46 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 47 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 48 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 49 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 50 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 51 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 52 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 53 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 54 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 55 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 56 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 57 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 58 ) ); + plotSize.push_back( exdData->getField< uint8_t >( row, 59 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 60 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 61 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 62 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 63 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 64 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 65 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 66 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 67 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 68 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 69 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 70 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 71 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 72 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 73 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 74 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 75 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 76 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 77 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 78 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 79 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 80 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 81 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 82 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 83 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 84 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 85 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 86 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 87 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 88 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 89 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 90 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 91 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 92 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 93 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 94 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 95 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 96 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 97 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 98 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 99 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 100 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 101 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 102 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 103 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 104 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 105 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 106 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 107 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 108 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 109 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 110 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 111 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 112 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 113 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 114 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 115 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 116 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 117 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 118 ) ); + minPrice.push_back( exdData->getField< uint32_t >( row, 119 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 240 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 241 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 242 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 243 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 244 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 245 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 246 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 247 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 248 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 249 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 250 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 251 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 252 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 253 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 254 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 255 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 256 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 257 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 258 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 259 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 260 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 261 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 262 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 263 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 264 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 265 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 266 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 267 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 268 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 269 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 270 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 271 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 272 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 273 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 274 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 275 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 276 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 277 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 278 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 279 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 280 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 281 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 282 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 283 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 284 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 285 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 286 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 287 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 288 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 289 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 290 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 291 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 292 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 293 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 294 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 295 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 296 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 297 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 298 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 299 ) ); +} + +Sapphire::Data::HousingMapMarkerInfo::HousingMapMarkerInfo( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HousingMapMarkerInfoDat.get_row( row_id, subRow ); + x = exdData->getField< float >( row, 0 ); + y = exdData->getField< float >( row, 1 ); + z = exdData->getField< float >( row, 2 ); + map = exdData->getField< uint16_t >( row, 4 ); +} + +Sapphire::Data::HousingMerchantPose::HousingMerchantPose( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HousingMerchantPoseDat.get_row( row_id ); + actionTimeline = exdData->getField< uint16_t >( row, 0 ); + pose = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::HousingPlacement::HousingPlacement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingPlacementDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_HousingPlacementDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::HousingPreset::HousingPreset( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingPresetDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - placeName = exdData->getField< uint16_t >( row, 8 ); - housingSize = exdData->getField< uint8_t >( row, 9 ); - exteriorRoof = exdData->getField< int32_t >( row, 10 ); - exteriorWall = exdData->getField< int32_t >( row, 11 ); - exteriorWindow = exdData->getField< int32_t >( row, 12 ); - exteriorDoor = exdData->getField< int32_t >( row, 13 ); - interiorWall = exdData->getField< int32_t >( row, 14 ); - interiorFlooring = exdData->getField< int32_t >( row, 15 ); - interiorLighting = exdData->getField< int32_t >( row, 16 ); - otherFloorWall = exdData->getField< int32_t >( row, 17 ); - otherFloorFlooring = exdData->getField< int32_t >( row, 18 ); - otherFloorLighting = exdData->getField< int32_t >( row, 19 ); - basementWall = exdData->getField< int32_t >( row, 20 ); - basementFlooring = exdData->getField< int32_t >( row, 21 ); - basementLighting = exdData->getField< int32_t >( row, 22 ); - mansionLighting = exdData->getField< int32_t >( row, 23 ); + auto row = exdData->m_HousingPresetDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + placeName = exdData->getField< uint16_t >( row, 8 ); + housingSize = exdData->getField< uint8_t >( row, 9 ); + exteriorRoof = exdData->getField< int32_t >( row, 10 ); + exteriorWall = exdData->getField< int32_t >( row, 11 ); + exteriorWindow = exdData->getField< int32_t >( row, 12 ); + exteriorDoor = exdData->getField< int32_t >( row, 13 ); + interiorWall = exdData->getField< int32_t >( row, 14 ); + interiorFlooring = exdData->getField< int32_t >( row, 15 ); + interiorLighting = exdData->getField< int32_t >( row, 16 ); + otherFloorWall = exdData->getField< int32_t >( row, 17 ); + otherFloorFlooring = exdData->getField< int32_t >( row, 18 ); + otherFloorLighting = exdData->getField< int32_t >( row, 19 ); + basementWall = exdData->getField< int32_t >( row, 20 ); + basementFlooring = exdData->getField< int32_t >( row, 21 ); + basementLighting = exdData->getField< int32_t >( row, 22 ); + mansionLighting = exdData->getField< int32_t >( row, 23 ); } Sapphire::Data::HousingUnitedExterior::HousingUnitedExterior( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingUnitedExteriorDat.get_row( row_id ); - item.push_back( exdData->getField< uint32_t >( row, 1 ) ); - item.push_back( exdData->getField< uint32_t >( row, 2 ) ); - item.push_back( exdData->getField< uint32_t >( row, 3 ) ); - item.push_back( exdData->getField< uint32_t >( row, 4 ) ); - item.push_back( exdData->getField< uint32_t >( row, 5 ) ); - item.push_back( exdData->getField< uint32_t >( row, 6 ) ); - item.push_back( exdData->getField< uint32_t >( row, 7 ) ); - item.push_back( exdData->getField< uint32_t >( row, 8 ) ); + auto row = exdData->m_HousingUnitedExteriorDat.get_row( row_id ); + item.push_back( exdData->getField< uint32_t >( row, 1 ) ); + item.push_back( exdData->getField< uint32_t >( row, 2 ) ); + item.push_back( exdData->getField< uint32_t >( row, 3 ) ); + item.push_back( exdData->getField< uint32_t >( row, 4 ) ); + item.push_back( exdData->getField< uint32_t >( row, 5 ) ); + item.push_back( exdData->getField< uint32_t >( row, 6 ) ); + item.push_back( exdData->getField< uint32_t >( row, 7 ) ); + item.push_back( exdData->getField< uint32_t >( row, 8 ) ); } Sapphire::Data::HousingYardObject::HousingYardObject( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HousingYardObjectDat.get_row( row_id ); - modelKey = exdData->getField< uint8_t >( row, 0 ); - housingItemCategory = exdData->getField< uint8_t >( row, 1 ); - usageType = exdData->getField< uint8_t >( row, 2 ); - usageParameter = exdData->getField< uint32_t >( row, 3 ); - housingLayoutLimit = exdData->getField< uint8_t >( row, 4 ); - customTalk = exdData->getField< uint32_t >( row, 5 ); - item = exdData->getField< uint32_t >( row, 6 ); - destroyOnRemoval = exdData->getField< bool >( row, 7 ); + auto row = exdData->m_HousingYardObjectDat.get_row( row_id ); + modelKey = exdData->getField< uint8_t >( row, 0 ); + housingItemCategory = exdData->getField< uint8_t >( row, 1 ); + usageType = exdData->getField< uint8_t >( row, 2 ); + usageParameter = exdData->getField< uint32_t >( row, 3 ); + customTalk = exdData->getField< uint32_t >( row, 5 ); + item = exdData->getField< uint32_t >( row, 6 ); + destroyOnRemoval = exdData->getField< bool >( row, 7 ); } Sapphire::Data::HowTo::HowTo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HowToDat.get_row( row_id ); - images.push_back( exdData->getField< int16_t >( row, 2 ) ); - images.push_back( exdData->getField< int16_t >( row, 3 ) ); - images.push_back( exdData->getField< int16_t >( row, 4 ) ); - images.push_back( exdData->getField< int16_t >( row, 5 ) ); - images.push_back( exdData->getField< int16_t >( row, 6 ) ); - images.push_back( exdData->getField< int16_t >( row, 7 ) ); - images.push_back( exdData->getField< int16_t >( row, 8 ) ); - images.push_back( exdData->getField< int16_t >( row, 9 ) ); - images.push_back( exdData->getField< int16_t >( row, 10 ) ); - images.push_back( exdData->getField< int16_t >( row, 11 ) ); - category = exdData->getField< int8_t >( row, 12 ); + auto row = exdData->m_HowToDat.get_row( row_id ); + images.push_back( exdData->getField< int16_t >( row, 2 ) ); + images.push_back( exdData->getField< int16_t >( row, 3 ) ); + images.push_back( exdData->getField< int16_t >( row, 4 ) ); + images.push_back( exdData->getField< int16_t >( row, 5 ) ); + images.push_back( exdData->getField< int16_t >( row, 6 ) ); + images.push_back( exdData->getField< int16_t >( row, 7 ) ); + images.push_back( exdData->getField< int16_t >( row, 8 ) ); + images.push_back( exdData->getField< int16_t >( row, 9 ) ); + images.push_back( exdData->getField< int16_t >( row, 10 ) ); + images.push_back( exdData->getField< int16_t >( row, 11 ) ); + category = exdData->getField< int8_t >( row, 12 ); } Sapphire::Data::HowToCategory::HowToCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HowToCategoryDat.get_row( row_id ); - category = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_HowToCategoryDat.get_row( row_id ); + category = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::HowToPage::HowToPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_HowToPageDat.get_row( row_id ); - image = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_HowToPageDat.get_row( row_id ); + image = exdData->getField< int32_t >( row, 2 ); +} + +Sapphire::Data::HugeCraftworksNpc::HugeCraftworksNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HugeCraftworksNpcDat.get_row( row_id ); + eNpcResident = exdData->getField< uint32_t >( row, 0 ); + classJobCategory = exdData->getField< uint16_t >( row, 1 ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 3 ) ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 4 ) ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 5 ) ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 6 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 9 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 10 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 11 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 12 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 52 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 53 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 54 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 55 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 64 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 65 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 66 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 67 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 70 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 71 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 72 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 73 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 82 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 83 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 84 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 85 ) ); + transient = exdData->getField< std::string >( row, 86 ); +} + +Sapphire::Data::HugeCraftworksRank::HugeCraftworksRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HugeCraftworksRankDat.get_row( row_id ); + crafterLevel = exdData->getField< uint8_t >( row, 0 ); + expRewardPerItem = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::HWDAnnounce::HWDAnnounce( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDAnnounceDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + eNPC = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::HWDCrafterSupply::HWDCrafterSupply( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDCrafterSupplyDat.get_row( row_id ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 0 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 1 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 2 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 3 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 4 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 5 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 6 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 7 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 8 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 9 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 10 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 11 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 12 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 13 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 14 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 15 ) ); + itemTradeIn.push_back( exdData->getField< uint32_t >( row, 16 ) ); + level.push_back( exdData->getField< uint8_t >( row, 17 ) ); + level.push_back( exdData->getField< uint8_t >( row, 18 ) ); + level.push_back( exdData->getField< uint8_t >( row, 19 ) ); + level.push_back( exdData->getField< uint8_t >( row, 20 ) ); + level.push_back( exdData->getField< uint8_t >( row, 21 ) ); + level.push_back( exdData->getField< uint8_t >( row, 22 ) ); + level.push_back( exdData->getField< uint8_t >( row, 23 ) ); + level.push_back( exdData->getField< uint8_t >( row, 24 ) ); + level.push_back( exdData->getField< uint8_t >( row, 25 ) ); + level.push_back( exdData->getField< uint8_t >( row, 26 ) ); + level.push_back( exdData->getField< uint8_t >( row, 27 ) ); + level.push_back( exdData->getField< uint8_t >( row, 28 ) ); + level.push_back( exdData->getField< uint8_t >( row, 29 ) ); + level.push_back( exdData->getField< uint8_t >( row, 30 ) ); + level.push_back( exdData->getField< uint8_t >( row, 31 ) ); + level.push_back( exdData->getField< uint8_t >( row, 32 ) ); + level.push_back( exdData->getField< uint8_t >( row, 33 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 34 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 35 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 36 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 37 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 38 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 39 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 40 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 41 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 42 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 43 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 44 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 45 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 46 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 47 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 48 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 49 ) ); + levelMax.push_back( exdData->getField< uint8_t >( row, 50 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 68 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 69 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 70 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 71 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 72 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 73 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 74 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 75 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 76 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 77 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 78 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 79 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 80 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 81 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 82 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 83 ) ); + baseCollectableRating.push_back( exdData->getField< uint16_t >( row, 84 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 85 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 86 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 87 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 88 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 89 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 90 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 91 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 92 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 93 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 94 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 95 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 96 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 97 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 98 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 99 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 100 ) ); + midCollectableRating.push_back( exdData->getField< uint16_t >( row, 101 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 102 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 103 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 104 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 105 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 106 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 107 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 108 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 109 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 110 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 111 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 112 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 113 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 114 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 115 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 116 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 117 ) ); + highCollectableRating.push_back( exdData->getField< uint16_t >( row, 118 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 119 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 120 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 121 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 122 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 123 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 124 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 125 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 126 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 127 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 128 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 129 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 130 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 131 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 132 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 133 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 134 ) ); + baseCollectableReward.push_back( exdData->getField< uint16_t >( row, 135 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 136 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 137 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 138 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 139 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 140 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 141 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 142 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 143 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 144 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 145 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 146 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 147 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 148 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 149 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 150 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 151 ) ); + midCollectableReward.push_back( exdData->getField< uint16_t >( row, 152 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 153 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 154 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 155 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 156 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 157 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 158 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 159 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 160 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 161 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 162 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 163 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 164 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 165 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 166 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 167 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 168 ) ); + highCollectableReward.push_back( exdData->getField< uint16_t >( row, 169 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 221 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 222 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 223 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 224 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 225 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 226 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 227 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 228 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 229 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 230 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 231 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 232 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 233 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 234 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 235 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 236 ) ); + termName.push_back( exdData->getField< uint8_t >( row, 237 ) ); +} + +Sapphire::Data::HWDCrafterSupplyReward::HWDCrafterSupplyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDCrafterSupplyRewardDat.get_row( row_id ); + scriptRewardAmount = exdData->getField< uint16_t >( row, 0 ); + expReward = exdData->getField< uint32_t >( row, 1 ); + Points = exdData->getField< uint16_t >( row, 2 ); +} + +Sapphire::Data::HWDDevLayerControl::HWDDevLayerControl( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDDevLayerControlDat.get_row( row_id ); +} + +Sapphire::Data::HWDDevLevelUI::HWDDevLevelUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDDevLevelUIDat.get_row( row_id ); +} + +Sapphire::Data::HWDDevLively::HWDDevLively( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDDevLivelyDat.get_row( row_id, subRow ); + eNPC = exdData->getField< uint32_t >( row, 0 ); +} + +Sapphire::Data::HWDDevProgress::HWDDevProgress( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDDevProgressDat.get_row( row_id ); + canGoNext = exdData->getField< bool >( row, 0 ); +} + +Sapphire::Data::HWDGathereInspectTerm::HWDGathereInspectTerm( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDGathereInspectTermDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::HWDGathererInspection::HWDGathererInspection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDGathererInspectionDat.get_row( row_id ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 0 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 1 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 2 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 3 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 4 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 5 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 6 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 7 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 8 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 9 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 10 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 11 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 12 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 13 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 14 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 15 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 16 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 17 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 18 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 19 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 20 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 21 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 22 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 23 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 24 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 25 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 26 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 27 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 28 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 29 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 30 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 31 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 32 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 33 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 34 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 35 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 36 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 37 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 38 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 39 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 40 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 41 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 42 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 43 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 44 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 45 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 46 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 47 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 48 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 49 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 50 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 51 ) ); + itemRequired.push_back( exdData->getField< uint32_t >( row, 52 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 53 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 54 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 55 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 56 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 57 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 58 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 59 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 60 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 61 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 62 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 63 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 64 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 65 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 66 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 67 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 68 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 69 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 70 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 71 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 72 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 73 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 74 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 75 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 76 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 77 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 78 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 79 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 80 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 81 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 82 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 83 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 84 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 85 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 86 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 87 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 88 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 89 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 90 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 91 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 92 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 93 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 94 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 95 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 96 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 97 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 98 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 99 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 100 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 101 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 102 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 103 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 104 ) ); + fishParameter.push_back( exdData->getField< uint32_t >( row, 105 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 106 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 107 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 108 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 109 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 110 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 111 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 112 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 113 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 114 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 115 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 116 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 117 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 118 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 119 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 120 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 121 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 122 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 123 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 124 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 125 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 126 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 127 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 128 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 129 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 130 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 131 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 132 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 133 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 134 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 135 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 136 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 137 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 138 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 139 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 140 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 141 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 142 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 143 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 144 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 145 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 146 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 147 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 148 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 149 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 150 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 151 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 152 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 153 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 154 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 155 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 156 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 157 ) ); + amountRequired.push_back( exdData->getField< uint8_t >( row, 158 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 159 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 160 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 161 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 162 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 163 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 164 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 165 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 166 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 167 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 168 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 169 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 170 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 171 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 172 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 173 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 174 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 175 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 176 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 177 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 178 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 179 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 180 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 181 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 182 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 183 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 184 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 185 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 186 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 187 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 188 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 189 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 190 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 191 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 192 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 193 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 194 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 195 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 196 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 197 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 198 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 199 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 200 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 201 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 202 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 203 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 204 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 205 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 206 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 207 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 208 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 209 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 210 ) ); + itemReceived.push_back( exdData->getField< uint32_t >( row, 211 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 212 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 213 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 214 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 215 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 216 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 217 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 218 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 219 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 220 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 221 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 222 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 223 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 224 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 225 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 226 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 227 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 228 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 229 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 230 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 231 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 232 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 233 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 234 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 235 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 236 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 237 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 238 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 239 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 240 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 241 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 242 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 243 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 244 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 245 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 246 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 247 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 248 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 249 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 250 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 251 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 252 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 253 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 254 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 255 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 256 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 257 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 258 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 259 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 260 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 261 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 262 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 263 ) ); + reward1.push_back( exdData->getField< uint16_t >( row, 264 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 265 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 266 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 267 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 268 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 269 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 270 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 271 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 272 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 273 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 274 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 275 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 276 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 277 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 278 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 279 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 280 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 281 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 282 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 283 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 284 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 285 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 286 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 287 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 288 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 289 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 290 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 291 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 292 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 293 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 294 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 295 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 296 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 297 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 298 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 299 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 300 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 301 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 302 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 303 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 304 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 305 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 306 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 307 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 308 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 309 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 310 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 311 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 312 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 313 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 314 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 315 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 316 ) ); + reward2.push_back( exdData->getField< uint16_t >( row, 317 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 318 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 319 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 320 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 321 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 322 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 323 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 324 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 325 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 326 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 327 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 328 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 329 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 330 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 331 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 332 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 333 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 334 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 335 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 336 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 337 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 338 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 339 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 340 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 341 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 342 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 343 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 344 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 345 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 346 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 347 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 348 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 349 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 350 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 351 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 352 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 353 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 354 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 355 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 356 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 357 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 358 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 359 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 360 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 361 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 362 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 363 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 364 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 365 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 366 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 367 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 368 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 369 ) ); + phase.push_back( exdData->getField< uint8_t >( row, 370 ) ); +} + +Sapphire::Data::HWDGathererInspectionReward::HWDGathererInspectionReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDGathererInspectionRewardDat.get_row( row_id ); + scrips = exdData->getField< uint16_t >( row, 0 ); + points = exdData->getField< uint16_t >( row, 1 ); +} + +Sapphire::Data::HWDInfoBoardArticle::HWDInfoBoardArticle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDInfoBoardArticleDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + text = exdData->getField< std::string >( row, 4 ); +} + +Sapphire::Data::HWDInfoBoardArticleTransient::HWDInfoBoardArticleTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDInfoBoardArticleTransientDat.get_row( row_id ); + image = exdData->getField< uint32_t >( row, 0 ); + text = exdData->getField< std::string >( row, 1 ); + npcName = exdData->getField< std::string >( row, 2 ); +} + +Sapphire::Data::HWDInfoBoardArticleType::HWDInfoBoardArticleType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDInfoBoardArticleTypeDat.get_row( row_id ); + type = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::HWDLevelChangeDeception::HWDLevelChangeDeception( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDLevelChangeDeceptionDat.get_row( row_id ); + image = exdData->getField< int32_t >( row, 0 ); +} + +Sapphire::Data::HWDSharedGroup::HWDSharedGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDSharedGroupDat.get_row( row_id, subRow ); + lGB = exdData->getField< uint32_t >( row, 0 ); + param = exdData->getField< uint8_t >( row, 1 ); +} + +Sapphire::Data::HWDSharedGroupControlParam::HWDSharedGroupControlParam( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HWDSharedGroupControlParamDat.get_row( row_id, subRow ); + paramValue = exdData->getField< uint8_t >( row, 1 ); +} + +Sapphire::Data::IKDContentBonus::IKDContentBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_IKDContentBonusDat.get_row( row_id ); + objective = exdData->getField< std::string >( row, 0 ); + requirement = exdData->getField< std::string >( row, 1 ); + image = exdData->getField< uint32_t >( row, 3 ); + order = exdData->getField< uint8_t >( row, 4 ); +} + +Sapphire::Data::IKDFishParam::IKDFishParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_IKDFishParamDat.get_row( row_id ); + fish = exdData->getField< uint32_t >( row, 0 ); + iKDContentBonus = exdData->getField< uint8_t >( row, 1 ); +} + +Sapphire::Data::IKDRoute::IKDRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_IKDRouteDat.get_row( row_id ); + spot.push_back( exdData->getField< uint32_t >( row, 0 ) ); + spot.push_back( exdData->getField< uint32_t >( row, 1 ) ); + spot.push_back( exdData->getField< uint32_t >( row, 2 ) ); + spot.push_back( exdData->getField< uint32_t >( row, 3 ) ); + spot.push_back( exdData->getField< uint32_t >( row, 4 ) ); + timeDefine = exdData->getField< uint8_t >( row, 5 ); + image = exdData->getField< uint32_t >( row, 6 ); + territoryType = exdData->getField< uint32_t >( row, 7 ); + name = exdData->getField< std::string >( row, 8 ); +} + +Sapphire::Data::IKDRouteTable::IKDRouteTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_IKDRouteTableDat.get_row( row_id ); + route = exdData->getField< uint32_t >( row, 0 ); +} + +Sapphire::Data::IKDSpot::IKDSpot( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_IKDSpotDat.get_row( row_id ); + spotMain = exdData->getField< uint32_t >( row, 0 ); + spotSub = exdData->getField< uint32_t >( row, 1 ); + placeName = exdData->getField< uint32_t >( row, 2 ); +} + +Sapphire::Data::InclusionShop::InclusionShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_InclusionShopDat.get_row( row_id ); + category.push_back( exdData->getField< uint16_t >( row, 2 ) ); + category.push_back( exdData->getField< uint16_t >( row, 3 ) ); + category.push_back( exdData->getField< uint16_t >( row, 4 ) ); + category.push_back( exdData->getField< uint16_t >( row, 5 ) ); + category.push_back( exdData->getField< uint16_t >( row, 6 ) ); + category.push_back( exdData->getField< uint16_t >( row, 7 ) ); + category.push_back( exdData->getField< uint16_t >( row, 8 ) ); + category.push_back( exdData->getField< uint16_t >( row, 9 ) ); + category.push_back( exdData->getField< uint16_t >( row, 10 ) ); + category.push_back( exdData->getField< uint16_t >( row, 11 ) ); + category.push_back( exdData->getField< uint16_t >( row, 12 ) ); + category.push_back( exdData->getField< uint16_t >( row, 13 ) ); + category.push_back( exdData->getField< uint16_t >( row, 14 ) ); + category.push_back( exdData->getField< uint16_t >( row, 15 ) ); + category.push_back( exdData->getField< uint16_t >( row, 16 ) ); + category.push_back( exdData->getField< uint16_t >( row, 17 ) ); + category.push_back( exdData->getField< uint16_t >( row, 18 ) ); + category.push_back( exdData->getField< uint16_t >( row, 19 ) ); + category.push_back( exdData->getField< uint16_t >( row, 20 ) ); + category.push_back( exdData->getField< uint16_t >( row, 21 ) ); + category.push_back( exdData->getField< uint16_t >( row, 22 ) ); + category.push_back( exdData->getField< uint16_t >( row, 23 ) ); + category.push_back( exdData->getField< uint16_t >( row, 24 ) ); + category.push_back( exdData->getField< uint16_t >( row, 25 ) ); + category.push_back( exdData->getField< uint16_t >( row, 26 ) ); + category.push_back( exdData->getField< uint16_t >( row, 27 ) ); + category.push_back( exdData->getField< uint16_t >( row, 28 ) ); + category.push_back( exdData->getField< uint16_t >( row, 29 ) ); + category.push_back( exdData->getField< uint16_t >( row, 30 ) ); + category.push_back( exdData->getField< uint16_t >( row, 31 ) ); +} + +Sapphire::Data::InclusionShopCategory::InclusionShopCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_InclusionShopCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + classJobCategory = exdData->getField< uint8_t >( row, 1 ); + inclusionShopSeries = exdData->getField< uint16_t >( row, 2 ); +} + +Sapphire::Data::InclusionShopSeries::InclusionShopSeries( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_InclusionShopSeriesDat.get_row( row_id, subRow ); + specialShop = exdData->getField< uint32_t >( row, 0 ); +} + +Sapphire::Data::IndividualWeather::IndividualWeather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_IndividualWeatherDat.get_row( row_id ); + weather.push_back( exdData->getField< uint8_t >( row, 0 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 1 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 2 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 3 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 4 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 5 ) ); + addedIn530 = exdData->getField< uint8_t >( row, 12 ); + addedIn531 = exdData->getField< uint8_t >( row, 13 ); + quest.push_back( exdData->getField< uint32_t >( row, 15 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 16 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 17 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 18 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 19 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 20 ) ); } Sapphire::Data::InstanceContent::InstanceContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_InstanceContentDat.get_row( row_id ); - instanceContentType = exdData->getField< uint8_t >( row, 0 ); - weekRestriction = exdData->getField< uint8_t >( row, 1 ); - timeLimitmin = exdData->getField< uint16_t >( row, 2 ); - name = exdData->getField< std::string >( row, 3 ); - bGM = exdData->getField< uint16_t >( row, 5 ); - winBGM = exdData->getField< uint16_t >( row, 6 ); - cutscene = exdData->getField< uint32_t >( row, 7 ); - order = exdData->getField< uint16_t >( row, 9 ); - instanceContentTextDataBossStart = exdData->getField< uint32_t >( row, 12 ); - instanceContentTextDataBossEnd = exdData->getField< uint32_t >( row, 13 ); - bNpcBaseBoss = exdData->getField< uint32_t >( row, 14 ); - instanceContentTextDataObjectiveStart = exdData->getField< uint32_t >( row, 15 ); - instanceContentTextDataObjectiveEnd = exdData->getField< uint32_t >( row, 16 ); - sortKey = exdData->getField< uint16_t >( row, 17 ); - newPlayerBonusA = exdData->getField< uint16_t >( row, 20 ); - newPlayerBonusB = exdData->getField< uint16_t >( row, 21 ); - finalBossExp = exdData->getField< uint32_t >( row, 22 ); - finalBossCurrencyA = exdData->getField< uint16_t >( row, 23 ); - finalBossCurrencyB = exdData->getField< uint16_t >( row, 24 ); - finalBossCurrencyC = exdData->getField< uint16_t >( row, 25 ); - instanceClearExp = exdData->getField< uint32_t >( row, 46 ); - instanceContentBuff = exdData->getField< int32_t >( row, 51 ); - reqInstance = exdData->getField< uint32_t >( row, 52 ); - partyCondition = exdData->getField< uint8_t >( row, 54 ); + auto row = exdData->m_InstanceContentDat.get_row( row_id ); + instanceContentType = exdData->getField< uint8_t >( row, 0 ); + weekRestriction = exdData->getField< uint8_t >( row, 1 ); + timeLimitmin = exdData->getField< uint16_t >( row, 2 ); + bGM = exdData->getField< uint16_t >( row, 4 ); + winBGM = exdData->getField< uint16_t >( row, 5 ); + cutscene = exdData->getField< uint32_t >( row, 6 ); + order = exdData->getField< uint16_t >( row, 8 ); + colosseum = exdData->getField< uint8_t >( row, 9 ); + instanceContentTextDataBossStart = exdData->getField< uint32_t >( row, 11 ); + instanceContentTextDataBossEnd = exdData->getField< uint32_t >( row, 12 ); + bNpcBaseBoss = exdData->getField< uint32_t >( row, 13 ); + instanceContentTextDataObjectiveStart = exdData->getField< uint32_t >( row, 14 ); + instanceContentTextDataObjectiveEnd = exdData->getField< uint32_t >( row, 15 ); + sortKey = exdData->getField< uint16_t >( row, 16 ); + instanceClearExp = exdData->getField< uint32_t >( row, 17 ); + newPlayerBonusA = exdData->getField< uint16_t >( row, 19 ); + finalBossCurrencyC = exdData->getField< uint16_t >( row, 20 ); + finalBossCurrencyA = exdData->getField< uint32_t >( row, 22 ); + finalBossCurrencyB = exdData->getField< uint16_t >( row, 23 ); + newPlayerBonusB = exdData->getField< uint16_t >( row, 24 ); + instanceClearGil = exdData->getField< uint32_t >( row, 46 ); + instanceContentRewardItem = exdData->getField< uint32_t >( row, 47 ); + finalBossExp = exdData->getField< uint8_t >( row, 49 ); + instanceContentBuff = exdData->getField< uint32_t >( row, 50 ); + reqInstance = exdData->getField< int32_t >( row, 51 ); + partyCondition = exdData->getField< int16_t >( row, 53 ); } Sapphire::Data::InstanceContentBuff::InstanceContentBuff( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_InstanceContentBuffDat.get_row( row_id ); - echoStart = exdData->getField< uint16_t >( row, 0 ); - echoDeath = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_InstanceContentBuffDat.get_row( row_id ); + echoStart = exdData->getField< uint16_t >( row, 0 ); + echoDeath = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::InstanceContentCSBonus::InstanceContentCSBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_InstanceContentCSBonusDat.get_row( row_id ); - instance = exdData->getField< uint16_t >( row, 0 ); - item = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_InstanceContentCSBonusDat.get_row( row_id ); + instance = exdData->getField< uint16_t >( row, 0 ); + item = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::InstanceContentGuide::InstanceContentGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_InstanceContentGuideDat.get_row( row_id ); - instance = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_InstanceContentGuideDat.get_row( row_id ); + instance = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::InstanceContentTextData::InstanceContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_InstanceContentTextDataDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_InstanceContentTextDataDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Item::Item( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - description = exdData->getField< std::string >( row, 8 ); - name = exdData->getField< std::string >( row, 9 ); - icon = exdData->getField< uint16_t >( row, 10 ); - levelItem = exdData->getField< uint16_t >( row, 11 ); - rarity = exdData->getField< uint8_t >( row, 12 ); - filterGroup = exdData->getField< uint8_t >( row, 13 ); - additionalData = exdData->getField< uint32_t >( row, 14 ); - itemUICategory = exdData->getField< uint8_t >( row, 15 ); - itemSearchCategory = exdData->getField< uint8_t >( row, 16 ); - equipSlotCategory = exdData->getField< uint8_t >( row, 17 ); - stackSize = exdData->getField< uint32_t >( row, 19 ); - isUnique = exdData->getField< bool >( row, 20 ); - isUntradable = exdData->getField< bool >( row, 21 ); - isIndisposable = exdData->getField< bool >( row, 22 ); - isEquippable = exdData->getField< bool >( row, 23 ); - priceMid = exdData->getField< uint32_t >( row, 24 ); - priceLow = exdData->getField< uint32_t >( row, 25 ); - canBeHq = exdData->getField< bool >( row, 26 ); - isDyeable = exdData->getField< bool >( row, 27 ); - isCrestWorthy = exdData->getField< bool >( row, 28 ); - itemAction = exdData->getField< uint16_t >( row, 29 ); - cooldowns = exdData->getField< uint16_t >( row, 31 ); - classJobRepair = exdData->getField< uint8_t >( row, 32 ); - itemRepair = exdData->getField< int32_t >( row, 33 ); - itemGlamour = exdData->getField< int32_t >( row, 34 ); - salvage = exdData->getField< uint16_t >( row, 35 ); - isCollectable = exdData->getField< bool >( row, 36 ); - aetherialReduce = exdData->getField< uint16_t >( row, 37 ); - levelEquip = exdData->getField< uint8_t >( row, 38 ); - equipRestriction = exdData->getField< uint8_t >( row, 40 ); - classJobCategory = exdData->getField< uint8_t >( row, 41 ); - grandCompany = exdData->getField< uint8_t >( row, 42 ); - itemSeries = exdData->getField< uint8_t >( row, 43 ); - baseParamModifier = exdData->getField< uint8_t >( row, 44 ); - modelMain = exdData->getField< uint64_t >( row, 45 ); - modelSub = exdData->getField< uint64_t >( row, 46 ); - classJobUse = exdData->getField< uint8_t >( row, 47 ); - damagePhys = exdData->getField< uint16_t >( row, 49 ); - damageMag = exdData->getField< uint16_t >( row, 50 ); - delayms = exdData->getField< uint16_t >( row, 51 ); - blockRate = exdData->getField< uint16_t >( row, 53 ); - block = exdData->getField< uint16_t >( row, 54 ); - defensePhys = exdData->getField< uint16_t >( row, 55 ); - defenseMag = exdData->getField< uint16_t >( row, 56 ); - itemSpecialBonus = exdData->getField< uint8_t >( row, 69 ); - itemSpecialBonusParam = exdData->getField< uint8_t >( row, 70 ); - materializeType = exdData->getField< uint8_t >( row, 83 ); - materiaSlotCount = exdData->getField< uint8_t >( row, 84 ); - isAdvancedMeldingPermitted = exdData->getField< bool >( row, 85 ); - isPvP = exdData->getField< bool >( row, 86 ); - isGlamourous = exdData->getField< bool >( row, 88 ); + auto row = exdData->m_ItemDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + description = exdData->getField< std::string >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); + icon = exdData->getField< uint16_t >( row, 10 ); + levelItem = exdData->getField< uint16_t >( row, 11 ); + rarity = exdData->getField< uint8_t >( row, 12 ); + filterGroup = exdData->getField< uint8_t >( row, 13 ); + additionalData = exdData->getField< uint32_t >( row, 14 ); + itemUICategory = exdData->getField< uint8_t >( row, 15 ); + itemSearchCategory = exdData->getField< uint8_t >( row, 16 ); + equipSlotCategory = exdData->getField< uint8_t >( row, 17 ); + itemSortCategory = exdData->getField< uint8_t >( row, 18 ); + stackSize = exdData->getField< uint32_t >( row, 20 ); + isUnique = exdData->getField< bool >( row, 21 ); + isUntradable = exdData->getField< bool >( row, 22 ); + isIndisposable = exdData->getField< bool >( row, 23 ); + isEquippable = exdData->getField< bool >( row, 24 ); + priceMid = exdData->getField< uint32_t >( row, 25 ); + priceLow = exdData->getField< uint32_t >( row, 26 ); + canBeHq = exdData->getField< bool >( row, 27 ); + isDyeable = exdData->getField< bool >( row, 28 ); + isCrestWorthy = exdData->getField< bool >( row, 29 ); + itemAction = exdData->getField< uint16_t >( row, 30 ); + cooldowns = exdData->getField< uint16_t >( row, 32 ); + classJobRepair = exdData->getField< uint8_t >( row, 33 ); + itemRepair = exdData->getField< int32_t >( row, 34 ); + itemGlamour = exdData->getField< int32_t >( row, 35 ); + desynth = exdData->getField< uint16_t >( row, 36 ); + isCollectable = exdData->getField< bool >( row, 37 ); + alwaysCollectable = exdData->getField< bool >( row, 38 ); + aetherialReduce = exdData->getField< uint16_t >( row, 39 ); + levelEquip = exdData->getField< uint8_t >( row, 40 ); + equipRestriction = exdData->getField< uint8_t >( row, 42 ); + classJobCategory = exdData->getField< uint8_t >( row, 43 ); + grandCompany = exdData->getField< uint8_t >( row, 44 ); + itemSeries = exdData->getField< uint8_t >( row, 45 ); + baseParamModifier = exdData->getField< uint8_t >( row, 46 ); + modelMain = exdData->getField< uint64_t >( row, 47 ); + modelSub = exdData->getField< uint64_t >( row, 48 ); + classJobUse = exdData->getField< uint8_t >( row, 49 ); + damagePhys = exdData->getField< uint16_t >( row, 51 ); + damageMag = exdData->getField< uint16_t >( row, 52 ); + delayms = exdData->getField< uint16_t >( row, 53 ); + blockRate = exdData->getField< uint16_t >( row, 55 ); + block = exdData->getField< uint16_t >( row, 56 ); + defensePhys = exdData->getField< uint16_t >( row, 57 ); + defenseMag = exdData->getField< uint16_t >( row, 58 ); + itemSpecialBonus = exdData->getField< uint8_t >( row, 71 ); + itemSpecialBonusParam = exdData->getField< uint8_t >( row, 72 ); + materializeType = exdData->getField< uint8_t >( row, 85 ); + materiaSlotCount = exdData->getField< uint8_t >( row, 86 ); + isAdvancedMeldingPermitted = exdData->getField< bool >( row, 87 ); + isPvP = exdData->getField< bool >( row, 88 ); + isGlamourous = exdData->getField< bool >( row, 90 ); - for( int i = 0; i < 6; ++i ) - { - param[i].baseparam = exdData->getField< uint8_t >( row, 57 + i * 2 ); - param[i].value = exdData->getField< int16_t >( row, 58 + i * 2 ); - } + for( int i = 0; i < 6; ++i ) + { + param[i].baseparam = exdData->getField< uint8_t >( row, 59 + i * 2 ); + param[i].value = exdData->getField< int16_t >( row, 60 + i * 2 ); + } } Sapphire::Data::ItemAction::ItemAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemActionDat.get_row( row_id ); - type = exdData->getField< uint16_t >( row, 4 ); - data.push_back( exdData->getField< uint16_t >( row, 5 ) ); - data.push_back( exdData->getField< uint16_t >( row, 6 ) ); - data.push_back( exdData->getField< uint16_t >( row, 7 ) ); - data.push_back( exdData->getField< uint16_t >( row, 8 ) ); - data.push_back( exdData->getField< uint16_t >( row, 9 ) ); - data.push_back( exdData->getField< uint16_t >( row, 10 ) ); - data.push_back( exdData->getField< uint16_t >( row, 11 ) ); - data.push_back( exdData->getField< uint16_t >( row, 12 ) ); - data.push_back( exdData->getField< uint16_t >( row, 13 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 14 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 15 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 16 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 17 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 18 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 19 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 20 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 21 ) ); - dataHQ.push_back( exdData->getField< uint16_t >( row, 22 ) ); + auto row = exdData->m_ItemActionDat.get_row( row_id ); + condLv = exdData->getField< uint8_t >( row, 0 ); + condBattle = exdData->getField< bool >( row, 1 ); + condPVP = exdData->getField< bool >( row, 2 ); + condPVPOnly = exdData->getField< bool >( row, 3 ); + type = exdData->getField< uint16_t >( row, 4 ); + data.push_back( exdData->getField< uint16_t >( row, 5 ) ); + data.push_back( exdData->getField< uint16_t >( row, 6 ) ); + data.push_back( exdData->getField< uint16_t >( row, 7 ) ); + data.push_back( exdData->getField< uint16_t >( row, 8 ) ); + data.push_back( exdData->getField< uint16_t >( row, 9 ) ); + data.push_back( exdData->getField< uint16_t >( row, 10 ) ); + data.push_back( exdData->getField< uint16_t >( row, 11 ) ); + data.push_back( exdData->getField< uint16_t >( row, 12 ) ); + data.push_back( exdData->getField< uint16_t >( row, 13 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 14 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 15 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 16 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 17 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 18 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 19 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 20 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 21 ) ); + dataHQ.push_back( exdData->getField< uint16_t >( row, 22 ) ); +} + +Sapphire::Data::ItemActionTelepo::ItemActionTelepo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ItemActionTelepoDat.get_row( row_id ); + requirement = exdData->getField< uint32_t >( row, 0 ); + denyMessage = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::ItemBarterCheck::ItemBarterCheck( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ItemBarterCheckDat.get_row( row_id, subRow ); + category = exdData->getField< uint16_t >( row, 0 ); + question = exdData->getField< uint32_t >( row, 1 ); + confirm = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::ItemFood::ItemFood( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemFoodDat.get_row( row_id ); + auto row = exdData->m_ItemFoodDat.get_row( row_id ); + eXPBonus = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::ItemLevel::ItemLevel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemLevelDat.get_row( row_id ); - strength = exdData->getField< uint16_t >( row, 0 ); - dexterity = exdData->getField< uint16_t >( row, 1 ); - vitality = exdData->getField< uint16_t >( row, 2 ); - intelligence = exdData->getField< uint16_t >( row, 3 ); - mind = exdData->getField< uint16_t >( row, 4 ); - piety = exdData->getField< uint16_t >( row, 5 ); - hP = exdData->getField< uint16_t >( row, 6 ); - mP = exdData->getField< uint16_t >( row, 7 ); - tP = exdData->getField< uint16_t >( row, 8 ); - gP = exdData->getField< uint16_t >( row, 9 ); - cP = exdData->getField< uint16_t >( row, 10 ); - physicalDamage = exdData->getField< uint16_t >( row, 11 ); - magicalDamage = exdData->getField< uint16_t >( row, 12 ); - delay = exdData->getField< uint16_t >( row, 13 ); - additionalEffect = exdData->getField< uint16_t >( row, 14 ); - attackSpeed = exdData->getField< uint16_t >( row, 15 ); - blockRate = exdData->getField< uint16_t >( row, 16 ); - blockStrength = exdData->getField< uint16_t >( row, 17 ); - tenacity = exdData->getField< uint16_t >( row, 18 ); - attackPower = exdData->getField< uint16_t >( row, 19 ); - defense = exdData->getField< uint16_t >( row, 20 ); - directHitRate = exdData->getField< uint16_t >( row, 21 ); - evasion = exdData->getField< uint16_t >( row, 22 ); - magicDefense = exdData->getField< uint16_t >( row, 23 ); - criticalHitPower = exdData->getField< uint16_t >( row, 24 ); - criticalHitResilience = exdData->getField< uint16_t >( row, 25 ); - criticalHit = exdData->getField< uint16_t >( row, 26 ); - criticalHitEvasion = exdData->getField< uint16_t >( row, 27 ); - slashingResistance = exdData->getField< uint16_t >( row, 28 ); - piercingResistance = exdData->getField< uint16_t >( row, 29 ); - bluntResistance = exdData->getField< uint16_t >( row, 30 ); - projectileResistance = exdData->getField< uint16_t >( row, 31 ); - attackMagicPotency = exdData->getField< uint16_t >( row, 32 ); - healingMagicPotency = exdData->getField< uint16_t >( row, 33 ); - enhancementMagicPotency = exdData->getField< uint16_t >( row, 34 ); - enfeeblingMagicPotency = exdData->getField< uint16_t >( row, 35 ); - fireResistance = exdData->getField< uint16_t >( row, 36 ); - iceResistance = exdData->getField< uint16_t >( row, 37 ); - windResistance = exdData->getField< uint16_t >( row, 38 ); - earthResistance = exdData->getField< uint16_t >( row, 39 ); - lightningResistance = exdData->getField< uint16_t >( row, 40 ); - waterResistance = exdData->getField< uint16_t >( row, 41 ); - magicResistance = exdData->getField< uint16_t >( row, 42 ); - determination = exdData->getField< uint16_t >( row, 43 ); - skillSpeed = exdData->getField< uint16_t >( row, 44 ); - spellSpeed = exdData->getField< uint16_t >( row, 45 ); - haste = exdData->getField< uint16_t >( row, 46 ); - morale = exdData->getField< uint16_t >( row, 47 ); - enmity = exdData->getField< uint16_t >( row, 48 ); - enmityReduction = exdData->getField< uint16_t >( row, 49 ); - carefulDesynthesis = exdData->getField< uint16_t >( row, 50 ); - eXPBonus = exdData->getField< uint16_t >( row, 51 ); - regen = exdData->getField< uint16_t >( row, 52 ); - refresh = exdData->getField< uint16_t >( row, 53 ); - movementSpeed = exdData->getField< uint16_t >( row, 54 ); - spikes = exdData->getField< uint16_t >( row, 55 ); - slowResistance = exdData->getField< uint16_t >( row, 56 ); - petrificationResistance = exdData->getField< uint16_t >( row, 57 ); - paralysisResistance = exdData->getField< uint16_t >( row, 58 ); - silenceResistance = exdData->getField< uint16_t >( row, 59 ); - blindResistance = exdData->getField< uint16_t >( row, 60 ); - poisonResistance = exdData->getField< uint16_t >( row, 61 ); - stunResistance = exdData->getField< uint16_t >( row, 62 ); - sleepResistance = exdData->getField< uint16_t >( row, 63 ); - bindResistance = exdData->getField< uint16_t >( row, 64 ); - heavyResistance = exdData->getField< uint16_t >( row, 65 ); - doomResistance = exdData->getField< uint16_t >( row, 66 ); - reducedDurabilityLoss = exdData->getField< uint16_t >( row, 67 ); - increasedSpiritbondGain = exdData->getField< uint16_t >( row, 68 ); - craftsmanship = exdData->getField< uint16_t >( row, 69 ); - control = exdData->getField< uint16_t >( row, 70 ); - gathering = exdData->getField< uint16_t >( row, 71 ); - perception = exdData->getField< uint16_t >( row, 72 ); + auto row = exdData->m_ItemLevelDat.get_row( row_id ); + strength = exdData->getField< uint16_t >( row, 0 ); + dexterity = exdData->getField< uint16_t >( row, 1 ); + vitality = exdData->getField< uint16_t >( row, 2 ); + intelligence = exdData->getField< uint16_t >( row, 3 ); + mind = exdData->getField< uint16_t >( row, 4 ); + piety = exdData->getField< uint16_t >( row, 5 ); + hP = exdData->getField< uint16_t >( row, 6 ); + mP = exdData->getField< uint16_t >( row, 7 ); + tP = exdData->getField< uint16_t >( row, 8 ); + gP = exdData->getField< uint16_t >( row, 9 ); + cP = exdData->getField< uint16_t >( row, 10 ); + physicalDamage = exdData->getField< uint16_t >( row, 11 ); + magicalDamage = exdData->getField< uint16_t >( row, 12 ); + delay = exdData->getField< uint16_t >( row, 13 ); + additionalEffect = exdData->getField< uint16_t >( row, 14 ); + attackSpeed = exdData->getField< uint16_t >( row, 15 ); + blockRate = exdData->getField< uint16_t >( row, 16 ); + blockStrength = exdData->getField< uint16_t >( row, 17 ); + tenacity = exdData->getField< uint16_t >( row, 18 ); + attackPower = exdData->getField< uint16_t >( row, 19 ); + defense = exdData->getField< uint16_t >( row, 20 ); + directHitRate = exdData->getField< uint16_t >( row, 21 ); + evasion = exdData->getField< uint16_t >( row, 22 ); + magicDefense = exdData->getField< uint16_t >( row, 23 ); + criticalHitPower = exdData->getField< uint16_t >( row, 24 ); + criticalHitResilience = exdData->getField< uint16_t >( row, 25 ); + criticalHit = exdData->getField< uint16_t >( row, 26 ); + criticalHitEvasion = exdData->getField< uint16_t >( row, 27 ); + slashingResistance = exdData->getField< uint16_t >( row, 28 ); + piercingResistance = exdData->getField< uint16_t >( row, 29 ); + bluntResistance = exdData->getField< uint16_t >( row, 30 ); + projectileResistance = exdData->getField< uint16_t >( row, 31 ); + attackMagicPotency = exdData->getField< uint16_t >( row, 32 ); + healingMagicPotency = exdData->getField< uint16_t >( row, 33 ); + enhancementMagicPotency = exdData->getField< uint16_t >( row, 34 ); + enfeeblingMagicPotency = exdData->getField< uint16_t >( row, 35 ); + fireResistance = exdData->getField< uint16_t >( row, 36 ); + iceResistance = exdData->getField< uint16_t >( row, 37 ); + windResistance = exdData->getField< uint16_t >( row, 38 ); + earthResistance = exdData->getField< uint16_t >( row, 39 ); + lightningResistance = exdData->getField< uint16_t >( row, 40 ); + waterResistance = exdData->getField< uint16_t >( row, 41 ); + magicResistance = exdData->getField< uint16_t >( row, 42 ); + determination = exdData->getField< uint16_t >( row, 43 ); + skillSpeed = exdData->getField< uint16_t >( row, 44 ); + spellSpeed = exdData->getField< uint16_t >( row, 45 ); + haste = exdData->getField< uint16_t >( row, 46 ); + morale = exdData->getField< uint16_t >( row, 47 ); + enmity = exdData->getField< uint16_t >( row, 48 ); + enmityReduction = exdData->getField< uint16_t >( row, 49 ); + carefulDesynthesis = exdData->getField< uint16_t >( row, 50 ); + eXPBonus = exdData->getField< uint16_t >( row, 51 ); + regen = exdData->getField< uint16_t >( row, 52 ); + refresh = exdData->getField< uint16_t >( row, 53 ); + movementSpeed = exdData->getField< uint16_t >( row, 54 ); + spikes = exdData->getField< uint16_t >( row, 55 ); + slowResistance = exdData->getField< uint16_t >( row, 56 ); + petrificationResistance = exdData->getField< uint16_t >( row, 57 ); + paralysisResistance = exdData->getField< uint16_t >( row, 58 ); + silenceResistance = exdData->getField< uint16_t >( row, 59 ); + blindResistance = exdData->getField< uint16_t >( row, 60 ); + poisonResistance = exdData->getField< uint16_t >( row, 61 ); + stunResistance = exdData->getField< uint16_t >( row, 62 ); + sleepResistance = exdData->getField< uint16_t >( row, 63 ); + bindResistance = exdData->getField< uint16_t >( row, 64 ); + heavyResistance = exdData->getField< uint16_t >( row, 65 ); + doomResistance = exdData->getField< uint16_t >( row, 66 ); + reducedDurabilityLoss = exdData->getField< uint16_t >( row, 67 ); + increasedSpiritbondGain = exdData->getField< uint16_t >( row, 68 ); + craftsmanship = exdData->getField< uint16_t >( row, 69 ); + control = exdData->getField< uint16_t >( row, 70 ); + gathering = exdData->getField< uint16_t >( row, 71 ); + perception = exdData->getField< uint16_t >( row, 72 ); } Sapphire::Data::ItemSearchCategory::ItemSearchCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemSearchCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); - category = exdData->getField< uint8_t >( row, 2 ); - order = exdData->getField< uint8_t >( row, 3 ); - classJob = exdData->getField< int8_t >( row, 4 ); + auto row = exdData->m_ItemSearchCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + category = exdData->getField< uint8_t >( row, 2 ); + order = exdData->getField< uint8_t >( row, 3 ); + classJob = exdData->getField< int8_t >( row, 4 ); } Sapphire::Data::ItemSeries::ItemSeries( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemSeriesDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ItemSeriesDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::ItemSortCategory::ItemSortCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ItemSortCategoryDat.get_row( row_id ); + param = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::ItemSpecialBonus::ItemSpecialBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemSpecialBonusDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ItemSpecialBonusDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::ItemUICategory::ItemUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ItemUICategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); - orderMinor = exdData->getField< uint8_t >( row, 2 ); - orderMajor = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_ItemUICategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + orderMinor = exdData->getField< uint8_t >( row, 2 ); + orderMajor = exdData->getField< uint8_t >( row, 3 ); +} + +Sapphire::Data::JobHudManual::JobHudManual( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_JobHudManualDat.get_row( row_id ); + action = exdData->getField< uint32_t >( row, 2 ); + guide = exdData->getField< uint16_t >( row, 5 ); +} + +Sapphire::Data::JobHudManualPriority::JobHudManualPriority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_JobHudManualPriorityDat.get_row( row_id ); + jobHudManual.push_back( exdData->getField< uint8_t >( row, 0 ) ); + jobHudManual.push_back( exdData->getField< uint8_t >( row, 1 ) ); + jobHudManual.push_back( exdData->getField< uint8_t >( row, 2 ) ); } Sapphire::Data::JournalCategory::JournalCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_JournalCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - journalSection = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_JournalCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + separateType = exdData->getField< uint8_t >( row, 1 ); + dataType = exdData->getField< uint8_t >( row, 2 ); + journalSection = exdData->getField< uint8_t >( row, 3 ); } Sapphire::Data::JournalGenre::JournalGenre( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_JournalGenreDat.get_row( row_id ); - icon = exdData->getField< int32_t >( row, 0 ); - journalCategory = exdData->getField< uint8_t >( row, 1 ); - name = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_JournalGenreDat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 0 ); + journalCategory = exdData->getField< uint8_t >( row, 1 ); + name = exdData->getField< std::string >( row, 3 ); } Sapphire::Data::JournalSection::JournalSection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_JournalSectionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_JournalSectionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::Knockback::Knockback( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_KnockbackDat.get_row( row_id ); + distance = exdData->getField< uint8_t >( row, 0 ); + speed = exdData->getField< uint8_t >( row, 1 ); + motion = exdData->getField< bool >( row, 2 ); + nearDistance = exdData->getField< uint8_t >( row, 3 ); + direction = exdData->getField< uint8_t >( row, 4 ); + directionArg = exdData->getField< uint8_t >( row, 5 ); + cancelMove = exdData->getField< bool >( row, 6 ); +} + +Sapphire::Data::LegacyQuest::LegacyQuest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_LegacyQuestDat.get_row( row_id ); + legacyQuestID = exdData->getField< uint16_t >( row, 0 ); + text = exdData->getField< std::string >( row, 1 ); + string = exdData->getField< std::string >( row, 2 ); + sortKey = exdData->getField< uint16_t >( row, 3 ); + genre = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::Leve::Leve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LeveDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - leveClient = exdData->getField< int32_t >( row, 2 ); - leveAssignmentType = exdData->getField< int32_t >( row, 3 ); - classJobLevel = exdData->getField< uint16_t >( row, 5 ); - allowanceCost = exdData->getField< uint8_t >( row, 7 ); - placeNameStart = exdData->getField< int32_t >( row, 9 ); - placeNameIssued = exdData->getField< int32_t >( row, 10 ); - classJobCategory = exdData->getField< uint8_t >( row, 12 ); - journalGenre = exdData->getField< int32_t >( row, 13 ); - placeNameStartZone = exdData->getField< int32_t >( row, 15 ); - iconCityState = exdData->getField< int32_t >( row, 16 ); - dataId = exdData->getField< int32_t >( row, 17 ); - expReward = exdData->getField< uint32_t >( row, 21 ); - gilReward = exdData->getField< uint32_t >( row, 22 ); - leveRewardItem = exdData->getField< uint16_t >( row, 23 ); - leveVfx = exdData->getField< uint8_t >( row, 24 ); - leveVfxFrame = exdData->getField< uint8_t >( row, 25 ); - levelLevemete = exdData->getField< uint32_t >( row, 26 ); - iconIssuer = exdData->getField< int32_t >( row, 27 ); - levelStart = exdData->getField< uint32_t >( row, 29 ); - bGM = exdData->getField< uint16_t >( row, 30 ); + auto row = exdData->m_LeveDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + leveClient = exdData->getField< int32_t >( row, 2 ); + leveAssignmentType = exdData->getField< uint8_t >( row, 3 ); + town = exdData->getField< int32_t >( row, 4 ); + classJobLevel = exdData->getField< uint16_t >( row, 6 ); + timeLimit = exdData->getField< uint8_t >( row, 7 ); + allowanceCost = exdData->getField< uint8_t >( row, 8 ); + evaluation = exdData->getField< int32_t >( row, 9 ); + placeNameStart = exdData->getField< int32_t >( row, 10 ); + placeNameIssued = exdData->getField< int32_t >( row, 11 ); + classJobCategory = exdData->getField< uint8_t >( row, 13 ); + journalGenre = exdData->getField< int32_t >( row, 14 ); + placeNameStartZone = exdData->getField< int32_t >( row, 16 ); + iconCityState = exdData->getField< int32_t >( row, 17 ); + dataId = exdData->getField< int32_t >( row, 18 ); + canCancel = exdData->getField< bool >( row, 19 ); + maxDifficulty = exdData->getField< uint8_t >( row, 20 ); + expFactor = exdData->getField< float >( row, 21 ); + expReward = exdData->getField< uint32_t >( row, 22 ); + gilReward = exdData->getField< uint32_t >( row, 23 ); + leveRewardItem = exdData->getField< uint16_t >( row, 24 ); + leveVfx = exdData->getField< uint8_t >( row, 25 ); + leveVfxFrame = exdData->getField< uint8_t >( row, 26 ); + levelLevemete = exdData->getField< uint32_t >( row, 27 ); + iconIssuer = exdData->getField< int32_t >( row, 28 ); + lockedLeve = exdData->getField< bool >( row, 29 ); + levelStart = exdData->getField< uint32_t >( row, 30 ); + bGM = exdData->getField< uint16_t >( row, 31 ); } Sapphire::Data::LeveAssignmentType::LeveAssignmentType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LeveAssignmentTypeDat.get_row( row_id ); - isFaction = exdData->getField< bool >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); - name = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_LeveAssignmentTypeDat.get_row( row_id ); + isFaction = exdData->getField< bool >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + name = exdData->getField< std::string >( row, 2 ); } Sapphire::Data::LeveClient::LeveClient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LeveClientDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_LeveClientDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Level::Level( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LevelDat.get_row( row_id ); - x = exdData->getField< float >( row, 0 ); - y = exdData->getField< float >( row, 1 ); - z = exdData->getField< float >( row, 2 ); - yaw = exdData->getField< float >( row, 3 ); - radius = exdData->getField< float >( row, 4 ); - type = exdData->getField< uint8_t >( row, 5 ); - object = exdData->getField< uint32_t >( row, 6 ); - map = exdData->getField< uint16_t >( row, 7 ); - eventId = exdData->getField< uint32_t >( row, 8 ); - territory = exdData->getField< uint16_t >( row, 9 ); + auto row = exdData->m_LevelDat.get_row( row_id ); + x = exdData->getField< float >( row, 0 ); + y = exdData->getField< float >( row, 1 ); + z = exdData->getField< float >( row, 2 ); + yaw = exdData->getField< float >( row, 3 ); + radius = exdData->getField< float >( row, 4 ); + type = exdData->getField< uint8_t >( row, 5 ); + object = exdData->getField< uint32_t >( row, 6 ); + map = exdData->getField< uint16_t >( row, 7 ); + eventId = exdData->getField< uint32_t >( row, 8 ); + territory = exdData->getField< uint16_t >( row, 9 ); } Sapphire::Data::LeveRewardItem::LeveRewardItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LeveRewardItemDat.get_row( row_id ); + auto row = exdData->m_LeveRewardItemDat.get_row( row_id ); } Sapphire::Data::LeveRewardItemGroup::LeveRewardItemGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LeveRewardItemGroupDat.get_row( row_id ); + auto row = exdData->m_LeveRewardItemGroupDat.get_row( row_id ); +} + +Sapphire::Data::LeveString::LeveString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_LeveStringDat.get_row( row_id ); + objective = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::LeveVfx::LeveVfx( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LeveVfxDat.get_row( row_id ); - effect = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_LeveVfxDat.get_row( row_id ); + effect = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); +} + +Sapphire::Data::Lobby::Lobby( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_LobbyDat.get_row( row_id ); + tYPE = exdData->getField< uint32_t >( row, 0 ); + pARAM = exdData->getField< uint32_t >( row, 1 ); + lINK = exdData->getField< uint32_t >( row, 2 ); + text = exdData->getField< std::string >( row, 3 ); } Sapphire::Data::LogFilter::LogFilter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LogFilterDat.get_row( row_id ); - logKind = exdData->getField< uint8_t >( row, 0 ); - name = exdData->getField< std::string >( row, 6 ); - example = exdData->getField< std::string >( row, 7 ); + auto row = exdData->m_LogFilterDat.get_row( row_id ); + logKind = exdData->getField< uint8_t >( row, 0 ); + caster = exdData->getField< uint16_t >( row, 1 ); + target = exdData->getField< uint16_t >( row, 2 ); + category = exdData->getField< uint8_t >( row, 3 ); + displayOrder = exdData->getField< uint8_t >( row, 4 ); + preset = exdData->getField< uint8_t >( row, 5 ); + name = exdData->getField< std::string >( row, 6 ); + example = exdData->getField< std::string >( row, 7 ); } Sapphire::Data::LogKind::LogKind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LogKindDat.get_row( row_id ); - format = exdData->getField< std::string >( row, 1 ); - name = exdData->getField< std::string >( row, 2 ); - example = exdData->getField< std::string >( row, 3 ); - logKindCategoryText = exdData->getField< uint8_t >( row, 4 ); -} - -Sapphire::Data::LogKindCategoryText::LogKindCategoryText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_LogKindCategoryTextDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_LogKindDat.get_row( row_id ); + format = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::LogMessage::LogMessage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LogMessageDat.get_row( row_id ); - logKind = exdData->getField< uint16_t >( row, 0 ); - text = exdData->getField< std::string >( row, 4 ); + auto row = exdData->m_LogMessageDat.get_row( row_id ); + logKind = exdData->getField< uint16_t >( row, 0 ); + text = exdData->getField< std::string >( row, 4 ); } Sapphire::Data::LotteryExchangeShop::LotteryExchangeShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_LotteryExchangeShopDat.get_row( row_id ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 1 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 2 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 3 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 4 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 5 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 6 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 7 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 8 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 9 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 10 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 11 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 12 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 13 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 14 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 15 ) ); - itemAccepted.push_back( exdData->getField< int32_t >( row, 16 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 17 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 18 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 19 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 20 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 21 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 22 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 23 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 24 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 25 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 26 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 27 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 28 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 29 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 30 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 31 ) ); - amountAccepted.push_back( exdData->getField< uint32_t >( row, 32 ) ); + auto row = exdData->m_LotteryExchangeShopDat.get_row( row_id ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 1 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 2 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 3 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 4 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 5 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 6 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 7 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 8 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 9 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 10 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 11 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 12 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 13 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 14 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 15 ) ); + itemAccepted.push_back( exdData->getField< int32_t >( row, 16 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 17 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 18 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 19 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 20 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 21 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 22 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 23 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 24 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 25 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 26 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 27 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 28 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 29 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 30 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 31 ) ); + amountAccepted.push_back( exdData->getField< uint32_t >( row, 32 ) ); + lua = exdData->getField< std::string >( row, 65 ); + logMessage.push_back( exdData->getField< uint32_t >( row, 66 ) ); + logMessage.push_back( exdData->getField< uint32_t >( row, 67 ) ); } Sapphire::Data::MacroIcon::MacroIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MacroIconDat.get_row( row_id ); - icon = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_MacroIconDat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::MacroIconRedirectOld::MacroIconRedirectOld( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MacroIconRedirectOldDat.get_row( row_id ); - iconOld = exdData->getField< uint32_t >( row, 0 ); - iconNew = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_MacroIconRedirectOldDat.get_row( row_id ); + iconOld = exdData->getField< uint32_t >( row, 0 ); + iconNew = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::MainCommand::MainCommand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MainCommandDat.get_row( row_id ); - icon = exdData->getField< int32_t >( row, 0 ); - mainCommandCategory = exdData->getField< uint8_t >( row, 2 ); - name = exdData->getField< std::string >( row, 4 ); - description = exdData->getField< std::string >( row, 5 ); + auto row = exdData->m_MainCommandDat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 0 ); + category = exdData->getField< uint8_t >( row, 1 ); + mainCommandCategory = exdData->getField< uint8_t >( row, 2 ); + sortID = exdData->getField< int8_t >( row, 3 ); + name = exdData->getField< std::string >( row, 4 ); + description = exdData->getField< std::string >( row, 5 ); } Sapphire::Data::MainCommandCategory::MainCommandCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MainCommandCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_MainCommandCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::ManeuversArmor::ManeuversArmor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ManeuversArmorDat.get_row( row_id ); - bNpcBase.push_back( exdData->getField< uint32_t >( row, 1 ) ); - bNpcBase.push_back( exdData->getField< uint32_t >( row, 2 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 5 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 6 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 7 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 8 ) ); - icon.push_back( exdData->getField< uint32_t >( row, 9 ) ); + auto row = exdData->m_ManeuversArmorDat.get_row( row_id ); + bNpcBase.push_back( exdData->getField< uint32_t >( row, 1 ) ); + bNpcBase.push_back( exdData->getField< uint32_t >( row, 2 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 5 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 6 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 7 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 8 ) ); + icon.push_back( exdData->getField< uint32_t >( row, 9 ) ); } Sapphire::Data::Map::Map( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MapDat.get_row( row_id ); - mapIndex = exdData->getField< int8_t >( row, 2 ); - hierarchy = exdData->getField< uint8_t >( row, 3 ); - mapMarkerRange = exdData->getField< uint16_t >( row, 4 ); - id = exdData->getField< std::string >( row, 5 ); - sizeFactor = exdData->getField< uint16_t >( row, 6 ); - offsetX = exdData->getField< int16_t >( row, 7 ); - offsetY = exdData->getField< int16_t >( row, 8 ); - placeNameRegion = exdData->getField< uint16_t >( row, 9 ); - placeName = exdData->getField< uint16_t >( row, 10 ); - placeNameSub = exdData->getField< uint16_t >( row, 11 ); - discoveryIndex = exdData->getField< int16_t >( row, 12 ); - territoryType = exdData->getField< uint16_t >( row, 14 ); - discoveryArrayByte = exdData->getField< bool >( row, 15 ); + auto row = exdData->m_MapDat.get_row( row_id ); + mapCondition = exdData->getField< uint8_t >( row, 0 ); + priorityCategoryUI = exdData->getField< uint8_t >( row, 1 ); + priorityUI = exdData->getField< uint8_t >( row, 2 ); + mapIndex = exdData->getField< int8_t >( row, 3 ); + hierarchy = exdData->getField< uint8_t >( row, 4 ); + mapMarkerRange = exdData->getField< uint16_t >( row, 5 ); + id = exdData->getField< std::string >( row, 6 ); + sizeFactor = exdData->getField< uint16_t >( row, 7 ); + offsetX = exdData->getField< int16_t >( row, 8 ); + offsetY = exdData->getField< int16_t >( row, 9 ); + placeNameRegion = exdData->getField< uint16_t >( row, 10 ); + placeName = exdData->getField< uint16_t >( row, 11 ); + placeNameSub = exdData->getField< uint16_t >( row, 12 ); + discoveryIndex = exdData->getField< int16_t >( row, 13 ); + discoveryFlag = exdData->getField< uint32_t >( row, 14 ); + territoryType = exdData->getField< uint16_t >( row, 15 ); + discoveryArrayByte = exdData->getField< bool >( row, 16 ); + isEvent = exdData->getField< bool >( row, 17 ); } Sapphire::Data::MapMarker::MapMarker( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MapMarkerDat.get_row( row_id, subRow ); - x = exdData->getField< int16_t >( row, 0 ); - y = exdData->getField< int16_t >( row, 1 ); - icon = exdData->getField< uint16_t >( row, 2 ); - placeNameSubtext = exdData->getField< uint16_t >( row, 3 ); - subtextOrientation = exdData->getField< uint8_t >( row, 4 ); - mapMarkerRegion = exdData->getField< uint8_t >( row, 5 ); - type = exdData->getField< uint8_t >( row, 6 ); - dataType = exdData->getField< uint8_t >( row, 7 ); - dataKey = exdData->getField< uint16_t >( row, 8 ); + auto row = exdData->m_MapMarkerDat.get_row( row_id, subRow ); + x = exdData->getField< int16_t >( row, 0 ); + y = exdData->getField< int16_t >( row, 1 ); + icon = exdData->getField< uint16_t >( row, 2 ); + placeNameSubtext = exdData->getField< uint16_t >( row, 3 ); + subtextOrientation = exdData->getField< uint8_t >( row, 4 ); + mapMarkerRegion = exdData->getField< uint8_t >( row, 5 ); + type = exdData->getField< uint8_t >( row, 6 ); + dataType = exdData->getField< uint8_t >( row, 7 ); + dataKey = exdData->getField< uint16_t >( row, 8 ); } Sapphire::Data::MapMarkerRegion::MapMarkerRegion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MapMarkerRegionDat.get_row( row_id ); - x = exdData->getField< int16_t >( row, 0 ); + auto row = exdData->m_MapMarkerRegionDat.get_row( row_id ); + x = exdData->getField< int16_t >( row, 1 ); } Sapphire::Data::MapSymbol::MapSymbol( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MapSymbolDat.get_row( row_id ); - icon = exdData->getField< int32_t >( row, 0 ); - placeName = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_MapSymbolDat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 0 ); + placeName = exdData->getField< int32_t >( row, 1 ); + displayNavi = exdData->getField< bool >( row, 2 ); } Sapphire::Data::Marker::Marker( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MarkerDat.get_row( row_id ); - icon = exdData->getField< int32_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_MarkerDat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::MasterpieceSupplyDuty::MasterpieceSupplyDuty( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MasterpieceSupplyDutyDat.get_row( row_id ); - classJob = exdData->getField< uint8_t >( row, 0 ); - classJobLevel = exdData->getField< uint8_t >( row, 1 ); - rewardCurrency = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_MasterpieceSupplyDutyDat.get_row( row_id ); + classJob = exdData->getField< uint8_t >( row, 0 ); + classJobLevel = exdData->getField< uint8_t >( row, 1 ); + rewardCurrency = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::MasterpieceSupplyMultiplier::MasterpieceSupplyMultiplier( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MasterpieceSupplyMultiplierDat.get_row( row_id ); - xpMultiplier.push_back( exdData->getField< uint16_t >( row, 0 ) ); - xpMultiplier.push_back( exdData->getField< uint16_t >( row, 1 ) ); - currencyMultiplier.push_back( exdData->getField< uint16_t >( row, 4 ) ); - currencyMultiplier.push_back( exdData->getField< uint16_t >( row, 5 ) ); + auto row = exdData->m_MasterpieceSupplyMultiplierDat.get_row( row_id ); + xpMultiplier.push_back( exdData->getField< uint16_t >( row, 0 ) ); + xpMultiplier.push_back( exdData->getField< uint16_t >( row, 1 ) ); + currencyMultiplier.push_back( exdData->getField< uint16_t >( row, 4 ) ); + currencyMultiplier.push_back( exdData->getField< uint16_t >( row, 5 ) ); } Sapphire::Data::Materia::Materia( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MateriaDat.get_row( row_id ); - item.push_back( exdData->getField< int32_t >( row, 0 ) ); - item.push_back( exdData->getField< int32_t >( row, 1 ) ); - item.push_back( exdData->getField< int32_t >( row, 2 ) ); - item.push_back( exdData->getField< int32_t >( row, 3 ) ); - item.push_back( exdData->getField< int32_t >( row, 4 ) ); - item.push_back( exdData->getField< int32_t >( row, 5 ) ); - item.push_back( exdData->getField< int32_t >( row, 6 ) ); - item.push_back( exdData->getField< int32_t >( row, 7 ) ); - item.push_back( exdData->getField< int32_t >( row, 8 ) ); - item.push_back( exdData->getField< int32_t >( row, 9 ) ); - baseParam = exdData->getField< uint8_t >( row, 10 ); - value.push_back( exdData->getField< uint8_t >( row, 11 ) ); - value.push_back( exdData->getField< uint8_t >( row, 12 ) ); - value.push_back( exdData->getField< uint8_t >( row, 13 ) ); - value.push_back( exdData->getField< uint8_t >( row, 14 ) ); - value.push_back( exdData->getField< uint8_t >( row, 15 ) ); - value.push_back( exdData->getField< uint8_t >( row, 16 ) ); - value.push_back( exdData->getField< uint8_t >( row, 17 ) ); - value.push_back( exdData->getField< uint8_t >( row, 18 ) ); - value.push_back( exdData->getField< uint8_t >( row, 19 ) ); - value.push_back( exdData->getField< uint8_t >( row, 20 ) ); + auto row = exdData->m_MateriaDat.get_row( row_id ); + item.push_back( exdData->getField< int32_t >( row, 0 ) ); + item.push_back( exdData->getField< int32_t >( row, 1 ) ); + item.push_back( exdData->getField< int32_t >( row, 2 ) ); + item.push_back( exdData->getField< int32_t >( row, 3 ) ); + item.push_back( exdData->getField< int32_t >( row, 4 ) ); + item.push_back( exdData->getField< int32_t >( row, 5 ) ); + item.push_back( exdData->getField< int32_t >( row, 6 ) ); + item.push_back( exdData->getField< int32_t >( row, 7 ) ); + item.push_back( exdData->getField< int32_t >( row, 8 ) ); + item.push_back( exdData->getField< int32_t >( row, 9 ) ); + baseParam = exdData->getField< uint8_t >( row, 10 ); + value.push_back( exdData->getField< uint8_t >( row, 11 ) ); + value.push_back( exdData->getField< uint8_t >( row, 12 ) ); + value.push_back( exdData->getField< uint8_t >( row, 13 ) ); + value.push_back( exdData->getField< uint8_t >( row, 14 ) ); + value.push_back( exdData->getField< uint8_t >( row, 15 ) ); + value.push_back( exdData->getField< uint8_t >( row, 16 ) ); + value.push_back( exdData->getField< uint8_t >( row, 17 ) ); + value.push_back( exdData->getField< uint8_t >( row, 18 ) ); + value.push_back( exdData->getField< uint8_t >( row, 19 ) ); + value.push_back( exdData->getField< uint8_t >( row, 20 ) ); +} + +Sapphire::Data::MateriaJoinRate::MateriaJoinRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MateriaJoinRateDat.get_row( row_id ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 0 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 1 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 2 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 3 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 4 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 5 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 6 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 7 ) ); +} + +Sapphire::Data::MateriaJoinRateGatherCraft::MateriaJoinRateGatherCraft( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MateriaJoinRateGatherCraftDat.get_row( row_id ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 0 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 1 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 2 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 3 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 4 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 5 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 6 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 7 ) ); +} + +Sapphire::Data::MateriaTomestoneRate::MateriaTomestoneRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MateriaTomestoneRateDat.get_row( row_id ); + rate = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::MiniGameRA::MiniGameRA( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MiniGameRADat.get_row( row_id ); - icon = exdData->getField< int32_t >( row, 1 ); - bGM = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_MiniGameRADat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 1 ); + bGM = exdData->getField< int32_t >( row, 2 ); } Sapphire::Data::MinionRace::MinionRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MinionRaceDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_MinionRaceDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::MinionRules::MinionRules( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MinionRulesDat.get_row( row_id ); - rule = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_MinionRulesDat.get_row( row_id ); + rule = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::MinionSkillType::MinionSkillType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MinionSkillTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_MinionSkillTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::MobHuntOrder::MobHuntOrder( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MobHuntOrderDat.get_row( row_id, subRow ); + target = exdData->getField< uint16_t >( row, 0 ); + neededKills = exdData->getField< uint8_t >( row, 1 ); + type = exdData->getField< uint8_t >( row, 2 ); + rank = exdData->getField< uint8_t >( row, 3 ); + mobHuntReward = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::MobHuntOrderType::MobHuntOrderType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MobHuntOrderTypeDat.get_row( row_id ); - quest = exdData->getField< uint32_t >( row, 1 ); - eventItem = exdData->getField< uint32_t >( row, 2 ); + auto row = exdData->m_MobHuntOrderTypeDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + quest = exdData->getField< uint32_t >( row, 1 ); + eventItem = exdData->getField< uint32_t >( row, 2 ); + orderStart = exdData->getField< uint16_t >( row, 3 ); + orderAmount = exdData->getField< uint8_t >( row, 4 ); +} + +Sapphire::Data::MobHuntReward::MobHuntReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MobHuntRewardDat.get_row( row_id ); + expReward = exdData->getField< uint32_t >( row, 0 ); + gilReward = exdData->getField< uint16_t >( row, 1 ); + expansion = exdData->getField< uint8_t >( row, 2 ); + currencyReward = exdData->getField< uint16_t >( row, 3 ); +} + +Sapphire::Data::MobHuntRewardCap::MobHuntRewardCap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MobHuntRewardCapDat.get_row( row_id ); + expCap = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::MobHuntTarget::MobHuntTarget( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MobHuntTargetDat.get_row( row_id ); - name = exdData->getField< uint16_t >( row, 0 ); - fATE = exdData->getField< uint16_t >( row, 1 ); - icon = exdData->getField< uint32_t >( row, 2 ); - territoryType = exdData->getField< uint16_t >( row, 3 ); - placeName = exdData->getField< uint16_t >( row, 4 ); + auto row = exdData->m_MobHuntTargetDat.get_row( row_id ); + name = exdData->getField< uint16_t >( row, 0 ); + fATE = exdData->getField< uint16_t >( row, 1 ); + icon = exdData->getField< uint32_t >( row, 2 ); + territoryType = exdData->getField< uint16_t >( row, 3 ); + placeName = exdData->getField< uint16_t >( row, 4 ); } Sapphire::Data::ModelChara::ModelChara( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ModelCharaDat.get_row( row_id ); - type = exdData->getField< uint8_t >( row, 0 ); - model = exdData->getField< uint16_t >( row, 1 ); - base = exdData->getField< uint8_t >( row, 2 ); - variant = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_ModelCharaDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + model = exdData->getField< uint16_t >( row, 1 ); + base = exdData->getField< uint8_t >( row, 2 ); + variant = exdData->getField< uint8_t >( row, 3 ); + sEPack = exdData->getField< uint16_t >( row, 4 ); + papVariation = exdData->getField< bool >( row, 7 ); +} + +Sapphire::Data::ModelSkeleton::ModelSkeleton( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ModelSkeletonDat.get_row( row_id ); + radius = exdData->getField< float >( row, 0 ); + height = exdData->getField< float >( row, 1 ); + vFXScale = exdData->getField< float >( row, 2 ); + floatHeight = exdData->getField< float >( row, 11 ); + floatDown = exdData->getField< float >( row, 12 ); + floatUp = exdData->getField< uint16_t >( row, 13 ); + motionBlendType = exdData->getField< bool >( row, 15 ); + loopFlySE = exdData->getField< uint8_t >( row, 16 ); } Sapphire::Data::ModelState::ModelState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ModelStateDat.get_row( row_id ); - start = exdData->getField< uint16_t >( row, 0 ); - end = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_ModelStateDat.get_row( row_id ); + start = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::MonsterNote::MonsterNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MonsterNoteDat.get_row( row_id ); - monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 0 ) ); - monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 1 ) ); - monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 2 ) ); - monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 3 ) ); - count.push_back( exdData->getField< uint8_t >( row, 4 ) ); - count.push_back( exdData->getField< uint8_t >( row, 5 ) ); - count.push_back( exdData->getField< uint8_t >( row, 6 ) ); - count.push_back( exdData->getField< uint8_t >( row, 7 ) ); - reward = exdData->getField< uint32_t >( row, 8 ); - name = exdData->getField< std::string >( row, 9 ); + auto row = exdData->m_MonsterNoteDat.get_row( row_id ); + monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 0 ) ); + monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 1 ) ); + monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 2 ) ); + monsterNoteTarget.push_back( exdData->getField< uint16_t >( row, 3 ) ); + count.push_back( exdData->getField< uint8_t >( row, 4 ) ); + count.push_back( exdData->getField< uint8_t >( row, 5 ) ); + count.push_back( exdData->getField< uint8_t >( row, 6 ) ); + count.push_back( exdData->getField< uint8_t >( row, 7 ) ); + reward = exdData->getField< uint32_t >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); } Sapphire::Data::MonsterNoteTarget::MonsterNoteTarget( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MonsterNoteTargetDat.get_row( row_id ); - bNpcName = exdData->getField< uint16_t >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_MonsterNoteTargetDat.get_row( row_id ); + bNpcName = exdData->getField< uint16_t >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + town = exdData->getField< uint8_t >( row, 2 ); +} + +Sapphire::Data::MotionTimeline::MotionTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MotionTimelineDat.get_row( row_id ); + filename = exdData->getField< std::string >( row, 0 ); + blendGroup = exdData->getField< uint8_t >( row, 1 ); + isLoop = exdData->getField< bool >( row, 2 ); + isBlinkEnable = exdData->getField< bool >( row, 3 ); + isLipEnable = exdData->getField< bool >( row, 4 ); +} + +Sapphire::Data::MotionTimelineBlendTable::MotionTimelineBlendTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MotionTimelineBlendTableDat.get_row( row_id ); + destBlendGroup = exdData->getField< uint8_t >( row, 0 ); + srcBlendGroup = exdData->getField< uint8_t >( row, 1 ); + blendFrame_PC = exdData->getField< uint8_t >( row, 2 ); + blendFram_TypeA = exdData->getField< uint8_t >( row, 3 ); + blendFram_TypeB = exdData->getField< uint8_t >( row, 4 ); + blendFram_TypeC = exdData->getField< uint8_t >( row, 5 ); } Sapphire::Data::Mount::Mount( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MountDat.get_row( row_id ); - singular = exdData->getField< std::string >( row, 0 ); - adjective = exdData->getField< int8_t >( row, 1 ); - plural = exdData->getField< std::string >( row, 2 ); - possessivePronoun = exdData->getField< int8_t >( row, 3 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - pronoun = exdData->getField< int8_t >( row, 6 ); - article = exdData->getField< int8_t >( row, 7 ); - modelChara = exdData->getField< int32_t >( row, 8 ); - flyingCondition = exdData->getField< uint8_t >( row, 10 ); - isFlying = exdData->getField< uint8_t >( row, 14 ); - mountCustomize = exdData->getField< uint8_t >( row, 16 ); - rideBGM = exdData->getField< uint16_t >( row, 17 ); - order = exdData->getField< int16_t >( row, 29 ); - icon = exdData->getField< uint16_t >( row, 30 ); - extraSeats = exdData->getField< uint8_t >( row, 36 ); - mountAction = exdData->getField< uint16_t >( row, 37 ); - isAirborne = exdData->getField< bool >( row, 38 ); - useEP = exdData->getField< bool >( row, 40 ); - isImmobile = exdData->getField< bool >( row, 42 ); + auto row = exdData->m_MountDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); + adjective = exdData->getField< int8_t >( row, 1 ); + plural = exdData->getField< std::string >( row, 2 ); + possessivePronoun = exdData->getField< int8_t >( row, 3 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + pronoun = exdData->getField< int8_t >( row, 6 ); + article = exdData->getField< int8_t >( row, 7 ); + modelChara = exdData->getField< int32_t >( row, 8 ); + flyingCondition = exdData->getField< uint8_t >( row, 10 ); + isFlying = exdData->getField< uint8_t >( row, 14 ); + mountCustomize = exdData->getField< uint8_t >( row, 16 ); + rideBGM = exdData->getField< uint16_t >( row, 17 ); + exitMoveDist = exdData->getField< uint8_t >( row, 21 ); + exitMoveSpeed = exdData->getField< uint8_t >( row, 22 ); + isEmote = exdData->getField< bool >( row, 24 ); + equipHead = exdData->getField< int32_t >( row, 25 ); + equipBody = exdData->getField< int32_t >( row, 26 ); + equipLeg = exdData->getField< int32_t >( row, 27 ); + equipFoot = exdData->getField< int32_t >( row, 28 ); + order = exdData->getField< int16_t >( row, 29 ); + icon = exdData->getField< uint16_t >( row, 30 ); + uIPriority = exdData->getField< uint8_t >( row, 31 ); + radiusRate = exdData->getField< uint8_t >( row, 32 ); + baseMotionSpeed_Run = exdData->getField< uint8_t >( row, 33 ); + baseMotionSpeed_Walk = exdData->getField< uint8_t >( row, 34 ); + extraSeats = exdData->getField< uint8_t >( row, 36 ); + mountAction = exdData->getField< uint16_t >( row, 37 ); + isAirborne = exdData->getField< bool >( row, 38 ); + exHotbarEnableConfig = exdData->getField< bool >( row, 39 ); + useEP = exdData->getField< bool >( row, 40 ); + isImmobile = exdData->getField< bool >( row, 42 ); } Sapphire::Data::MountAction::MountAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MountActionDat.get_row( row_id ); - action.push_back( exdData->getField< uint16_t >( row, 0 ) ); - action.push_back( exdData->getField< uint16_t >( row, 1 ) ); - action.push_back( exdData->getField< uint16_t >( row, 2 ) ); - action.push_back( exdData->getField< uint16_t >( row, 3 ) ); - action.push_back( exdData->getField< uint16_t >( row, 4 ) ); - action.push_back( exdData->getField< uint16_t >( row, 5 ) ); + auto row = exdData->m_MountActionDat.get_row( row_id ); + action.push_back( exdData->getField< uint16_t >( row, 0 ) ); + action.push_back( exdData->getField< uint16_t >( row, 1 ) ); + action.push_back( exdData->getField< uint16_t >( row, 2 ) ); + action.push_back( exdData->getField< uint16_t >( row, 3 ) ); + action.push_back( exdData->getField< uint16_t >( row, 4 ) ); + action.push_back( exdData->getField< uint16_t >( row, 5 ) ); } Sapphire::Data::MountCustomize::MountCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MountCustomizeDat.get_row( row_id ); - hyurMaleScale = exdData->getField< float >( row, 1 ); - hyurFemaleScale = exdData->getField< float >( row, 2 ); - elezenMaleScale = exdData->getField< float >( row, 3 ); - elezenFemaleScale = exdData->getField< float >( row, 4 ); - lalaMaleScale = exdData->getField< float >( row, 5 ); - lalaFemaleScale = exdData->getField< float >( row, 6 ); - miqoMaleScale = exdData->getField< float >( row, 7 ); - miqoFemaleScale = exdData->getField< float >( row, 8 ); - roeMaleScale = exdData->getField< float >( row, 9 ); - roeFemaleScale = exdData->getField< float >( row, 10 ); - auRaMaleScale = exdData->getField< float >( row, 11 ); - auRaFemaleScale = exdData->getField< float >( row, 12 ); - hyurMaleCameraHeight = exdData->getField< uint8_t >( row, 13 ); - hyurFemaleCameraHeight = exdData->getField< uint8_t >( row, 14 ); - elezenMaleCameraHeight = exdData->getField< uint8_t >( row, 15 ); - elezenFemaleCameraHeight = exdData->getField< uint8_t >( row, 16 ); - lalaMaleCameraHeight = exdData->getField< uint8_t >( row, 17 ); - lalaFemaleCameraHeight = exdData->getField< uint8_t >( row, 18 ); - miqoMaleCameraHeight = exdData->getField< uint8_t >( row, 19 ); - miqoFemaleCameraHeight = exdData->getField< uint8_t >( row, 20 ); - roeMaleCameraHeight = exdData->getField< uint8_t >( row, 21 ); - roeFemaleCameraHeight = exdData->getField< uint8_t >( row, 22 ); - auRaMaleCameraHeight = exdData->getField< uint8_t >( row, 23 ); - auRaFemaleCameraHeight = exdData->getField< uint8_t >( row, 24 ); + auto row = exdData->m_MountCustomizeDat.get_row( row_id ); + hyurMaleScale = exdData->getField< uint16_t >( row, 1 ); + hyurFemaleScale = exdData->getField< uint16_t >( row, 2 ); + elezenMaleScale = exdData->getField< uint16_t >( row, 3 ); + elezenFemaleScale = exdData->getField< uint16_t >( row, 4 ); + lalaMaleScale = exdData->getField< uint16_t >( row, 5 ); + lalaFemaleScale = exdData->getField< uint16_t >( row, 6 ); + miqoMaleScale = exdData->getField< uint16_t >( row, 7 ); + miqoFemaleScale = exdData->getField< uint16_t >( row, 8 ); + roeMaleScale = exdData->getField< uint16_t >( row, 9 ); + roeFemaleScale = exdData->getField< uint16_t >( row, 10 ); + auRaMaleScale = exdData->getField< uint16_t >( row, 11 ); + auRaFemaleScale = exdData->getField< uint16_t >( row, 12 ); + hrothgarMaleScale = exdData->getField< uint16_t >( row, 13 ); + hrothgarFemaleScale = exdData->getField< uint16_t >( row, 14 ); + vieraMaleScale = exdData->getField< uint16_t >( row, 15 ); + vieraFemaleScale = exdData->getField< uint16_t >( row, 16 ); + hyurMaleCameraHeight = exdData->getField< uint8_t >( row, 17 ); + hyurFemaleCameraHeight = exdData->getField< uint8_t >( row, 18 ); + elezenMaleCameraHeight = exdData->getField< uint8_t >( row, 19 ); + elezenFemaleCameraHeight = exdData->getField< uint8_t >( row, 20 ); + lalaMaleCameraHeight = exdData->getField< uint8_t >( row, 21 ); + lalaFemaleCameraHeight = exdData->getField< uint8_t >( row, 22 ); + miqoMaleCameraHeight = exdData->getField< uint8_t >( row, 23 ); + miqoFemaleCameraHeight = exdData->getField< uint8_t >( row, 24 ); + roeMaleCameraHeight = exdData->getField< uint8_t >( row, 25 ); + roeFemaleCameraHeight = exdData->getField< uint8_t >( row, 26 ); + auRaMaleCameraHeight = exdData->getField< uint8_t >( row, 27 ); + auRaFemaleCameraHeight = exdData->getField< uint8_t >( row, 28 ); + hrothgarMaleCameraHeight = exdData->getField< uint8_t >( row, 29 ); + hrothgarRoeFemaleCameraHeight = exdData->getField< uint8_t >( row, 30 ); + vieraMaleCameraHeight = exdData->getField< uint8_t >( row, 31 ); + vieraFemaleCameraHeight = exdData->getField< uint8_t >( row, 32 ); } Sapphire::Data::MountFlyingCondition::MountFlyingCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MountFlyingConditionDat.get_row( row_id ); - quest = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_MountFlyingConditionDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::MountSpeed::MountSpeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MountSpeedDat.get_row( row_id ); - quest = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_MountSpeedDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::MountTransient::MountTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MountTransientDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); - descriptionEnhanced = exdData->getField< std::string >( row, 1 ); - tooltip = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_MountTransientDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); + descriptionEnhanced = exdData->getField< std::string >( row, 1 ); + tooltip = exdData->getField< std::string >( row, 2 ); } Sapphire::Data::MoveTimeline::MoveTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MoveTimelineDat.get_row( row_id ); - idle = exdData->getField< uint16_t >( row, 0 ); - moveForward = exdData->getField< uint16_t >( row, 1 ); - moveBack = exdData->getField< uint16_t >( row, 2 ); - moveLeft = exdData->getField< uint16_t >( row, 3 ); - moveRight = exdData->getField< uint16_t >( row, 4 ); - moveUp = exdData->getField< uint16_t >( row, 5 ); - moveDown = exdData->getField< uint16_t >( row, 6 ); - moveTurnLeft = exdData->getField< uint16_t >( row, 7 ); - moveTurnRight = exdData->getField< uint16_t >( row, 8 ); - extra = exdData->getField< uint16_t >( row, 9 ); + auto row = exdData->m_MoveTimelineDat.get_row( row_id ); + idle = exdData->getField< uint16_t >( row, 0 ); + moveForward = exdData->getField< uint16_t >( row, 1 ); + moveBack = exdData->getField< uint16_t >( row, 2 ); + moveLeft = exdData->getField< uint16_t >( row, 3 ); + moveRight = exdData->getField< uint16_t >( row, 4 ); + moveUp = exdData->getField< uint16_t >( row, 5 ); + moveDown = exdData->getField< uint16_t >( row, 6 ); + moveTurnLeft = exdData->getField< uint16_t >( row, 7 ); + moveTurnRight = exdData->getField< uint16_t >( row, 8 ); + extra = exdData->getField< uint16_t >( row, 9 ); } Sapphire::Data::MoveVfx::MoveVfx( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_MoveVfxDat.get_row( row_id ); - vFXNormal = exdData->getField< uint16_t >( row, 0 ); - vFXWalking = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_MoveVfxDat.get_row( row_id ); + vFXNormal = exdData->getField< uint16_t >( row, 0 ); + vFXWalking = exdData->getField< uint16_t >( row, 1 ); +} + +Sapphire::Data::MovieSubtitle::MovieSubtitle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MovieSubtitleDat.get_row( row_id ); + startTime = exdData->getField< float >( row, 0 ); + endTime = exdData->getField< float >( row, 1 ); +} + +Sapphire::Data::MovieSubtitle500::MovieSubtitle500( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MovieSubtitle500Dat.get_row( row_id ); + startTime = exdData->getField< float >( row, 0 ); + endTime = exdData->getField< float >( row, 1 ); +} + +Sapphire::Data::MovieSubtitleVoyage::MovieSubtitleVoyage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MovieSubtitleVoyageDat.get_row( row_id ); + startTime = exdData->getField< float >( row, 0 ); + endTime = exdData->getField< float >( row, 1 ); +} + +Sapphire::Data::MYCTemporaryItem::MYCTemporaryItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MYCTemporaryItemDat.get_row( row_id ); + category = exdData->getField< uint8_t >( row, 0 ); + type = exdData->getField< uint8_t >( row, 1 ); + action = exdData->getField< uint32_t >( row, 2 ); + max = exdData->getField< uint8_t >( row, 3 ); + weight = exdData->getField< uint8_t >( row, 4 ); + order = exdData->getField< uint8_t >( row, 5 ); +} + +Sapphire::Data::MYCTemporaryItemUICategory::MYCTemporaryItemUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MYCTemporaryItemUICategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::MYCWarResultNotebook::MYCWarResultNotebook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MYCWarResultNotebookDat.get_row( row_id ); + number = exdData->getField< uint8_t >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + image = exdData->getField< int32_t >( row, 2 ); + rarity = exdData->getField< uint8_t >( row, 3 ); + nameJP = exdData->getField< std::string >( row, 4 ); + name = exdData->getField< std::string >( row, 5 ); + description = exdData->getField< std::string >( row, 6 ); +} + +Sapphire::Data::NotebookDivision::NotebookDivision( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_NotebookDivisionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + notebookDivisionCategory = exdData->getField< uint8_t >( row, 1 ); + craftOpeningLevel = exdData->getField< uint8_t >( row, 2 ); + gatheringOpeningLevel = exdData->getField< uint8_t >( row, 3 ); + questUnlock = exdData->getField< uint32_t >( row, 4 ); + cRPCraft = exdData->getField< bool >( row, 7 ); + bSMCraft = exdData->getField< bool >( row, 8 ); + aRMCraft = exdData->getField< bool >( row, 9 ); + gSMCraft = exdData->getField< bool >( row, 10 ); + lTWCraft = exdData->getField< bool >( row, 11 ); + wVRCraft = exdData->getField< bool >( row, 12 ); + aLCCraft = exdData->getField< bool >( row, 13 ); + cULCraft = exdData->getField< bool >( row, 14 ); +} + +Sapphire::Data::NotebookDivisionCategory::NotebookDivisionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_NotebookDivisionCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + index = exdData->getField< uint8_t >( row, 1 ); +} + +Sapphire::Data::NotoriousMonster::NotoriousMonster( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_NotoriousMonsterDat.get_row( row_id ); + bNpcBase = exdData->getField< int32_t >( row, 0 ); + rank = exdData->getField< uint8_t >( row, 1 ); + bNpcName = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::NpcEquip::NpcEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_NpcEquipDat.get_row( row_id ); - modelMainHand = exdData->getField< uint64_t >( row, 0 ); - dyeMainHand = exdData->getField< uint8_t >( row, 1 ); - modelOffHand = exdData->getField< uint64_t >( row, 2 ); - dyeOffHand = exdData->getField< uint8_t >( row, 3 ); - modelHead = exdData->getField< uint32_t >( row, 4 ); - dyeHead = exdData->getField< uint8_t >( row, 5 ); - visor = exdData->getField< bool >( row, 6 ); - modelBody = exdData->getField< uint32_t >( row, 7 ); - dyeBody = exdData->getField< uint8_t >( row, 8 ); - modelHands = exdData->getField< uint32_t >( row, 9 ); - dyeHands = exdData->getField< uint8_t >( row, 10 ); - modelLegs = exdData->getField< uint32_t >( row, 11 ); - dyeLegs = exdData->getField< uint8_t >( row, 12 ); - modelFeet = exdData->getField< uint32_t >( row, 13 ); - dyeFeet = exdData->getField< uint8_t >( row, 14 ); - modelEars = exdData->getField< uint32_t >( row, 15 ); - dyeEars = exdData->getField< uint8_t >( row, 16 ); - modelNeck = exdData->getField< uint32_t >( row, 17 ); - dyeNeck = exdData->getField< uint8_t >( row, 18 ); - modelWrists = exdData->getField< uint32_t >( row, 19 ); - dyeWrists = exdData->getField< uint8_t >( row, 20 ); - modelLeftRing = exdData->getField< uint32_t >( row, 21 ); - dyeLeftRing = exdData->getField< uint8_t >( row, 22 ); - modelRightRing = exdData->getField< uint32_t >( row, 23 ); - dyeRightRing = exdData->getField< uint8_t >( row, 24 ); + auto row = exdData->m_NpcEquipDat.get_row( row_id ); + modelMainHand = exdData->getField< uint64_t >( row, 0 ); + dyeMainHand = exdData->getField< uint8_t >( row, 1 ); + modelOffHand = exdData->getField< uint64_t >( row, 2 ); + dyeOffHand = exdData->getField< uint8_t >( row, 3 ); + modelHead = exdData->getField< uint32_t >( row, 4 ); + dyeHead = exdData->getField< uint8_t >( row, 5 ); + visor = exdData->getField< bool >( row, 6 ); + modelBody = exdData->getField< uint32_t >( row, 7 ); + dyeBody = exdData->getField< uint8_t >( row, 8 ); + modelHands = exdData->getField< uint32_t >( row, 9 ); + dyeHands = exdData->getField< uint8_t >( row, 10 ); + modelLegs = exdData->getField< uint32_t >( row, 11 ); + dyeLegs = exdData->getField< uint8_t >( row, 12 ); + modelFeet = exdData->getField< uint32_t >( row, 13 ); + dyeFeet = exdData->getField< uint8_t >( row, 14 ); + modelEars = exdData->getField< uint32_t >( row, 15 ); + dyeEars = exdData->getField< uint8_t >( row, 16 ); + modelNeck = exdData->getField< uint32_t >( row, 17 ); + dyeNeck = exdData->getField< uint8_t >( row, 18 ); + modelWrists = exdData->getField< uint32_t >( row, 19 ); + dyeWrists = exdData->getField< uint8_t >( row, 20 ); + modelLeftRing = exdData->getField< uint32_t >( row, 21 ); + dyeLeftRing = exdData->getField< uint8_t >( row, 22 ); + modelRightRing = exdData->getField< uint32_t >( row, 23 ); + dyeRightRing = exdData->getField< uint8_t >( row, 24 ); } Sapphire::Data::NpcYell::NpcYell( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_NpcYellDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 9 ); + auto row = exdData->m_NpcYellDat.get_row( row_id ); + outputType = exdData->getField< uint8_t >( row, 5 ); + balloonTime = exdData->getField< float >( row, 6 ); + isBalloonSlow = exdData->getField< bool >( row, 7 ); + battleTalkTime = exdData->getField< bool >( row, 8 ); + text = exdData->getField< float >( row, 9 ); } Sapphire::Data::Omen::Omen( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_OmenDat.get_row( row_id ); - fileName = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_OmenDat.get_row( row_id ); + path = exdData->getField< std::string >( row, 0 ); + pathAlly = exdData->getField< std::string >( row, 1 ); + type = exdData->getField< uint8_t >( row, 2 ); + restrictYScale = exdData->getField< bool >( row, 3 ); + largeScale = exdData->getField< bool >( row, 4 ); } Sapphire::Data::OnlineStatus::OnlineStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_OnlineStatusDat.get_row( row_id ); - priority = exdData->getField< uint8_t >( row, 2 ); - name = exdData->getField< std::string >( row, 3 ); - icon = exdData->getField< uint32_t >( row, 4 ); + auto row = exdData->m_OnlineStatusDat.get_row( row_id ); + list = exdData->getField< bool >( row, 0 ); + priority = exdData->getField< uint8_t >( row, 2 ); + name = exdData->getField< std::string >( row, 3 ); + icon = exdData->getField< uint32_t >( row, 4 ); +} + +Sapphire::Data::OpenContent::OpenContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_OpenContentDat.get_row( row_id ); + content.push_back( exdData->getField< uint16_t >( row, 0 ) ); + content.push_back( exdData->getField< uint16_t >( row, 1 ) ); + content.push_back( exdData->getField< uint16_t >( row, 2 ) ); + content.push_back( exdData->getField< uint16_t >( row, 3 ) ); + content.push_back( exdData->getField< uint16_t >( row, 4 ) ); + content.push_back( exdData->getField< uint16_t >( row, 5 ) ); + content.push_back( exdData->getField< uint16_t >( row, 6 ) ); + content.push_back( exdData->getField< uint16_t >( row, 7 ) ); + content.push_back( exdData->getField< uint16_t >( row, 8 ) ); + content.push_back( exdData->getField< uint16_t >( row, 9 ) ); + content.push_back( exdData->getField< uint16_t >( row, 10 ) ); + content.push_back( exdData->getField< uint16_t >( row, 11 ) ); + content.push_back( exdData->getField< uint16_t >( row, 12 ) ); + content.push_back( exdData->getField< uint16_t >( row, 13 ) ); + content.push_back( exdData->getField< uint16_t >( row, 14 ) ); + content.push_back( exdData->getField< uint16_t >( row, 15 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 16 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 17 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 18 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 19 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 20 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 21 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 22 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 23 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 24 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 25 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 26 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 27 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 28 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 29 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 30 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 31 ) ); +} + +Sapphire::Data::OpenContentCandidateName::OpenContentCandidateName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_OpenContentCandidateNameDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Opening::Opening( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_OpeningDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - quest = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_OpeningDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + quest = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::Orchestrion::Orchestrion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_OrchestrionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_OrchestrionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::OrchestrionCategory::OrchestrionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_OrchestrionCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_OrchestrionCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + hideCategory = exdData->getField< uint8_t >( row, 1 ); + order = exdData->getField< uint8_t >( row, 3 ); } Sapphire::Data::OrchestrionPath::OrchestrionPath( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_OrchestrionPathDat.get_row( row_id ); - file = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_OrchestrionPathDat.get_row( row_id ); + file = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::OrchestrionUiparam::OrchestrionUiparam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_OrchestrionUiparamDat.get_row( row_id ); - orchestrionCategory = exdData->getField< uint8_t >( row, 0 ); - order = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_OrchestrionUiparamDat.get_row( row_id ); + orchestrionCategory = exdData->getField< uint8_t >( row, 0 ); + order = exdData->getField< uint16_t >( row, 1 ); +} + +Sapphire::Data::Ornament::Ornament( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_OrnamentDat.get_row( row_id ); + model = exdData->getField< uint16_t >( row, 0 ); + order = exdData->getField< int16_t >( row, 4 ); + icon = exdData->getField< uint16_t >( row, 5 ); + transient = exdData->getField< uint16_t >( row, 6 ); + singular = exdData->getField< std::string >( row, 7 ); + adjective = exdData->getField< int8_t >( row, 8 ); + plural = exdData->getField< std::string >( row, 9 ); + possessivePronoun = exdData->getField< int8_t >( row, 10 ); + startsWithVowel = exdData->getField< int8_t >( row, 11 ); + pronoun = exdData->getField< int8_t >( row, 13 ); + article = exdData->getField< int8_t >( row, 14 ); } Sapphire::Data::ParamGrow::ParamGrow( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ParamGrowDat.get_row( row_id ); - expToNext = exdData->getField< int32_t >( row, 0 ); - additionalActions = exdData->getField< uint8_t >( row, 1 ); - mpModifier = exdData->getField< int32_t >( row, 4 ); - baseSpeed = exdData->getField< int32_t >( row, 5 ); - levelModifier = exdData->getField< int32_t >( row, 6 ); - questExpModifier = exdData->getField< uint8_t >( row, 7 ); - hpModifier = exdData->getField< uint16_t >( row, 8 ); - huntingLogExpReward = exdData->getField< int32_t >( row, 9 ); + auto row = exdData->m_ParamGrowDat.get_row( row_id ); + expToNext = exdData->getField< int32_t >( row, 0 ); + additionalActions = exdData->getField< uint8_t >( row, 1 ); + applyAction = exdData->getField< uint8_t >( row, 2 ); + scaledQuestXP = exdData->getField< uint16_t >( row, 3 ); + mpModifier = exdData->getField< int32_t >( row, 4 ); + baseSpeed = exdData->getField< int32_t >( row, 5 ); + levelModifier = exdData->getField< int32_t >( row, 6 ); + questExpModifier = exdData->getField< uint8_t >( row, 7 ); + hpModifier = exdData->getField< uint16_t >( row, 8 ); + huntingLogExpReward = exdData->getField< int32_t >( row, 9 ); + monsterNoteSeals = exdData->getField< int32_t >( row, 10 ); + itemLevelSync = exdData->getField< uint16_t >( row, 11 ); + properDungeon = exdData->getField< uint16_t >( row, 12 ); + properGuildOrder = exdData->getField< uint16_t >( row, 13 ); + craftingLevel = exdData->getField< uint16_t >( row, 14 ); } Sapphire::Data::PartyContent::PartyContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PartyContentDat.get_row( row_id ); - key = exdData->getField< uint8_t >( row, 0 ); - timeLimit = exdData->getField< uint16_t >( row, 1 ); - name = exdData->getField< std::string >( row, 2 ); - textDataStart = exdData->getField< uint32_t >( row, 3 ); - textDataEnd = exdData->getField< uint32_t >( row, 4 ); - contentFinderCondition = exdData->getField< uint16_t >( row, 33 ); - image = exdData->getField< uint32_t >( row, 34 ); + auto row = exdData->m_PartyContentDat.get_row( row_id ); + key = exdData->getField< uint8_t >( row, 0 ); + timeLimit = exdData->getField< uint16_t >( row, 1 ); + name = exdData->getField< bool >( row, 2 ); + textDataStart = exdData->getField< uint32_t >( row, 3 ); + textDataEnd = exdData->getField< uint32_t >( row, 4 ); + contentFinderCondition = exdData->getField< uint16_t >( row, 33 ); + image = exdData->getField< uint32_t >( row, 34 ); } Sapphire::Data::PartyContentCutscene::PartyContentCutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PartyContentCutsceneDat.get_row( row_id ); - cutscene = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_PartyContentCutsceneDat.get_row( row_id ); + cutscene = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::PartyContentTextData::PartyContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PartyContentTextDataDat.get_row( row_id ); - data = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_PartyContentTextDataDat.get_row( row_id ); + data = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::PatchMark::PatchMark( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PatchMarkDat.get_row( row_id ); + category = exdData->getField< int8_t >( row, 0 ); + subCategoryType = exdData->getField< uint8_t >( row, 1 ); + subCategory = exdData->getField< uint16_t >( row, 2 ); + markID = exdData->getField< uint32_t >( row, 5 ); + version = exdData->getField< uint8_t >( row, 6 ); } Sapphire::Data::Perform::Perform( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PerformDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - modelKey = exdData->getField< uint64_t >( row, 2 ); - animationStart = exdData->getField< uint16_t >( row, 3 ); - animationEnd = exdData->getField< uint16_t >( row, 4 ); - animationIdle = exdData->getField< uint16_t >( row, 5 ); - animationPlay01 = exdData->getField< uint16_t >( row, 6 ); - animationPlay02 = exdData->getField< uint16_t >( row, 7 ); - stopAnimation = exdData->getField< int32_t >( row, 8 ); - instrument = exdData->getField< std::string >( row, 9 ); - transient = exdData->getField< uint8_t >( row, 11 ); + auto row = exdData->m_PerformDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + modelKey = exdData->getField< uint64_t >( row, 2 ); + animationStart = exdData->getField< uint16_t >( row, 3 ); + animationEnd = exdData->getField< uint16_t >( row, 4 ); + animationIdle = exdData->getField< uint16_t >( row, 5 ); + animationPlay01 = exdData->getField< uint16_t >( row, 6 ); + animationPlay02 = exdData->getField< uint16_t >( row, 7 ); + stopAnimation = exdData->getField< int32_t >( row, 8 ); + instrument = exdData->getField< std::string >( row, 9 ); + transient = exdData->getField< uint8_t >( row, 11 ); } Sapphire::Data::PerformTransient::PerformTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PerformTransientDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_PerformTransientDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Pet::Pet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PetDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_PetDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::PetAction::PetAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PetActionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< int32_t >( row, 2 ); - action = exdData->getField< uint16_t >( row, 3 ); - pet = exdData->getField< uint8_t >( row, 4 ); + auto row = exdData->m_PetActionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< int32_t >( row, 2 ); + action = exdData->getField< uint16_t >( row, 3 ); + pet = exdData->getField< uint8_t >( row, 4 ); + masterOrder = exdData->getField< bool >( row, 5 ); + disableOrder = exdData->getField< bool >( row, 6 ); +} + +Sapphire::Data::PhysicsGroup::PhysicsGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PhysicsGroupDat.get_row( row_id ); + simulationTime.push_back( exdData->getField< float >( row, 0 ) ); + simulationTime.push_back( exdData->getField< float >( row, 1 ) ); + simulationTime.push_back( exdData->getField< float >( row, 2 ) ); + simulationTime.push_back( exdData->getField< float >( row, 3 ) ); + simulationTime.push_back( exdData->getField< float >( row, 4 ) ); + simulationTime.push_back( exdData->getField< float >( row, 5 ) ); + pS3SimulationTime.push_back( exdData->getField< float >( row, 6 ) ); + pS3SimulationTime.push_back( exdData->getField< float >( row, 7 ) ); + pS3SimulationTime.push_back( exdData->getField< float >( row, 8 ) ); + pS3SimulationTime.push_back( exdData->getField< float >( row, 9 ) ); + pS3SimulationTime.push_back( exdData->getField< float >( row, 10 ) ); + pS3SimulationTime.push_back( exdData->getField< float >( row, 11 ) ); + resetByLookAt = exdData->getField< bool >( row, 12 ); + rootFollowingGame = exdData->getField< float >( row, 13 ); + rootFollowingCutScene = exdData->getField< float >( row, 14 ); + configSwitch.push_back( exdData->getField< int8_t >( row, 15 ) ); + configSwitch.push_back( exdData->getField< int8_t >( row, 16 ) ); + configSwitch.push_back( exdData->getField< int8_t >( row, 17 ) ); + forceAttractByPhysicsOff = exdData->getField< bool >( row, 18 ); +} + +Sapphire::Data::PhysicsWind::PhysicsWind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PhysicsWindDat.get_row( row_id ); + threshold = exdData->getField< float >( row, 0 ); + amplitude = exdData->getField< float >( row, 1 ); + amplitudeFrequency = exdData->getField< float >( row, 2 ); + powerMin = exdData->getField< float >( row, 3 ); + powerMax = exdData->getField< float >( row, 4 ); + powerFrequency = exdData->getField< float >( row, 5 ); } Sapphire::Data::Picture::Picture( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PictureDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - image = exdData->getField< int32_t >( row, 1 ); - signature = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_PictureDat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + image = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::PlaceName::PlaceName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PlaceNameDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - nameNoArticle = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_PlaceNameDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + nameNoArticle = exdData->getField< std::string >( row, 2 ); } Sapphire::Data::PlantPotFlowerSeed::PlantPotFlowerSeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PlantPotFlowerSeedDat.get_row( row_id ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 0 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 1 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 2 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 3 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 4 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 5 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 6 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 7 ) ); - seedIcon.push_back( exdData->getField< uint32_t >( row, 8 ) ); + auto row = exdData->m_PlantPotFlowerSeedDat.get_row( row_id ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 0 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 1 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 2 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 3 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 4 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 5 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 6 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 7 ) ); + seedIcon.push_back( exdData->getField< uint32_t >( row, 8 ) ); } Sapphire::Data::PreHandler::PreHandler( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PreHandlerDat.get_row( row_id ); - gilShop = exdData->getField< uint32_t >( row, 0 ); - actionTimeline = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_PreHandlerDat.get_row( row_id ); + image = exdData->getField< uint32_t >( row, 1 ); + target = exdData->getField< uint32_t >( row, 2 ); + unlockQuest = exdData->getField< uint32_t >( row, 3 ); + acceptMessage = exdData->getField< uint32_t >( row, 4 ); + denyMessage = exdData->getField< uint32_t >( row, 5 ); +} + +Sapphire::Data::PresetCamera::PresetCamera( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PresetCameraDat.get_row( row_id ); + eID = exdData->getField< uint16_t >( row, 0 ); + posX = exdData->getField< float >( row, 1 ); + posY = exdData->getField< float >( row, 2 ); + posZ = exdData->getField< float >( row, 3 ); + elezen = exdData->getField< float >( row, 4 ); + lalafell = exdData->getField< float >( row, 5 ); + miqote = exdData->getField< float >( row, 6 ); + roe = exdData->getField< float >( row, 7 ); + hrothgar = exdData->getField< float >( row, 8 ); + viera = exdData->getField< float >( row, 9 ); + hyur_F = exdData->getField< float >( row, 10 ); + elezen_F = exdData->getField< float >( row, 11 ); + lalafell_F = exdData->getField< float >( row, 12 ); + miqote_F = exdData->getField< float >( row, 13 ); + roe_F = exdData->getField< float >( row, 14 ); + hrothgar_F = exdData->getField< float >( row, 15 ); + viera_F = exdData->getField< float >( row, 16 ); +} + +Sapphire::Data::PresetCameraAdjust::PresetCameraAdjust( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PresetCameraAdjustDat.get_row( row_id ); + hyur_M = exdData->getField< float >( row, 0 ); + hyur_F = exdData->getField< float >( row, 1 ); + elezen_M = exdData->getField< float >( row, 2 ); + elezen_F = exdData->getField< float >( row, 3 ); + lalafell_M = exdData->getField< float >( row, 4 ); + lalafell_F = exdData->getField< float >( row, 5 ); + miqote_M = exdData->getField< float >( row, 6 ); + miqote_F = exdData->getField< float >( row, 7 ); + roe_M = exdData->getField< float >( row, 8 ); + roe_F = exdData->getField< float >( row, 9 ); + hrothgar_M = exdData->getField< float >( row, 10 ); + hrothgar_F = exdData->getField< float >( row, 11 ); + viera_M = exdData->getField< float >( row, 12 ); + viera_F = exdData->getField< float >( row, 13 ); } Sapphire::Data::PublicContent::PublicContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PublicContentDat.get_row( row_id ); - type = exdData->getField< uint8_t >( row, 0 ); - timeLimit = exdData->getField< uint16_t >( row, 1 ); - mapIcon = exdData->getField< uint32_t >( row, 2 ); - name = exdData->getField< std::string >( row, 3 ); - textDataStart = exdData->getField< uint32_t >( row, 4 ); - textDataEnd = exdData->getField< uint32_t >( row, 5 ); - contentFinderCondition = exdData->getField< uint16_t >( row, 8 ); - additionalData = exdData->getField< uint16_t >( row, 9 ); + auto row = exdData->m_PublicContentDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + timeLimit = exdData->getField< uint16_t >( row, 1 ); + mapIcon = exdData->getField< uint32_t >( row, 2 ); + name = exdData->getField< std::string >( row, 3 ); + textDataStart = exdData->getField< uint32_t >( row, 4 ); + textDataEnd = exdData->getField< uint32_t >( row, 5 ); + contentFinderCondition = exdData->getField< uint16_t >( row, 9 ); + additionalData = exdData->getField< uint16_t >( row, 10 ); } Sapphire::Data::PublicContentCutscene::PublicContentCutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PublicContentCutsceneDat.get_row( row_id ); - cutscene = exdData->getField< uint32_t >( row, 0 ); - cutscene2 = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_PublicContentCutsceneDat.get_row( row_id ); + cutscene = exdData->getField< uint32_t >( row, 0 ); + cutscene2 = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::PublicContentTextData::PublicContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PublicContentTextDataDat.get_row( row_id ); - textData = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_PublicContentTextDataDat.get_row( row_id ); + textData = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::Purify::Purify( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PurifyDat.get_row( row_id ); + _class = exdData->getField< uint8_t >( row, 0 ); + level = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::PvPAction::PvPAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PvPActionDat.get_row( row_id ); - action = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_PvPActionDat.get_row( row_id ); + action = exdData->getField< uint16_t >( row, 0 ); + grandCompany.push_back( exdData->getField< bool >( row, 5 ) ); + grandCompany.push_back( exdData->getField< bool >( row, 6 ) ); + grandCompany.push_back( exdData->getField< bool >( row, 7 ) ); } Sapphire::Data::PvPActionSort::PvPActionSort( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PvPActionSortDat.get_row( row_id, subRow ); - name = exdData->getField< uint8_t >( row, 0 ); - action = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_PvPActionSortDat.get_row( row_id, subRow ); + name = exdData->getField< uint8_t >( row, 0 ); + action = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::PvPRank::PvPRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PvPRankDat.get_row( row_id ); - expRequired = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_PvPRankDat.get_row( row_id ); + expRequired = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::PvPSelectTrait::PvPSelectTrait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PvPSelectTraitDat.get_row( row_id ); - effect = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< uint32_t >( row, 1 ); - value = exdData->getField< int16_t >( row, 2 ); + auto row = exdData->m_PvPSelectTraitDat.get_row( row_id ); + effect = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< uint32_t >( row, 1 ); + value = exdData->getField< int16_t >( row, 2 ); } Sapphire::Data::PvPTrait::PvPTrait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_PvPTraitDat.get_row( row_id ); - trait1 = exdData->getField< uint16_t >( row, 0 ); - trait2 = exdData->getField< uint16_t >( row, 1 ); - trait3 = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_PvPTraitDat.get_row( row_id ); + trait1 = exdData->getField< uint16_t >( row, 0 ); + trait2 = exdData->getField< uint16_t >( row, 1 ); + trait3 = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuestDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - id = exdData->getField< std::string >( row, 1 ); - expansion = exdData->getField< uint8_t >( row, 2 ); - classJobCategory0 = exdData->getField< uint8_t >( row, 3 ); - classJobLevel0 = exdData->getField< uint16_t >( row, 4 ); - questLevelOffset = exdData->getField< uint8_t >( row, 5 ); - levelMax = exdData->getField< uint16_t >( row, 6 ); - classJobCategory1 = exdData->getField< uint8_t >( row, 7 ); - classJobLevel1 = exdData->getField< uint16_t >( row, 8 ); - previousQuestJoin = exdData->getField< uint8_t >( row, 9 ); - previousQuest0 = exdData->getField< uint32_t >( row, 10 ); - previousQuest1 = exdData->getField< uint32_t >( row, 12 ); - previousQuest2 = exdData->getField< uint32_t >( row, 13 ); - questLockJoin = exdData->getField< uint8_t >( row, 14 ); - questLock.push_back( exdData->getField< uint32_t >( row, 15 ) ); - questLock.push_back( exdData->getField< uint32_t >( row, 16 ) ); - classJobUnlock = exdData->getField< uint8_t >( row, 20 ); - grandCompany = exdData->getField< uint8_t >( row, 21 ); - grandCompanyRank = exdData->getField< uint8_t >( row, 22 ); - instanceContentJoin = exdData->getField< uint8_t >( row, 23 ); - instanceContent.push_back( exdData->getField< uint32_t >( row, 24 ) ); - instanceContent.push_back( exdData->getField< uint32_t >( row, 25 ) ); - instanceContent.push_back( exdData->getField< uint32_t >( row, 26 ) ); - festival = exdData->getField< uint8_t >( row, 27 ); - bellStart = exdData->getField< uint16_t >( row, 30 ); - bellEnd = exdData->getField< uint16_t >( row, 31 ); - beastTribe = exdData->getField< uint8_t >( row, 32 ); - beastReputationRank = exdData->getField< uint8_t >( row, 33 ); - mountRequired = exdData->getField< int32_t >( row, 37 ); - isHouseRequired = exdData->getField< bool >( row, 38 ); - deliveryQuest = exdData->getField< uint8_t >( row, 39 ); - issuerStart = exdData->getField< uint32_t >( row, 40 ); - behavior = exdData->getField< uint16_t >( row, 41 ); - targetEnd = exdData->getField< uint32_t >( row, 42 ); - isRepeatable = exdData->getField< bool >( row, 43 ); - repeatIntervalType = exdData->getField< uint8_t >( row, 44 ); - questRepeatFlag = exdData->getField< uint8_t >( row, 45 ); - unlocksSystemContent = exdData->getField< bool >( row, 46 ); - type = exdData->getField< uint8_t >( row, 48 ); - questClassJobSupply = exdData->getField< uint16_t >( row, 49 ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 50 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 51 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 52 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 53 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 54 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 55 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 56 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 57 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 58 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 59 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 60 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 61 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 62 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 63 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 64 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 65 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 66 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 67 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 68 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 69 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 70 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 71 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 72 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 73 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 74 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 75 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 76 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 77 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 78 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 79 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 80 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 81 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 82 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 83 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 84 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 85 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 86 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 87 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 88 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 89 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 90 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 91 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 92 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 93 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 94 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 95 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 96 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 97 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 98 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 99 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 100 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 101 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 102 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 103 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 104 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 105 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 106 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 107 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 108 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 109 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 110 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 111 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 112 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 113 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 114 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 115 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 116 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 117 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 118 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 119 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 120 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 121 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 122 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 123 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 124 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 125 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 126 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 127 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 128 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 129 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 130 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 131 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 132 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 133 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 134 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 135 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 136 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 137 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 138 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 139 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 140 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 141 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 142 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 143 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 144 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 145 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 146 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 147 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 148 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 149 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 150 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 151 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 152 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 153 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 154 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 155 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 156 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 157 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 158 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 159 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 160 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 161 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 162 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 163 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 164 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 165 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 166 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 167 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 168 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 169 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 170 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 171 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 172 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 173 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 174 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 175 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 176 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 177 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 178 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 179 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 180 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 181 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 182 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 183 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 184 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 185 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 186 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 187 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 188 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 189 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 190 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 191 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 192 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 193 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 194 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 195 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 196 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 197 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 198 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 199 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 200 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 201 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 202 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 203 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 204 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 205 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 206 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 207 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 208 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 209 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 210 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 211 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 212 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 213 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 214 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 215 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 216 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 217 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 218 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 219 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 220 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 221 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 222 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 223 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 224 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 225 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 226 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 227 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 228 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 229 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 230 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 231 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 232 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 233 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 234 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 235 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 236 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 237 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 238 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 239 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 240 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 241 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 242 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 243 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 244 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 245 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 246 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 247 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 248 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 249 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 250 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 251 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 252 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 253 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 254 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 255 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 256 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 257 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 258 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 259 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 260 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 261 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 262 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 263 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 264 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 265 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 266 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 267 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 268 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 269 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 270 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 271 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 272 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 273 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 274 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 275 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 276 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 277 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 278 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 279 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 280 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 281 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 282 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 283 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 284 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 285 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 286 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 287 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 288 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 289 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 290 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 291 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 292 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 293 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 294 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 295 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 296 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 297 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 298 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 299 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 300 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 301 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 302 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 303 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 304 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 305 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 306 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 307 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 308 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 309 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 310 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 311 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 312 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 313 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 314 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 315 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 316 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 317 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 318 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 319 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 320 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 321 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 322 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 323 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 324 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 325 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 326 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 327 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 328 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 329 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 330 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 331 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 332 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 333 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 334 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 335 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 336 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 337 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 338 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 339 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 340 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 341 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 342 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 343 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 344 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 345 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 346 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 347 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 348 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 349 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 350 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 351 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 352 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 353 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 354 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 355 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 356 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 357 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 358 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 359 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 360 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 361 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 362 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 363 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 364 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 365 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 366 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 367 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 368 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 369 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 370 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 371 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 372 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 373 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 374 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 375 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 376 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 377 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 378 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 379 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 380 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 381 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 382 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 383 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 384 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 385 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 386 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 387 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 388 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 389 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 390 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 391 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 392 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 393 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 394 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 395 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 396 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 397 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 398 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 399 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 400 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 401 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 402 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 403 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 404 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 405 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1174 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1175 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1176 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1177 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1178 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1179 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1180 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1181 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1182 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1183 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1184 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1185 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1186 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1187 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1188 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1189 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1190 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1191 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1192 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1193 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1194 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1195 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1196 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1197 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1198 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1199 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1200 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1201 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1202 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1203 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1204 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1205 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1206 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1207 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1208 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1209 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1210 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1211 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1212 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1213 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1214 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1215 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1216 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1217 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1218 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1219 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1220 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1221 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1222 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1223 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1224 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1225 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1226 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1227 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1228 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1229 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1230 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1231 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1232 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1233 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1234 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1235 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1236 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1237 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1238 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1239 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1240 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1241 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1242 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1243 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1244 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1245 ) ); - classJobRequired = exdData->getField< uint8_t >( row, 1438 ); - expFactor = exdData->getField< uint16_t >( row, 1440 ); - gilReward = exdData->getField< uint32_t >( row, 1441 ); - gCSeals = exdData->getField< uint16_t >( row, 1443 ); - itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1444 ) ); - itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1445 ) ); - itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1446 ) ); - itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1447 ) ); - itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1448 ) ); - itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1449 ) ); - itemRewardType = exdData->getField< uint8_t >( row, 1450 ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1451 ) ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1452 ) ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1453 ) ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1454 ) ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1455 ) ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1456 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1458 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1459 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1460 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1461 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1462 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1463 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1465 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1466 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1467 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1468 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1469 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1470 ) ); - itemReward1.push_back( exdData->getField< uint32_t >( row, 1472 ) ); - itemReward1.push_back( exdData->getField< uint32_t >( row, 1473 ) ); - itemReward1.push_back( exdData->getField< uint32_t >( row, 1474 ) ); - itemReward1.push_back( exdData->getField< uint32_t >( row, 1475 ) ); - itemReward1.push_back( exdData->getField< uint32_t >( row, 1476 ) ); - itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1477 ) ); - itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1478 ) ); - itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1479 ) ); - itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1480 ) ); - itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1481 ) ); - isHQReward1.push_back( exdData->getField< bool >( row, 1482 ) ); - isHQReward1.push_back( exdData->getField< bool >( row, 1483 ) ); - isHQReward1.push_back( exdData->getField< bool >( row, 1484 ) ); - isHQReward1.push_back( exdData->getField< bool >( row, 1485 ) ); - isHQReward1.push_back( exdData->getField< bool >( row, 1486 ) ); - stainReward1.push_back( exdData->getField< uint8_t >( row, 1487 ) ); - stainReward1.push_back( exdData->getField< uint8_t >( row, 1488 ) ); - stainReward1.push_back( exdData->getField< uint8_t >( row, 1489 ) ); - stainReward1.push_back( exdData->getField< uint8_t >( row, 1490 ) ); - stainReward1.push_back( exdData->getField< uint8_t >( row, 1491 ) ); - emoteReward = exdData->getField< uint8_t >( row, 1492 ); - actionReward = exdData->getField< uint16_t >( row, 1493 ); - generalActionReward.push_back( exdData->getField< uint8_t >( row, 1494 ) ); - generalActionReward.push_back( exdData->getField< uint8_t >( row, 1495 ) ); - otherReward = exdData->getField< uint8_t >( row, 1497 ); - instanceContentUnlock = exdData->getField< uint32_t >( row, 1500 ); - tomestoneReward = exdData->getField< uint8_t >( row, 1502 ); - tomestoneCountReward = exdData->getField< uint8_t >( row, 1503 ); - reputationReward = exdData->getField< uint8_t >( row, 1504 ); - placeName = exdData->getField< uint16_t >( row, 1505 ); - journalGenre = exdData->getField< uint8_t >( row, 1506 ); - icon = exdData->getField< uint32_t >( row, 1508 ); - iconSpecial = exdData->getField< uint32_t >( row, 1509 ); - eventIconType = exdData->getField< uint8_t >( row, 1512 ); - sortKey = exdData->getField< uint16_t >( row, 1514 ); + auto row = exdData->m_QuestDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + id = exdData->getField< std::string >( row, 1 ); + expansion = exdData->getField< uint8_t >( row, 2 ); + classJobCategory0 = exdData->getField< uint8_t >( row, 3 ); + classJobLevel0 = exdData->getField< uint16_t >( row, 4 ); + questLevelOffset = exdData->getField< uint8_t >( row, 5 ); + classJobCategory1 = exdData->getField< uint8_t >( row, 6 ); + classJobLevel1 = exdData->getField< uint16_t >( row, 7 ); + previousQuestJoin = exdData->getField< uint8_t >( row, 8 ); + previousQuest0 = exdData->getField< uint32_t >( row, 9 ); + previousQuest1 = exdData->getField< uint32_t >( row, 11 ); + previousQuest2 = exdData->getField< uint32_t >( row, 12 ); + questLockJoin = exdData->getField< uint8_t >( row, 13 ); + questLock.push_back( exdData->getField< uint32_t >( row, 14 ) ); + questLock.push_back( exdData->getField< uint32_t >( row, 15 ) ); + header = exdData->getField< uint16_t >( row, 16 ); + classJobUnlock = exdData->getField< uint8_t >( row, 19 ); + grandCompany = exdData->getField< uint8_t >( row, 20 ); + grandCompanyRank = exdData->getField< uint8_t >( row, 21 ); + instanceContentJoin = exdData->getField< uint8_t >( row, 22 ); + instanceContent.push_back( exdData->getField< uint32_t >( row, 23 ) ); + instanceContent.push_back( exdData->getField< uint32_t >( row, 24 ) ); + instanceContent.push_back( exdData->getField< uint32_t >( row, 25 ) ); + festival = exdData->getField< uint8_t >( row, 26 ); + festivalBegin = exdData->getField< uint8_t >( row, 27 ); + festivalEnd = exdData->getField< uint8_t >( row, 28 ); + bellStart = exdData->getField< uint16_t >( row, 29 ); + bellEnd = exdData->getField< uint16_t >( row, 30 ); + beastTribe = exdData->getField< uint8_t >( row, 31 ); + beastReputationRank = exdData->getField< uint8_t >( row, 32 ); + beastReputationValue = exdData->getField< uint16_t >( row, 33 ); + mountRequired = exdData->getField< int32_t >( row, 36 ); + isHouseRequired = exdData->getField< bool >( row, 37 ); + deliveryQuest = exdData->getField< uint8_t >( row, 38 ); + issuerStart = exdData->getField< uint32_t >( row, 39 ); + issuerLocation = exdData->getField< uint32_t >( row, 40 ); + clientBehavior = exdData->getField< uint16_t >( row, 41 ); + targetEnd = exdData->getField< uint32_t >( row, 42 ); + isRepeatable = exdData->getField< bool >( row, 43 ); + repeatIntervalType = exdData->getField< uint8_t >( row, 44 ); + questRepeatFlag = exdData->getField< uint8_t >( row, 45 ); + canCancel = exdData->getField< bool >( row, 46 ); + type = exdData->getField< uint8_t >( row, 47 ); + questClassJobSupply = exdData->getField< uint16_t >( row, 48 ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 49 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 50 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 51 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 52 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 53 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 54 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 55 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 56 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 57 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 58 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 59 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 60 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 61 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 62 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 63 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 64 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 65 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 66 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 67 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 68 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 69 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 70 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 71 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 72 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 73 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 74 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 75 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 76 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 77 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 78 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 79 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 80 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 81 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 82 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 83 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 84 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 85 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 86 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 87 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 88 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 89 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 90 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 91 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 92 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 93 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 94 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 95 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 96 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 97 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 98 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 99 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 100 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 101 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 102 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 103 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 104 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 105 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 106 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 107 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 108 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 109 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 110 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 111 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 112 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 113 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 114 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 115 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 116 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 117 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 118 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 119 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 120 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 121 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 122 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 123 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 124 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 125 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 126 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 127 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 128 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 129 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 130 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 131 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 132 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 133 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 134 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 135 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 136 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 137 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 138 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 139 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 140 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 141 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 142 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 143 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 144 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 145 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 146 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 147 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 148 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 149 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 150 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 151 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 152 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 153 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 154 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 155 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 156 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 157 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 158 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 159 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 160 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 161 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 162 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 163 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 164 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 165 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 166 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 167 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 168 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 169 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 170 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 171 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 172 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 173 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 174 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 175 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 176 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 177 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 178 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 179 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 180 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 181 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 182 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 183 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 184 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 185 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 186 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 187 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 188 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 189 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 190 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 191 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 192 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 193 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 194 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 195 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 196 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 197 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 198 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 199 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 200 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 201 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 202 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 203 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 204 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 205 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 206 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 207 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 208 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 209 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 210 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 211 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 212 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 213 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 214 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 215 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 216 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 217 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 218 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 219 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 220 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 221 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 222 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 223 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 224 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 225 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 226 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 227 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 228 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 229 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 230 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 231 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 232 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 233 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 234 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 235 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 236 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 237 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 238 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 239 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 240 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 241 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 242 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 243 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 244 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 245 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 246 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 247 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 248 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 249 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 250 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 251 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 252 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 253 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 254 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 255 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 256 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 257 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 258 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 259 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 260 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 261 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 262 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 263 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 264 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 265 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 266 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 267 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 268 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 269 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 270 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 271 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 272 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 273 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 274 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 275 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 276 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 277 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 278 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 279 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 280 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 281 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 282 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 283 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 284 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 285 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 286 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 287 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 288 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 289 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 290 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 291 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 292 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 293 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 294 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 295 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 296 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 297 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 298 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 299 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 300 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 301 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 302 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 303 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 304 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 305 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 306 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 307 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 308 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 309 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 310 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 311 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 312 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 313 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 314 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 315 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 316 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 317 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 318 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 319 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 320 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 321 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 322 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 323 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 324 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 325 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 326 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 327 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 328 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 329 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 330 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 331 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 332 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 333 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 334 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 335 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 336 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 337 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 338 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 339 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 340 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 341 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 342 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 343 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 344 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 345 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 346 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 347 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 348 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 349 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 350 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 351 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 352 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 353 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 354 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 355 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 356 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 357 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 358 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 359 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 360 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 361 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 362 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 363 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 364 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 365 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 366 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 367 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 368 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 369 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 370 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 371 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 372 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 373 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 374 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 375 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 376 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 377 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 378 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 379 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 380 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 381 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 382 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 383 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 384 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 385 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 386 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 387 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 388 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 389 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 390 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 391 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 392 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 393 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 394 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 395 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 396 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 397 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 398 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 399 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 400 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 401 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 402 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 403 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 404 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 405 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 406 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 407 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 408 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 409 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 410 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 411 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 412 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 413 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 414 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 415 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 416 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 417 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 418 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 419 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 420 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 421 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 422 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 423 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 424 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 425 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 426 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 427 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 428 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 429 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 430 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 431 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 432 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 433 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 434 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 435 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 436 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 437 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 438 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 439 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 440 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 441 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 442 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 443 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 444 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 445 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 446 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 447 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 448 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 449 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 450 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 451 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 452 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 453 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 454 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 455 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 456 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 457 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 458 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 459 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 460 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 461 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 462 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 463 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 464 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 465 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 466 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 467 ) ); + conditionType.push_back( exdData->getField< uint8_t >( row, 468 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 469 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 470 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 471 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 472 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 473 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 474 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 475 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 476 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 477 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 478 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 479 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 480 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 481 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 482 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 483 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 484 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 485 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 486 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 487 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 488 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 489 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 490 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 491 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 492 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 493 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 494 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 495 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 496 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 497 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 498 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 499 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 500 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 501 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 502 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 503 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 504 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 505 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 506 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 507 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 508 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 509 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 510 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 511 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 512 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 513 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 514 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 515 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 516 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 517 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 518 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 519 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 520 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 521 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 522 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 523 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 524 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 525 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 526 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 527 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 528 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 529 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 530 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 531 ) ); + conditionValue.push_back( exdData->getField< uint32_t >( row, 532 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 533 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 534 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 535 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 536 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 537 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 538 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 539 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 540 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 541 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 542 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 543 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 544 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 545 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 546 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 547 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 548 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 549 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 550 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 551 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 552 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 553 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 554 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 555 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 556 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 557 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 558 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 559 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 560 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 561 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 562 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 563 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 564 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 565 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 566 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 567 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 568 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 569 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 570 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 571 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 572 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 573 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 574 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 575 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 576 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 577 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 578 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 579 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 580 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 581 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 582 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 583 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 584 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 585 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 586 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 587 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 588 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 589 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 590 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 591 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 592 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 593 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 594 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 595 ) ); + conditionOperator.push_back( exdData->getField< uint8_t >( row, 596 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 597 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 598 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 599 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 600 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 601 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 602 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 603 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 604 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 605 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 606 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 607 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 608 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 609 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 610 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 611 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 612 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 613 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 614 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 615 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 616 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 617 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 618 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 619 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 620 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 621 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 622 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 623 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 624 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 625 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 626 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 627 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 628 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 629 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 630 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 631 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 632 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 633 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 634 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 635 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 636 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 637 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 638 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 639 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 640 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 641 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 642 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 643 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 644 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 645 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 646 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 647 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 648 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 649 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 650 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 651 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 652 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 653 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 654 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 655 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 656 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 657 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 658 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 659 ) ); + behavior.push_back( exdData->getField< uint16_t >( row, 660 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 661 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 662 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 663 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 664 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 665 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 666 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 667 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 668 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 669 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 670 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 671 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 672 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 673 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 674 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 675 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 676 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 677 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 678 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 679 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 680 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 681 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 682 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 683 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 684 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 685 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 686 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 687 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 688 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 689 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 690 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 691 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 692 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 693 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 694 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 695 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 696 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 697 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 698 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 699 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 700 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 701 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 702 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 703 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 704 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 705 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 706 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 707 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 708 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 709 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 710 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 711 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 712 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 713 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 714 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 715 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 716 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 717 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 718 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 719 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 720 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 721 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 722 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 723 ) ); + visibleBool.push_back( exdData->getField< bool >( row, 724 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 725 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 726 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 727 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 728 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 729 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 730 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 731 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 732 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 733 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 734 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 735 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 736 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 737 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 738 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 739 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 740 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 741 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 742 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 743 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 744 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 745 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 746 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 747 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 748 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 749 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 750 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 751 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 752 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 753 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 754 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 755 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 756 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 757 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 758 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 759 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 760 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 761 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 762 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 763 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 764 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 765 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 766 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 767 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 768 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 769 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 770 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 771 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 772 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 773 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 774 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 775 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 776 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 777 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 778 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 779 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 780 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 781 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 782 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 783 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 784 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 785 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 786 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 787 ) ); + conditionBool.push_back( exdData->getField< bool >( row, 788 ) ); + itemBool.push_back( exdData->getField< bool >( row, 789 ) ); + itemBool.push_back( exdData->getField< bool >( row, 790 ) ); + itemBool.push_back( exdData->getField< bool >( row, 791 ) ); + itemBool.push_back( exdData->getField< bool >( row, 792 ) ); + itemBool.push_back( exdData->getField< bool >( row, 793 ) ); + itemBool.push_back( exdData->getField< bool >( row, 794 ) ); + itemBool.push_back( exdData->getField< bool >( row, 795 ) ); + itemBool.push_back( exdData->getField< bool >( row, 796 ) ); + itemBool.push_back( exdData->getField< bool >( row, 797 ) ); + itemBool.push_back( exdData->getField< bool >( row, 798 ) ); + itemBool.push_back( exdData->getField< bool >( row, 799 ) ); + itemBool.push_back( exdData->getField< bool >( row, 800 ) ); + itemBool.push_back( exdData->getField< bool >( row, 801 ) ); + itemBool.push_back( exdData->getField< bool >( row, 802 ) ); + itemBool.push_back( exdData->getField< bool >( row, 803 ) ); + itemBool.push_back( exdData->getField< bool >( row, 804 ) ); + itemBool.push_back( exdData->getField< bool >( row, 805 ) ); + itemBool.push_back( exdData->getField< bool >( row, 806 ) ); + itemBool.push_back( exdData->getField< bool >( row, 807 ) ); + itemBool.push_back( exdData->getField< bool >( row, 808 ) ); + itemBool.push_back( exdData->getField< bool >( row, 809 ) ); + itemBool.push_back( exdData->getField< bool >( row, 810 ) ); + itemBool.push_back( exdData->getField< bool >( row, 811 ) ); + itemBool.push_back( exdData->getField< bool >( row, 812 ) ); + itemBool.push_back( exdData->getField< bool >( row, 813 ) ); + itemBool.push_back( exdData->getField< bool >( row, 814 ) ); + itemBool.push_back( exdData->getField< bool >( row, 815 ) ); + itemBool.push_back( exdData->getField< bool >( row, 816 ) ); + itemBool.push_back( exdData->getField< bool >( row, 817 ) ); + itemBool.push_back( exdData->getField< bool >( row, 818 ) ); + itemBool.push_back( exdData->getField< bool >( row, 819 ) ); + itemBool.push_back( exdData->getField< bool >( row, 820 ) ); + itemBool.push_back( exdData->getField< bool >( row, 821 ) ); + itemBool.push_back( exdData->getField< bool >( row, 822 ) ); + itemBool.push_back( exdData->getField< bool >( row, 823 ) ); + itemBool.push_back( exdData->getField< bool >( row, 824 ) ); + itemBool.push_back( exdData->getField< bool >( row, 825 ) ); + itemBool.push_back( exdData->getField< bool >( row, 826 ) ); + itemBool.push_back( exdData->getField< bool >( row, 827 ) ); + itemBool.push_back( exdData->getField< bool >( row, 828 ) ); + itemBool.push_back( exdData->getField< bool >( row, 829 ) ); + itemBool.push_back( exdData->getField< bool >( row, 830 ) ); + itemBool.push_back( exdData->getField< bool >( row, 831 ) ); + itemBool.push_back( exdData->getField< bool >( row, 832 ) ); + itemBool.push_back( exdData->getField< bool >( row, 833 ) ); + itemBool.push_back( exdData->getField< bool >( row, 834 ) ); + itemBool.push_back( exdData->getField< bool >( row, 835 ) ); + itemBool.push_back( exdData->getField< bool >( row, 836 ) ); + itemBool.push_back( exdData->getField< bool >( row, 837 ) ); + itemBool.push_back( exdData->getField< bool >( row, 838 ) ); + itemBool.push_back( exdData->getField< bool >( row, 839 ) ); + itemBool.push_back( exdData->getField< bool >( row, 840 ) ); + itemBool.push_back( exdData->getField< bool >( row, 841 ) ); + itemBool.push_back( exdData->getField< bool >( row, 842 ) ); + itemBool.push_back( exdData->getField< bool >( row, 843 ) ); + itemBool.push_back( exdData->getField< bool >( row, 844 ) ); + itemBool.push_back( exdData->getField< bool >( row, 845 ) ); + itemBool.push_back( exdData->getField< bool >( row, 846 ) ); + itemBool.push_back( exdData->getField< bool >( row, 847 ) ); + itemBool.push_back( exdData->getField< bool >( row, 848 ) ); + itemBool.push_back( exdData->getField< bool >( row, 849 ) ); + itemBool.push_back( exdData->getField< bool >( row, 850 ) ); + itemBool.push_back( exdData->getField< bool >( row, 851 ) ); + itemBool.push_back( exdData->getField< bool >( row, 852 ) ); + announceBool.push_back( exdData->getField< bool >( row, 853 ) ); + announceBool.push_back( exdData->getField< bool >( row, 854 ) ); + announceBool.push_back( exdData->getField< bool >( row, 855 ) ); + announceBool.push_back( exdData->getField< bool >( row, 856 ) ); + announceBool.push_back( exdData->getField< bool >( row, 857 ) ); + announceBool.push_back( exdData->getField< bool >( row, 858 ) ); + announceBool.push_back( exdData->getField< bool >( row, 859 ) ); + announceBool.push_back( exdData->getField< bool >( row, 860 ) ); + announceBool.push_back( exdData->getField< bool >( row, 861 ) ); + announceBool.push_back( exdData->getField< bool >( row, 862 ) ); + announceBool.push_back( exdData->getField< bool >( row, 863 ) ); + announceBool.push_back( exdData->getField< bool >( row, 864 ) ); + announceBool.push_back( exdData->getField< bool >( row, 865 ) ); + announceBool.push_back( exdData->getField< bool >( row, 866 ) ); + announceBool.push_back( exdData->getField< bool >( row, 867 ) ); + announceBool.push_back( exdData->getField< bool >( row, 868 ) ); + announceBool.push_back( exdData->getField< bool >( row, 869 ) ); + announceBool.push_back( exdData->getField< bool >( row, 870 ) ); + announceBool.push_back( exdData->getField< bool >( row, 871 ) ); + announceBool.push_back( exdData->getField< bool >( row, 872 ) ); + announceBool.push_back( exdData->getField< bool >( row, 873 ) ); + announceBool.push_back( exdData->getField< bool >( row, 874 ) ); + announceBool.push_back( exdData->getField< bool >( row, 875 ) ); + announceBool.push_back( exdData->getField< bool >( row, 876 ) ); + announceBool.push_back( exdData->getField< bool >( row, 877 ) ); + announceBool.push_back( exdData->getField< bool >( row, 878 ) ); + announceBool.push_back( exdData->getField< bool >( row, 879 ) ); + announceBool.push_back( exdData->getField< bool >( row, 880 ) ); + announceBool.push_back( exdData->getField< bool >( row, 881 ) ); + announceBool.push_back( exdData->getField< bool >( row, 882 ) ); + announceBool.push_back( exdData->getField< bool >( row, 883 ) ); + announceBool.push_back( exdData->getField< bool >( row, 884 ) ); + announceBool.push_back( exdData->getField< bool >( row, 885 ) ); + announceBool.push_back( exdData->getField< bool >( row, 886 ) ); + announceBool.push_back( exdData->getField< bool >( row, 887 ) ); + announceBool.push_back( exdData->getField< bool >( row, 888 ) ); + announceBool.push_back( exdData->getField< bool >( row, 889 ) ); + announceBool.push_back( exdData->getField< bool >( row, 890 ) ); + announceBool.push_back( exdData->getField< bool >( row, 891 ) ); + announceBool.push_back( exdData->getField< bool >( row, 892 ) ); + announceBool.push_back( exdData->getField< bool >( row, 893 ) ); + announceBool.push_back( exdData->getField< bool >( row, 894 ) ); + announceBool.push_back( exdData->getField< bool >( row, 895 ) ); + announceBool.push_back( exdData->getField< bool >( row, 896 ) ); + announceBool.push_back( exdData->getField< bool >( row, 897 ) ); + announceBool.push_back( exdData->getField< bool >( row, 898 ) ); + announceBool.push_back( exdData->getField< bool >( row, 899 ) ); + announceBool.push_back( exdData->getField< bool >( row, 900 ) ); + announceBool.push_back( exdData->getField< bool >( row, 901 ) ); + announceBool.push_back( exdData->getField< bool >( row, 902 ) ); + announceBool.push_back( exdData->getField< bool >( row, 903 ) ); + announceBool.push_back( exdData->getField< bool >( row, 904 ) ); + announceBool.push_back( exdData->getField< bool >( row, 905 ) ); + announceBool.push_back( exdData->getField< bool >( row, 906 ) ); + announceBool.push_back( exdData->getField< bool >( row, 907 ) ); + announceBool.push_back( exdData->getField< bool >( row, 908 ) ); + announceBool.push_back( exdData->getField< bool >( row, 909 ) ); + announceBool.push_back( exdData->getField< bool >( row, 910 ) ); + announceBool.push_back( exdData->getField< bool >( row, 911 ) ); + announceBool.push_back( exdData->getField< bool >( row, 912 ) ); + announceBool.push_back( exdData->getField< bool >( row, 913 ) ); + announceBool.push_back( exdData->getField< bool >( row, 914 ) ); + announceBool.push_back( exdData->getField< bool >( row, 915 ) ); + announceBool.push_back( exdData->getField< bool >( row, 916 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 917 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 918 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 919 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 920 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 921 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 922 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 923 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 924 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 925 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 926 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 927 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 928 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 929 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 930 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 931 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 932 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 933 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 934 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 935 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 936 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 937 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 938 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 939 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 940 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 941 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 942 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 943 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 944 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 945 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 946 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 947 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 948 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 949 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 950 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 951 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 952 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 953 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 954 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 955 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 956 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 957 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 958 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 959 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 960 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 961 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 962 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 963 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 964 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 965 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 966 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 967 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 968 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 969 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 970 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 971 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 972 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 973 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 974 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 975 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 976 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 977 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 978 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 979 ) ); + behaviorBool.push_back( exdData->getField< bool >( row, 980 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 981 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 982 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 983 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 984 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 985 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 986 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 987 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 988 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 989 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 990 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 991 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 992 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 993 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 994 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 995 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 996 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 997 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 998 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 999 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1000 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1001 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1002 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1003 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1004 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1005 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1006 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1007 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1008 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1009 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1010 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1011 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1012 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1013 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1014 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1015 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1016 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1017 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1018 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1019 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1020 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1021 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1022 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1023 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1024 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1025 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1026 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1027 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1028 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1029 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1030 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1031 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1032 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1033 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1034 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1035 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1036 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1037 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1038 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1039 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1040 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1041 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1042 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1043 ) ); + acceptBool.push_back( exdData->getField< bool >( row, 1044 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1045 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1046 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1047 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1048 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1049 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1050 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1051 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1052 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1053 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1054 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1055 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1056 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1057 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1058 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1059 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1060 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1061 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1062 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1063 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1064 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1065 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1066 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1067 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1068 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1069 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1070 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1071 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1072 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1073 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1074 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1075 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1076 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1077 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1078 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1079 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1080 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1081 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1082 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1083 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1084 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1085 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1086 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1087 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1088 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1089 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1090 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1091 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1092 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1093 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1094 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1095 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1096 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1097 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1098 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1099 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1100 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1101 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1102 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1103 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1104 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1105 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1106 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1107 ) ); + qualifiedBool.push_back( exdData->getField< bool >( row, 1108 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1109 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1110 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1111 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1112 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1113 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1114 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1115 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1116 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1117 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1118 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1119 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1120 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1121 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1122 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1123 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1124 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1125 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1126 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1127 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1128 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1129 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1130 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1131 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1132 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1133 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1134 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1135 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1136 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1137 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1138 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1139 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1140 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1141 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1142 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1143 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1144 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1145 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1146 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1147 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1148 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1149 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1150 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1151 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1152 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1153 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1154 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1155 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1156 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1157 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1158 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1159 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1160 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1161 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1162 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1163 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1164 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1165 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1166 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1167 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1168 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1169 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1170 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1171 ) ); + canTargetBool.push_back( exdData->getField< bool >( row, 1172 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1173 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1174 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1175 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1176 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1177 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1178 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1179 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1180 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1181 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1182 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1183 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1184 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1185 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1186 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1187 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1188 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1189 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1190 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1191 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1192 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1193 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1194 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1195 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1196 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1197 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1198 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1199 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1200 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1201 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1202 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1203 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1204 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1205 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1206 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1207 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1208 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1209 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1210 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1211 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1212 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1213 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1214 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1215 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1216 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1217 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1218 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1219 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1220 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1221 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1222 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1223 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1224 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1225 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1226 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1227 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1228 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1229 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1230 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1231 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1232 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1233 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1234 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1235 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1236 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1237 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1238 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1239 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1240 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1241 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1242 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1243 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1244 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1413 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1414 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1415 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1416 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1417 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1418 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1419 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1420 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1421 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1422 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1423 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1424 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1425 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1426 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1427 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1428 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1429 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1430 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1431 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1432 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1433 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1434 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1435 ) ); + countableNum.push_back( exdData->getField< uint8_t >( row, 1436 ) ); + levelMax = exdData->getField< uint8_t >( row, 1437 ); + classJobRequired = exdData->getField< uint8_t >( row, 1438 ); + expFactor = exdData->getField< uint16_t >( row, 1440 ); + gilReward = exdData->getField< uint32_t >( row, 1441 ); + gCSeals = exdData->getField< uint16_t >( row, 1443 ); + itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1444 ) ); + itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1445 ) ); + itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1446 ) ); + itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1447 ) ); + itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1448 ) ); + itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1449 ) ); + itemRewardType = exdData->getField< uint8_t >( row, 1450 ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1451 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1452 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1453 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1454 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1455 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1456 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1457 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1458 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1459 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1460 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1461 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1462 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1463 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1465 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1466 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1467 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1468 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1469 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1470 ) ); + itemReward1.push_back( exdData->getField< uint32_t >( row, 1472 ) ); + itemReward1.push_back( exdData->getField< uint32_t >( row, 1473 ) ); + itemReward1.push_back( exdData->getField< uint32_t >( row, 1474 ) ); + itemReward1.push_back( exdData->getField< uint32_t >( row, 1475 ) ); + itemReward1.push_back( exdData->getField< uint32_t >( row, 1476 ) ); + itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1477 ) ); + itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1478 ) ); + itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1479 ) ); + itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1480 ) ); + itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1481 ) ); + isHQReward1.push_back( exdData->getField< bool >( row, 1482 ) ); + isHQReward1.push_back( exdData->getField< bool >( row, 1483 ) ); + isHQReward1.push_back( exdData->getField< bool >( row, 1484 ) ); + isHQReward1.push_back( exdData->getField< bool >( row, 1485 ) ); + isHQReward1.push_back( exdData->getField< bool >( row, 1486 ) ); + stainReward1.push_back( exdData->getField< uint8_t >( row, 1487 ) ); + stainReward1.push_back( exdData->getField< uint8_t >( row, 1488 ) ); + stainReward1.push_back( exdData->getField< uint8_t >( row, 1489 ) ); + stainReward1.push_back( exdData->getField< uint8_t >( row, 1490 ) ); + stainReward1.push_back( exdData->getField< uint8_t >( row, 1491 ) ); + emoteReward = exdData->getField< uint8_t >( row, 1492 ); + actionReward = exdData->getField< uint16_t >( row, 1493 ); + generalActionReward.push_back( exdData->getField< uint8_t >( row, 1494 ) ); + generalActionReward.push_back( exdData->getField< uint8_t >( row, 1495 ) ); + systemReward0 = exdData->getField< uint16_t >( row, 1496 ); + otherReward = exdData->getField< uint8_t >( row, 1497 ); + systemReward1 = exdData->getField< uint16_t >( row, 1498 ); + gCTypeReward = exdData->getField< uint16_t >( row, 1499 ); + instanceContentUnlock = exdData->getField< uint32_t >( row, 1500 ); + tomestoneReward = exdData->getField< uint8_t >( row, 1502 ); + tomestoneCountReward = exdData->getField< uint8_t >( row, 1503 ); + reputationReward = exdData->getField< uint8_t >( row, 1504 ); + placeName = exdData->getField< uint16_t >( row, 1505 ); + journalGenre = exdData->getField< uint8_t >( row, 1506 ); + icon = exdData->getField< uint32_t >( row, 1508 ); + iconSpecial = exdData->getField< uint32_t >( row, 1509 ); + introduction = exdData->getField< bool >( row, 1510 ); + hideOfferIcon = exdData->getField< bool >( row, 1511 ); + eventIconType = exdData->getField< uint8_t >( row, 1512 ); + sortKey = exdData->getField< uint16_t >( row, 1514 ); } Sapphire::Data::QuestBattle::QuestBattle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuestBattleDat.get_row( row_id ); - timeLimit = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_QuestBattleDat.get_row( row_id ); quest = exdData->getField< int32_t >( row, 0 ); + questBattleScene = exdData->getField< uint8_t >( row, 1 ); + timeLimit = exdData->getField< uint16_t >( row, 2 ); levelSync = exdData->getField< uint16_t >( row, 3 ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 4 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 5 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 6 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 7 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 8 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 9 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 10 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 11 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 12 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 13 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 14 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 15 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 16 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 17 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 18 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 19 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 20 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 21 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 22 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 23 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 24 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 25 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 26 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 27 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 28 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 29 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 30 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 31 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 32 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 33 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 34 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 35 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 36 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 37 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 38 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 39 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 40 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 41 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 42 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 43 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 44 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 45 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 46 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 47 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 48 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 49 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 50 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 51 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 52 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 53 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 54 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 55 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 56 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 57 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 58 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 59 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 60 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 61 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 62 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 63 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 64 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 65 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 66 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 67 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 68 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 69 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 70 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 71 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 72 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 73 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 74 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 75 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 76 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 77 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 78 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 79 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 80 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 81 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 82 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 83 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 84 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 85 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 86 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 87 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 88 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 89 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 90 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 91 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 92 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 93 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 94 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 95 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 96 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 97 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 98 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 99 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 100 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 101 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 102 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 103 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 104 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 105 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 106 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 107 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 108 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 109 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 110 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 111 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 112 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 113 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 114 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 115 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 116 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 117 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 118 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 119 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 120 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 121 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 122 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 123 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 124 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 125 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 126 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 127 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 128 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 129 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 130 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 131 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 132 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 133 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 134 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 135 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 136 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 137 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 138 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 139 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 140 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 141 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 142 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 143 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 144 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 145 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 146 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 147 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 148 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 149 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 150 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 151 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 152 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 153 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 154 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 155 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 156 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 157 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 158 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 159 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 160 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 161 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 162 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 163 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 164 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 165 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 166 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 167 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 168 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 169 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 170 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 171 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 172 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 173 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 174 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 175 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 176 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 177 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 178 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 179 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 180 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 181 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 182 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 183 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 184 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 185 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 186 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 187 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 188 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 189 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 190 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 191 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 192 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 193 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 194 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 195 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 196 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 197 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 198 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 199 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 200 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 201 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 202 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 203 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 204 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 205 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 206 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 207 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 208 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 209 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 210 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 211 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 212 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 213 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 214 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 215 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 216 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 217 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 218 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 219 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 220 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 221 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 222 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 223 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 224 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 225 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 226 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 227 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 228 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 229 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 230 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 231 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 232 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 233 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 234 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 235 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 236 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 237 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 238 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 239 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 240 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 241 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 242 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 243 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 244 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 245 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 246 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 247 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 248 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 249 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 250 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 251 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 252 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 253 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 254 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 255 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 256 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 257 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 258 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 259 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 260 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 261 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 262 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 263 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 264 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 265 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 266 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 267 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 268 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 269 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 270 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 271 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 272 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 273 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 274 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 275 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 276 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 277 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 278 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 279 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 280 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 281 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 282 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 283 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 284 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 285 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 286 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 287 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 288 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 289 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 290 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 291 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 292 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 293 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 294 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 295 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 296 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 297 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 298 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 299 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 300 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 301 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 302 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 4 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 5 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 6 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 7 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 8 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 9 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 10 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 11 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 12 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 13 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 14 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 15 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 16 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 17 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 18 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 19 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 20 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 21 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 22 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 23 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 24 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 25 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 26 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 27 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 28 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 29 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 30 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 31 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 32 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 33 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 34 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 35 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 36 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 37 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 38 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 39 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 40 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 41 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 42 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 43 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 44 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 45 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 46 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 47 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 48 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 49 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 50 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 51 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 52 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 53 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 54 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 55 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 56 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 57 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 58 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 59 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 60 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 61 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 62 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 63 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 64 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 65 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 66 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 67 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 68 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 69 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 70 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 71 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 72 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 73 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 74 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 75 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 76 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 77 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 78 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 79 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 80 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 81 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 82 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 83 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 84 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 85 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 86 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 87 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 88 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 89 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 90 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 91 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 92 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 93 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 94 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 95 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 96 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 97 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 98 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 99 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 100 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 101 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 102 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 103 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 104 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 105 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 106 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 107 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 108 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 109 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 110 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 111 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 112 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 113 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 114 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 115 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 116 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 117 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 118 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 119 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 120 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 121 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 122 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 123 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 124 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 125 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 126 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 127 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 128 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 129 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 130 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 131 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 132 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 133 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 134 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 135 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 136 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 137 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 138 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 139 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 140 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 141 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 142 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 143 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 144 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 145 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 146 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 147 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 148 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 149 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 150 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 151 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 152 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 153 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 154 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 155 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 156 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 157 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 158 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 159 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 160 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 161 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 162 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 163 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 164 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 165 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 166 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 167 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 168 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 169 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 170 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 171 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 172 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 173 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 174 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 175 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 176 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 177 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 178 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 179 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 180 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 181 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 182 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 183 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 184 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 185 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 186 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 187 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 188 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 189 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 190 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 191 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 192 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 193 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 194 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 195 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 196 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 197 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 198 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 199 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 200 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 201 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 202 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 203 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 204 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 205 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 206 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 207 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 208 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 209 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 210 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 211 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 212 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 213 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 214 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 215 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 216 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 217 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 218 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 219 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 220 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 221 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 222 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 223 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 224 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 225 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 226 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 227 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 228 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 229 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 230 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 231 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 232 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 233 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 234 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 235 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 236 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 237 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 238 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 239 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 240 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 241 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 242 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 243 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 244 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 245 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 246 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 247 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 248 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 249 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 250 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 251 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 252 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 253 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 254 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 255 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 256 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 257 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 258 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 259 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 260 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 261 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 262 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 263 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 264 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 265 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 266 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 267 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 268 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 269 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 270 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 271 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 272 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 273 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 274 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 275 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 276 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 277 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 278 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 279 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 280 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 281 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 282 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 283 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 284 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 285 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 286 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 287 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 288 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 289 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 290 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 291 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 292 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 293 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 294 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 295 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 296 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 297 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 298 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 299 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 300 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 301 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 302 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 303 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 304 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 305 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 306 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 307 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 308 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 309 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 310 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 311 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 312 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 313 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 314 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 315 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 316 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 317 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 318 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 319 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 320 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 321 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 322 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 323 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 324 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 325 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 326 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 327 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 328 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 329 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 330 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 331 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 332 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 333 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 334 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 335 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 336 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 337 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 338 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 339 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 340 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 341 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 342 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 343 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 344 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 345 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 346 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 347 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 348 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 349 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 350 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 351 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 352 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 353 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 354 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 355 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 356 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 357 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 358 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 359 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 360 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 361 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 362 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 363 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 364 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 365 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 366 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 367 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 368 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 369 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 370 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 371 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 372 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 373 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 374 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 375 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 376 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 377 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 378 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 379 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 380 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 381 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 382 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 383 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 384 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 385 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 386 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 387 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 388 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 389 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 390 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 391 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 392 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 393 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 394 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 395 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 396 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 397 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 398 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 399 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 400 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 401 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 402 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 403 ) ); +} + +Sapphire::Data::QuestChapter::QuestChapter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestChapterDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); + redo = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::QuestClassJobReward::QuestClassJobReward( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuestClassJobRewardDat.get_row( row_id, subRow ); - classJobCategory = exdData->getField< uint8_t >( row, 0 ); - rewardItem.push_back( exdData->getField< uint32_t >( row, 1 ) ); - rewardItem.push_back( exdData->getField< uint32_t >( row, 2 ) ); - rewardItem.push_back( exdData->getField< uint32_t >( row, 3 ) ); - rewardItem.push_back( exdData->getField< uint32_t >( row, 4 ) ); - rewardAmount.push_back( exdData->getField< uint8_t >( row, 5 ) ); - rewardAmount.push_back( exdData->getField< uint8_t >( row, 6 ) ); - rewardAmount.push_back( exdData->getField< uint8_t >( row, 7 ) ); - rewardAmount.push_back( exdData->getField< uint8_t >( row, 8 ) ); - requiredItem.push_back( exdData->getField< uint32_t >( row, 9 ) ); - requiredItem.push_back( exdData->getField< uint32_t >( row, 10 ) ); - requiredItem.push_back( exdData->getField< uint32_t >( row, 11 ) ); - requiredItem.push_back( exdData->getField< uint32_t >( row, 12 ) ); - requiredAmount.push_back( exdData->getField< uint8_t >( row, 13 ) ); - requiredAmount.push_back( exdData->getField< uint8_t >( row, 14 ) ); - requiredAmount.push_back( exdData->getField< uint8_t >( row, 15 ) ); - requiredAmount.push_back( exdData->getField< uint8_t >( row, 16 ) ); + auto row = exdData->m_QuestClassJobRewardDat.get_row( row_id, subRow ); + classJobCategory = exdData->getField< uint8_t >( row, 0 ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 1 ) ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 2 ) ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 3 ) ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 4 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 5 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 6 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 7 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 8 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 9 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 10 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 11 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 12 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 13 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 14 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 15 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 16 ) ); } Sapphire::Data::QuestClassJobSupply::QuestClassJobSupply( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuestClassJobSupplyDat.get_row( row_id, subRow ); - classJobCategory = exdData->getField< uint8_t >( row, 0 ); - eNpcResident = exdData->getField< uint32_t >( row, 2 ); - item = exdData->getField< uint32_t >( row, 3 ); + auto row = exdData->m_QuestClassJobSupplyDat.get_row( row_id, subRow ); + classJobCategory = exdData->getField< uint8_t >( row, 0 ); + eNpcResident = exdData->getField< uint32_t >( row, 2 ); + item = exdData->getField< uint32_t >( row, 3 ); +} + +Sapphire::Data::QuestDerivedClass::QuestDerivedClass( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestDerivedClassDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); +} + +Sapphire::Data::QuestRedo::QuestRedo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestRedoDat.get_row( row_id ); + finalQuest = exdData->getField< uint32_t >( row, 0 ); + chapter = exdData->getField< uint16_t >( row, 2 ); + quest.push_back( exdData->getField< uint32_t >( row, 3 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 4 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 5 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 6 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 7 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 8 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 9 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 10 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 11 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 12 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 13 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 14 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 15 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 16 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 17 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 18 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 19 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 20 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 21 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 22 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 23 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 24 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 25 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 26 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 27 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 28 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 29 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 30 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 31 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 32 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 33 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 34 ) ); +} + +Sapphire::Data::QuestRedoChapterUI::QuestRedoChapterUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestRedoChapterUIDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); + category = exdData->getField< uint8_t >( row, 2 ); + questRedoUISmall = exdData->getField< uint32_t >( row, 4 ); + questRedoUILarge = exdData->getField< uint32_t >( row, 5 ); + questRedoUIWide = exdData->getField< uint32_t >( row, 6 ); + chapterName = exdData->getField< std::string >( row, 7 ); + chapterPart = exdData->getField< std::string >( row, 8 ); + transient = exdData->getField< std::string >( row, 9 ); +} + +Sapphire::Data::QuestRedoChapterUICategory::QuestRedoChapterUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestRedoChapterUICategoryDat.get_row( row_id ); + expac = exdData->getField< std::string >( row, 1 ); +} + +Sapphire::Data::QuestRedoChapterUITab::QuestRedoChapterUITab( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestRedoChapterUITabDat.get_row( row_id ); + icon1 = exdData->getField< uint32_t >( row, 1 ); + icon2 = exdData->getField< uint32_t >( row, 2 ); + text = exdData->getField< std::string >( row, 3 ); +} + +Sapphire::Data::QuestRedoIncompChapter::QuestRedoIncompChapter( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestRedoIncompChapterDat.get_row( row_id, subRow ); + chapter = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::QuestRepeatFlag::QuestRepeatFlag( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuestRepeatFlagDat.get_row( row_id ); - quest = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_QuestRepeatFlagDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::QuestRewardOther::QuestRewardOther( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuestRewardOtherDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_QuestRewardOtherDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::QuickChat::QuickChat( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuickChatDat.get_row( row_id ); - nameAction = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); - addon = exdData->getField< int32_t >( row, 2 ); - quickChatTransient = exdData->getField< int8_t >( row, 3 ); + auto row = exdData->m_QuickChatDat.get_row( row_id ); + nameAction = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + addon = exdData->getField< int32_t >( row, 2 ); + quickChatTransient = exdData->getField< int8_t >( row, 3 ); } Sapphire::Data::QuickChatTransient::QuickChatTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_QuickChatTransientDat.get_row( row_id ); - textOutput = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_QuickChatTransientDat.get_row( row_id ); + textOutput = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Race::Race( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RaceDat.get_row( row_id ); - masculine = exdData->getField< std::string >( row, 0 ); - feminine = exdData->getField< std::string >( row, 1 ); - rSEMBody = exdData->getField< int32_t >( row, 2 ); - rSEMHands = exdData->getField< int32_t >( row, 3 ); - rSEMLegs = exdData->getField< int32_t >( row, 4 ); - rSEMFeet = exdData->getField< int32_t >( row, 5 ); - rSEFBody = exdData->getField< int32_t >( row, 6 ); - rSEFHands = exdData->getField< int32_t >( row, 7 ); - rSEFLegs = exdData->getField< int32_t >( row, 8 ); - rSEFFeet = exdData->getField< int32_t >( row, 9 ); + auto row = exdData->m_RaceDat.get_row( row_id ); + masculine = exdData->getField< std::string >( row, 0 ); + feminine = exdData->getField< std::string >( row, 1 ); + rSEMBody = exdData->getField< int32_t >( row, 2 ); + rSEMHands = exdData->getField< int32_t >( row, 3 ); + rSEMLegs = exdData->getField< int32_t >( row, 4 ); + rSEMFeet = exdData->getField< int32_t >( row, 5 ); + rSEFBody = exdData->getField< int32_t >( row, 6 ); + rSEFHands = exdData->getField< int32_t >( row, 7 ); + rSEFLegs = exdData->getField< int32_t >( row, 8 ); + rSEFFeet = exdData->getField< int32_t >( row, 9 ); + exPac = exdData->getField< uint8_t >( row, 10 ); } Sapphire::Data::RacingChocoboItem::RacingChocoboItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RacingChocoboItemDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - category = exdData->getField< uint8_t >( row, 1 ); - param.push_back( exdData->getField< uint8_t >( row, 2 ) ); - param.push_back( exdData->getField< uint8_t >( row, 3 ) ); + auto row = exdData->m_RacingChocoboItemDat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + category = exdData->getField< uint8_t >( row, 1 ); + param.push_back( exdData->getField< uint8_t >( row, 2 ) ); + param.push_back( exdData->getField< uint8_t >( row, 3 ) ); } Sapphire::Data::RacingChocoboName::RacingChocoboName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RacingChocoboNameDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_RacingChocoboNameDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::RacingChocoboNameCategory::RacingChocoboNameCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RacingChocoboNameCategoryDat.get_row( row_id ); - sortKey = exdData->getField< uint8_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_RacingChocoboNameCategoryDat.get_row( row_id ); + sortKey = exdData->getField< uint8_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::RacingChocoboNameInfo::RacingChocoboNameInfo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RacingChocoboNameInfoDat.get_row( row_id ); - racingChocoboNameCategory = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_RacingChocoboNameInfoDat.get_row( row_id ); + racingChocoboNameCategory = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::RacingChocoboParam::RacingChocoboParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RacingChocoboParamDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_RacingChocoboParamDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::RecastNavimesh::RecastNavimesh( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RecastNavimeshDat.get_row( row_id ); - tileSize = exdData->getField< float >( row, 1 ); - cellSize = exdData->getField< float >( row, 2 ); - cellHeight = exdData->getField< float >( row, 3 ); - agentHeight = exdData->getField< float >( row, 4 ); - agentRadius = exdData->getField< float >( row, 5 ); - agentMaxClimb = exdData->getField< float >( row, 6 ); - agentMaxSlope = exdData->getField< float >( row, 7 ); - regionMinSize = exdData->getField< float >( row, 9 ); - regionMergedSize = exdData->getField< float >( row, 10 ); - maxEdgeLength = exdData->getField< float >( row, 12 ); - maxEdgeError = exdData->getField< float >( row, 13 ); - vertsPerPoly = exdData->getField< float >( row, 14 ); - detailMeshSampleDistance = exdData->getField< float >( row, 15 ); - detailMeshMaxSampleError = exdData->getField< float >( row, 16 ); + auto row = exdData->m_RecastNavimeshDat.get_row( row_id ); + tileSize = exdData->getField< float >( row, 1 ); + cellSize = exdData->getField< float >( row, 2 ); + cellHeight = exdData->getField< float >( row, 3 ); + agentHeight = exdData->getField< float >( row, 4 ); + agentRadius = exdData->getField< float >( row, 5 ); + agentMaxClimb = exdData->getField< float >( row, 6 ); + agentMaxSlope = exdData->getField< float >( row, 7 ); + regionMinSize = exdData->getField< float >( row, 9 ); + regionMergedSize = exdData->getField< float >( row, 10 ); + maxEdgeLength = exdData->getField< float >( row, 12 ); + maxEdgeError = exdData->getField< float >( row, 13 ); + vertsPerPoly = exdData->getField< float >( row, 14 ); + detailMeshSampleDistance = exdData->getField< float >( row, 15 ); + detailMeshMaxSampleError = exdData->getField< float >( row, 16 ); } Sapphire::Data::Recipe::Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RecipeDat.get_row( row_id ); - craftType = exdData->getField< int32_t >( row, 1 ); - recipeLevelTable = exdData->getField< uint16_t >( row, 2 ); - itemResult = exdData->getField< int32_t >( row, 3 ); - amountResult = exdData->getField< uint8_t >( row, 4 ); - recipeElement = exdData->getField< uint8_t >( row, 25 ); - isSecondary = exdData->getField< bool >( row, 27 ); - difficultyFactor = exdData->getField< uint16_t >( row, 28 ); - qualityFactor = exdData->getField< uint16_t >( row, 29 ); - durabilityFactor = exdData->getField< uint16_t >( row, 30 ); - requiredCraftsmanship = exdData->getField< uint16_t >( row, 32 ); - requiredControl = exdData->getField< uint16_t >( row, 33 ); - quickSynthCraftsmanship = exdData->getField< uint16_t >( row, 34 ); - quickSynthControl = exdData->getField< uint16_t >( row, 35 ); - secretRecipeBook = exdData->getField< uint16_t >( row, 36 ); - canQuickSynth = exdData->getField< bool >( row, 37 ); - canHq = exdData->getField< bool >( row, 38 ); - expRewarded = exdData->getField< bool >( row, 39 ); - statusRequired = exdData->getField< int32_t >( row, 40 ); - itemRequired = exdData->getField< int32_t >( row, 41 ); - isSpecializationRequired = exdData->getField< bool >( row, 42 ); - patchNumber = exdData->getField< uint16_t >( row, 44 ); -} - -Sapphire::Data::RecipeElement::RecipeElement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_RecipeElementDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_RecipeDat.get_row( row_id ); + number = exdData->getField< int32_t >( row, 0 ); + craftType = exdData->getField< int32_t >( row, 1 ); + recipeLevelTable = exdData->getField< uint16_t >( row, 2 ); + itemResult = exdData->getField< int32_t >( row, 3 ); + amountResult = exdData->getField< uint8_t >( row, 4 ); + isSecondary = exdData->getField< bool >( row, 26 ); + materialQualityFactor = exdData->getField< uint8_t >( row, 27 ); + difficultyFactor = exdData->getField< uint16_t >( row, 28 ); + qualityFactor = exdData->getField< uint16_t >( row, 29 ); + durabilityFactor = exdData->getField< uint16_t >( row, 30 ); + requiredCraftsmanship = exdData->getField< uint16_t >( row, 32 ); + requiredControl = exdData->getField< uint16_t >( row, 33 ); + quickSynthCraftsmanship = exdData->getField< uint16_t >( row, 34 ); + quickSynthControl = exdData->getField< uint16_t >( row, 35 ); + secretRecipeBook = exdData->getField< uint16_t >( row, 36 ); + canQuickSynth = exdData->getField< bool >( row, 38 ); + canHq = exdData->getField< bool >( row, 39 ); + expRewarded = exdData->getField< bool >( row, 40 ); + statusRequired = exdData->getField< int32_t >( row, 41 ); + itemRequired = exdData->getField< int32_t >( row, 42 ); + isSpecializationRequired = exdData->getField< bool >( row, 43 ); + isExpert = exdData->getField< bool >( row, 44 ); + patchNumber = exdData->getField< uint16_t >( row, 45 ); } Sapphire::Data::RecipeLevelTable::RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RecipeLevelTableDat.get_row( row_id ); - classJobLevel = exdData->getField< uint8_t >( row, 0 ); - stars = exdData->getField< uint8_t >( row, 1 ); - suggestedCraftsmanship = exdData->getField< uint16_t >( row, 2 ); - difficulty = exdData->getField< uint16_t >( row, 3 ); - quality = exdData->getField< int16_t >( row, 4 ); - durability = exdData->getField< uint16_t >( row, 5 ); + auto row = exdData->m_RecipeLevelTableDat.get_row( row_id ); + classJobLevel = exdData->getField< uint8_t >( row, 0 ); + stars = exdData->getField< uint8_t >( row, 1 ); + suggestedCraftsmanship = exdData->getField< uint16_t >( row, 2 ); + suggestedControl = exdData->getField< uint16_t >( row, 3 ); + difficulty = exdData->getField< uint16_t >( row, 4 ); + quality = exdData->getField< uint32_t >( row, 5 ); + durability = exdData->getField< uint16_t >( row, 6 ); +} + +Sapphire::Data::RecipeLookup::RecipeLookup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_RecipeLookupDat.get_row( row_id ); + cRP = exdData->getField< uint16_t >( row, 0 ); + bSM = exdData->getField< uint16_t >( row, 1 ); + aRM = exdData->getField< uint16_t >( row, 2 ); + gSM = exdData->getField< uint16_t >( row, 3 ); + lTW = exdData->getField< uint16_t >( row, 4 ); + wVR = exdData->getField< uint16_t >( row, 5 ); + aLC = exdData->getField< uint16_t >( row, 6 ); + cUL = exdData->getField< uint16_t >( row, 7 ); } Sapphire::Data::RecipeNotebookList::RecipeNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RecipeNotebookListDat.get_row( row_id ); - recipe.push_back( exdData->getField< int32_t >( row, 1 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 2 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 3 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 4 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 5 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 6 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 7 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 8 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 9 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 10 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 11 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 12 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 13 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 14 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 15 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 16 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 17 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 18 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 19 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 20 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 21 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 22 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 23 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 24 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 25 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 26 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 27 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 28 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 29 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 30 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 31 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 32 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 33 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 34 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 35 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 36 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 37 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 38 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 39 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 40 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 41 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 42 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 43 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 44 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 45 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 46 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 47 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 48 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 49 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 50 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 51 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 52 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 53 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 54 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 55 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 56 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 57 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 58 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 59 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 60 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 61 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 62 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 63 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 64 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 65 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 66 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 67 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 68 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 69 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 70 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 71 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 72 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 73 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 74 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 75 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 76 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 77 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 78 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 79 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 80 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 81 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 82 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 83 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 84 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 85 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 86 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 87 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 88 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 89 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 90 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 91 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 92 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 93 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 94 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 95 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 96 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 97 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 98 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 99 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 100 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 101 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 102 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 103 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 104 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 105 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 106 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 107 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 108 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 109 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 110 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 111 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 112 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 113 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 114 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 115 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 116 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 117 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 118 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 119 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 120 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 121 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 122 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 123 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 124 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 125 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 126 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 127 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 128 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 129 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 130 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 131 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 132 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 133 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 134 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 135 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 136 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 137 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 138 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 139 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 140 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 141 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 142 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 143 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 144 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 145 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 146 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 147 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 148 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 149 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 150 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 151 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 152 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 153 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 154 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 155 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 156 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 157 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 158 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 159 ) ); - recipe.push_back( exdData->getField< int32_t >( row, 160 ) ); + auto row = exdData->m_RecipeNotebookListDat.get_row( row_id ); + recipe.push_back( exdData->getField< int32_t >( row, 1 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 2 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 3 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 4 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 5 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 6 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 7 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 8 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 9 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 10 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 11 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 12 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 13 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 14 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 15 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 16 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 17 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 18 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 19 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 20 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 21 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 22 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 23 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 24 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 25 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 26 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 27 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 28 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 29 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 30 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 31 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 32 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 33 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 34 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 35 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 36 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 37 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 38 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 39 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 40 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 41 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 42 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 43 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 44 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 45 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 46 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 47 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 48 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 49 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 50 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 51 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 52 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 53 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 54 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 55 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 56 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 57 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 58 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 59 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 60 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 61 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 62 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 63 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 64 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 65 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 66 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 67 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 68 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 69 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 70 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 71 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 72 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 73 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 74 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 75 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 76 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 77 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 78 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 79 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 80 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 81 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 82 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 83 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 84 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 85 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 86 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 87 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 88 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 89 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 90 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 91 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 92 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 93 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 94 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 95 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 96 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 97 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 98 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 99 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 100 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 101 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 102 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 103 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 104 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 105 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 106 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 107 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 108 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 109 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 110 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 111 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 112 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 113 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 114 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 115 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 116 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 117 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 118 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 119 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 120 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 121 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 122 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 123 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 124 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 125 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 126 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 127 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 128 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 129 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 130 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 131 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 132 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 133 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 134 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 135 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 136 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 137 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 138 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 139 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 140 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 141 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 142 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 143 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 144 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 145 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 146 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 147 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 148 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 149 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 150 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 151 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 152 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 153 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 154 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 155 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 156 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 157 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 158 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 159 ) ); + recipe.push_back( exdData->getField< int32_t >( row, 160 ) ); } Sapphire::Data::RecommendContents::RecommendContents( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RecommendContentsDat.get_row( row_id ); - level = exdData->getField< int32_t >( row, 0 ); + auto row = exdData->m_RecommendContentsDat.get_row( row_id ); + level = exdData->getField< int32_t >( row, 0 ); + classJob = exdData->getField< uint8_t >( row, 1 ); + minLevel = exdData->getField< uint8_t >( row, 2 ); + maxLevel = exdData->getField< uint8_t >( row, 3 ); } Sapphire::Data::Relic::Relic( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RelicDat.get_row( row_id ); - itemAtma = exdData->getField< uint32_t >( row, 0 ); - itemAnimus = exdData->getField< uint32_t >( row, 1 ); - icon = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_RelicDat.get_row( row_id ); + itemAtma = exdData->getField< uint32_t >( row, 0 ); + itemAnimus = exdData->getField< uint32_t >( row, 1 ); + icon = exdData->getField< int32_t >( row, 2 ); + materia0 = exdData->getField< uint16_t >( row, 3 ); + noteMain0 = exdData->getField< uint8_t >( row, 4 ); + noteSub0 = exdData->getField< uint8_t >( row, 5 ); + noteSelection10 = exdData->getField< uint8_t >( row, 6 ); + materia1 = exdData->getField< uint16_t >( row, 7 ); + noteMain1 = exdData->getField< uint8_t >( row, 8 ); + noteSub1 = exdData->getField< uint8_t >( row, 9 ); + noteSelection1 = exdData->getField< uint8_t >( row, 10 ); + materia2 = exdData->getField< uint16_t >( row, 11 ); + noteMain2 = exdData->getField< uint8_t >( row, 12 ); + noteSub2 = exdData->getField< uint8_t >( row, 13 ); + materia3 = exdData->getField< uint16_t >( row, 14 ); + noteSelection3 = exdData->getField< uint8_t >( row, 15 ); } Sapphire::Data::Relic3::Relic3( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_Relic3Dat.get_row( row_id ); - itemAnimus = exdData->getField< uint32_t >( row, 0 ); - itemScroll = exdData->getField< uint32_t >( row, 1 ); - materiaLimit = exdData->getField< uint8_t >( row, 2 ); - itemNovus = exdData->getField< uint32_t >( row, 3 ); - icon = exdData->getField< int32_t >( row, 4 ); + auto row = exdData->m_Relic3Dat.get_row( row_id ); + itemAnimus = exdData->getField< uint32_t >( row, 0 ); + itemScroll = exdData->getField< uint32_t >( row, 1 ); + materiaLimit = exdData->getField< uint8_t >( row, 2 ); + itemNovus = exdData->getField< uint32_t >( row, 3 ); + icon = exdData->getField< int32_t >( row, 4 ); } Sapphire::Data::RelicItem::RelicItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RelicItemDat.get_row( row_id ); - gladiatorItem = exdData->getField< uint32_t >( row, 1 ); - pugilistItem = exdData->getField< uint32_t >( row, 2 ); - marauderItem = exdData->getField< uint32_t >( row, 3 ); - lancerItem = exdData->getField< uint32_t >( row, 4 ); - archerItem = exdData->getField< uint32_t >( row, 5 ); - conjurerItem = exdData->getField< uint32_t >( row, 6 ); - thaumaturgeItem = exdData->getField< uint32_t >( row, 7 ); - arcanistSMNItem = exdData->getField< uint32_t >( row, 8 ); - arcanistSCHItem = exdData->getField< uint32_t >( row, 9 ); - shieldItem = exdData->getField< uint32_t >( row, 10 ); - rogueItem = exdData->getField< uint32_t >( row, 11 ); + auto row = exdData->m_RelicItemDat.get_row( row_id ); + gladiatorItem = exdData->getField< uint32_t >( row, 1 ); + pugilistItem = exdData->getField< uint32_t >( row, 2 ); + marauderItem = exdData->getField< uint32_t >( row, 3 ); + lancerItem = exdData->getField< uint32_t >( row, 4 ); + archerItem = exdData->getField< uint32_t >( row, 5 ); + conjurerItem = exdData->getField< uint32_t >( row, 6 ); + thaumaturgeItem = exdData->getField< uint32_t >( row, 7 ); + arcanistSMNItem = exdData->getField< uint32_t >( row, 8 ); + arcanistSCHItem = exdData->getField< uint32_t >( row, 9 ); + shieldItem = exdData->getField< uint32_t >( row, 10 ); + rogueItem = exdData->getField< uint32_t >( row, 11 ); } Sapphire::Data::RelicNote::RelicNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RelicNoteDat.get_row( row_id ); - eventItem = exdData->getField< uint32_t >( row, 0 ); - monsterNoteTargetNM.push_back( exdData->getField< uint16_t >( row, 21 ) ); - monsterNoteTargetNM.push_back( exdData->getField< uint16_t >( row, 22 ) ); - monsterNoteTargetNM.push_back( exdData->getField< uint16_t >( row, 23 ) ); - leve.push_back( exdData->getField< uint16_t >( row, 31 ) ); - leve.push_back( exdData->getField< uint16_t >( row, 32 ) ); - leve.push_back( exdData->getField< uint16_t >( row, 33 ) ); + auto row = exdData->m_RelicNoteDat.get_row( row_id ); + eventItem = exdData->getField< uint32_t >( row, 0 ); + monsterNoteTargetNM.push_back( exdData->getField< uint16_t >( row, 21 ) ); + monsterNoteTargetNM.push_back( exdData->getField< uint16_t >( row, 22 ) ); + monsterNoteTargetNM.push_back( exdData->getField< uint16_t >( row, 23 ) ); + leve.push_back( exdData->getField< uint16_t >( row, 31 ) ); + leve.push_back( exdData->getField< uint16_t >( row, 32 ) ); + leve.push_back( exdData->getField< uint16_t >( row, 33 ) ); } Sapphire::Data::RelicNoteCategory::RelicNoteCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RelicNoteCategoryDat.get_row( row_id ); - text = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_RelicNoteCategoryDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::Resident::Resident( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ResidentDat.get_row( row_id, subRow ); - model = exdData->getField< uint64_t >( row, 1 ); - npcYell = exdData->getField< int32_t >( row, 2 ); - residentMotionType = exdData->getField< uint8_t >( row, 3 ); + auto row = exdData->m_ResidentDat.get_row( row_id, subRow ); + model = exdData->getField< uint64_t >( row, 1 ); + npcYell = exdData->getField< int32_t >( row, 2 ); + addedIn53 = exdData->getField< uint16_t >( row, 3 ); + residentMotionType = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::RetainerTask::RetainerTask( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RetainerTaskDat.get_row( row_id ); - isRandom = exdData->getField< bool >( row, 0 ); - classJobCategory = exdData->getField< uint8_t >( row, 1 ); - retainerLevel = exdData->getField< uint8_t >( row, 2 ); - retainerTaskParameter = exdData->getField< uint16_t >( row, 4 ); - ventureCost = exdData->getField< uint16_t >( row, 5 ); - maxTimemin = exdData->getField< uint16_t >( row, 6 ); - experience = exdData->getField< int32_t >( row, 7 ); - requiredItemLevel = exdData->getField< uint16_t >( row, 8 ); - requiredGathering = exdData->getField< uint16_t >( row, 11 ); - task = exdData->getField< uint16_t >( row, 13 ); + auto row = exdData->m_RetainerTaskDat.get_row( row_id ); + isRandom = exdData->getField< bool >( row, 0 ); + classJobCategory = exdData->getField< uint8_t >( row, 1 ); + retainerLevel = exdData->getField< uint8_t >( row, 2 ); + retainerTaskParameter = exdData->getField< uint16_t >( row, 4 ); + ventureCost = exdData->getField< uint16_t >( row, 5 ); + maxTimemin = exdData->getField< uint16_t >( row, 6 ); + experience = exdData->getField< int32_t >( row, 7 ); + requiredItemLevel = exdData->getField< uint16_t >( row, 8 ); + conditionParam0 = exdData->getField< uint8_t >( row, 9 ); + conditionParam1 = exdData->getField< uint8_t >( row, 10 ); + requiredGathering = exdData->getField< uint16_t >( row, 11 ); + task = exdData->getField< uint16_t >( row, 13 ); } Sapphire::Data::RetainerTaskLvRange::RetainerTaskLvRange( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RetainerTaskLvRangeDat.get_row( row_id ); - min = exdData->getField< uint8_t >( row, 0 ); - max = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_RetainerTaskLvRangeDat.get_row( row_id ); + min = exdData->getField< uint8_t >( row, 0 ); + max = exdData->getField< uint8_t >( row, 1 ); } Sapphire::Data::RetainerTaskNormal::RetainerTaskNormal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RetainerTaskNormalDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - quantity0 = exdData->getField< uint8_t >( row, 1 ); - quantity1 = exdData->getField< uint8_t >( row, 2 ); - quantity2 = exdData->getField< uint8_t >( row, 3 ); - gatheringLog = exdData->getField< int16_t >( row, 4 ); - fishingLog = exdData->getField< int16_t >( row, 5 ); + auto row = exdData->m_RetainerTaskNormalDat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + quantity0 = exdData->getField< uint8_t >( row, 1 ); + quantity1 = exdData->getField< uint8_t >( row, 2 ); + quantity2 = exdData->getField< uint8_t >( row, 3 ); + gatheringLog = exdData->getField< int16_t >( row, 4 ); + fishingLog = exdData->getField< int16_t >( row, 5 ); } Sapphire::Data::RetainerTaskParameter::RetainerTaskParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RetainerTaskParameterDat.get_row( row_id ); - itemLevelDoW.push_back( exdData->getField< int16_t >( row, 0 ) ); - itemLevelDoW.push_back( exdData->getField< int16_t >( row, 1 ) ); - gatheringDoL.push_back( exdData->getField< int16_t >( row, 2 ) ); - gatheringDoL.push_back( exdData->getField< int16_t >( row, 3 ) ); - gatheringFSH.push_back( exdData->getField< int16_t >( row, 4 ) ); - gatheringFSH.push_back( exdData->getField< int16_t >( row, 5 ) ); + auto row = exdData->m_RetainerTaskParameterDat.get_row( row_id ); + itemLevelDoW.push_back( exdData->getField< int16_t >( row, 0 ) ); + itemLevelDoW.push_back( exdData->getField< int16_t >( row, 1 ) ); + gatheringDoL.push_back( exdData->getField< int16_t >( row, 2 ) ); + gatheringDoL.push_back( exdData->getField< int16_t >( row, 3 ) ); + gatheringFSH.push_back( exdData->getField< int16_t >( row, 4 ) ); + gatheringFSH.push_back( exdData->getField< int16_t >( row, 5 ) ); } Sapphire::Data::RetainerTaskRandom::RetainerTaskRandom( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RetainerTaskRandomDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - requirement = exdData->getField< int16_t >( row, 1 ); + auto row = exdData->m_RetainerTaskRandomDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + requirement = exdData->getField< int16_t >( row, 1 ); +} + +Sapphire::Data::RideShooting::RideShooting( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_RideShootingDat.get_row( row_id ); + gFateRideShooting = exdData->getField< uint16_t >( row, 0 ); + startText = exdData->getField< uint16_t >( row, 5 ); + popRange.push_back( exdData->getField< uint32_t >( row, 14 ) ); + popRange.push_back( exdData->getField< uint32_t >( row, 15 ) ); + popRange.push_back( exdData->getField< uint32_t >( row, 16 ) ); + popRange.push_back( exdData->getField< uint32_t >( row, 17 ) ); + popRange.push_back( exdData->getField< uint32_t >( row, 18 ) ); + popRange.push_back( exdData->getField< uint32_t >( row, 19 ) ); + popRange.push_back( exdData->getField< uint32_t >( row, 20 ) ); + popRange.push_back( exdData->getField< uint32_t >( row, 21 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 22 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 23 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 24 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 25 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 26 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 27 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 28 ) ); + eNpc.push_back( exdData->getField< uint32_t >( row, 29 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 30 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 31 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 32 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 33 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 34 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 35 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 36 ) ); + eNpcScale.push_back( exdData->getField< uint8_t >( row, 37 ) ); +} + +Sapphire::Data::RideShootingTextData::RideShootingTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_RideShootingTextDataDat.get_row( row_id ); + string = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::RPParameter::RPParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_RPParameterDat.get_row( row_id ); - bNpcName = exdData->getField< uint16_t >( row, 0 ); - classJob = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_RPParameterDat.get_row( row_id ); + bNpcName = exdData->getField< uint16_t >( row, 0 ); + classJob = exdData->getField< uint8_t >( row, 1 ); } -Sapphire::Data::Salvage::Salvage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +Sapphire::Data::SatisfactionArbitration::SatisfactionArbitration( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SalvageDat.get_row( row_id ); - optimalSkill = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_SatisfactionArbitrationDat.get_row( row_id, subRow ); + quest = exdData->getField< uint32_t >( row, 2 ); } Sapphire::Data::SatisfactionNpc::SatisfactionNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SatisfactionNpcDat.get_row( row_id ); - npc = exdData->getField< int32_t >( row, 0 ); - questRequired = exdData->getField< int32_t >( row, 1 ); - deliveriesPerWeek = exdData->getField< uint8_t >( row, 3 ); - supplyIndex.push_back( exdData->getField< int32_t >( row, 4 ) ); - supplyIndex.push_back( exdData->getField< int32_t >( row, 5 ) ); - supplyIndex.push_back( exdData->getField< int32_t >( row, 6 ) ); - supplyIndex.push_back( exdData->getField< int32_t >( row, 7 ) ); - supplyIndex.push_back( exdData->getField< int32_t >( row, 8 ) ); - supplyIndex.push_back( exdData->getField< int32_t >( row, 9 ) ); - satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 10 ) ); - satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 11 ) ); - satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 12 ) ); - satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 13 ) ); - satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 14 ) ); - satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 15 ) ); - icon = exdData->getField< int32_t >( row, 70 ); + auto row = exdData->m_SatisfactionNpcDat.get_row( row_id ); + npc = exdData->getField< int32_t >( row, 0 ); + questRequired = exdData->getField< int32_t >( row, 1 ); + levelUnlock = exdData->getField< uint8_t >( row, 2 ); + deliveriesPerWeek = exdData->getField< uint8_t >( row, 3 ); + supplyIndex.push_back( exdData->getField< int32_t >( row, 4 ) ); + supplyIndex.push_back( exdData->getField< int32_t >( row, 5 ) ); + supplyIndex.push_back( exdData->getField< int32_t >( row, 6 ) ); + supplyIndex.push_back( exdData->getField< int32_t >( row, 7 ) ); + supplyIndex.push_back( exdData->getField< int32_t >( row, 8 ) ); + supplyIndex.push_back( exdData->getField< int32_t >( row, 9 ) ); + satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 10 ) ); + satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 11 ) ); + satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 12 ) ); + satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 13 ) ); + satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 14 ) ); + satisfactionRequired.push_back( exdData->getField< uint16_t >( row, 15 ) ); + icon = exdData->getField< int32_t >( row, 70 ); + addedIn530 = exdData->getField< uint8_t >( row, 72 ); + addedIn531 = exdData->getField< uint8_t >( row, 73 ); } Sapphire::Data::SatisfactionSupply::SatisfactionSupply( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SatisfactionSupplyDat.get_row( row_id, subRow ); - slot = exdData->getField< uint8_t >( row, 0 ); - probability = exdData->getField< uint8_t >( row, 1 ); - item = exdData->getField< int32_t >( row, 2 ); - collectabilityLow = exdData->getField< uint16_t >( row, 3 ); - collectabilityMid = exdData->getField< uint16_t >( row, 4 ); - collectabilityHigh = exdData->getField< uint16_t >( row, 5 ); - reward = exdData->getField< uint16_t >( row, 6 ); + auto row = exdData->m_SatisfactionSupplyDat.get_row( row_id, subRow ); + slot = exdData->getField< uint8_t >( row, 0 ); + probability = exdData->getField< uint8_t >( row, 1 ); + item = exdData->getField< int32_t >( row, 2 ); + collectabilityLow = exdData->getField< uint16_t >( row, 3 ); + collectabilityMid = exdData->getField< uint16_t >( row, 4 ); + collectabilityHigh = exdData->getField< uint16_t >( row, 5 ); + reward = exdData->getField< uint16_t >( row, 6 ); } Sapphire::Data::SatisfactionSupplyReward::SatisfactionSupplyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SatisfactionSupplyRewardDat.get_row( row_id ); - satisfactionLow = exdData->getField< uint16_t >( row, 10 ); - satisfactionMid = exdData->getField< uint16_t >( row, 11 ); - satisfactionHigh = exdData->getField< uint16_t >( row, 12 ); - gilLow = exdData->getField< uint16_t >( row, 13 ); - gilMid = exdData->getField< uint16_t >( row, 14 ); - gilHigh = exdData->getField< uint16_t >( row, 15 ); + auto row = exdData->m_SatisfactionSupplyRewardDat.get_row( row_id ); + satisfactionLow = exdData->getField< uint16_t >( row, 10 ); + satisfactionMid = exdData->getField< uint16_t >( row, 11 ); + satisfactionHigh = exdData->getField< uint16_t >( row, 12 ); + gilLow = exdData->getField< uint16_t >( row, 13 ); + gilMid = exdData->getField< uint16_t >( row, 14 ); + gilHigh = exdData->getField< uint16_t >( row, 15 ); } Sapphire::Data::ScenarioTree::ScenarioTree( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ScenarioTreeDat.get_row( row_id ); - type = exdData->getField< uint8_t >( row, 0 ); - image = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_ScenarioTreeDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + image = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::ScenarioTreeTips::ScenarioTreeTips( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ScenarioTreeTipsDat.get_row( row_id ); - tips1 = exdData->getField< uint32_t >( row, 1 ); - tips2 = exdData->getField< uint32_t >( row, 3 ); + auto row = exdData->m_ScenarioTreeTipsDat.get_row( row_id ); + tips1 = exdData->getField< uint32_t >( row, 1 ); + tips2 = exdData->getField< uint32_t >( row, 3 ); } Sapphire::Data::ScenarioTreeTipsClassQuest::ScenarioTreeTipsClassQuest( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ScenarioTreeTipsClassQuestDat.get_row( row_id, subRow ); - quest = exdData->getField< uint32_t >( row, 0 ); - requiredLevel = exdData->getField< uint16_t >( row, 1 ); - requiredExpansion = exdData->getField< uint8_t >( row, 2 ); - requiredQuest = exdData->getField< uint32_t >( row, 3 ); -} - -Sapphire::Data::ScenarioTreeTipsQuest::ScenarioTreeTipsQuest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_ScenarioTreeTipsQuestDat.get_row( row_id ); - level = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_ScenarioTreeTipsClassQuestDat.get_row( row_id, subRow ); + quest = exdData->getField< uint32_t >( row, 0 ); + requiredLevel = exdData->getField< uint16_t >( row, 1 ); + requiredExpansion = exdData->getField< uint8_t >( row, 2 ); + requiredQuest = exdData->getField< uint32_t >( row, 3 ); } Sapphire::Data::ScenarioType::ScenarioType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ScenarioTypeDat.get_row( row_id ); - type = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_ScenarioTypeDat.get_row( row_id ); + type = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::ScreenImage::ScreenImage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ScreenImageDat.get_row( row_id ); - image = exdData->getField< uint32_t >( row, 0 ); + auto row = exdData->m_ScreenImageDat.get_row( row_id ); + image = exdData->getField< uint32_t >( row, 0 ); + jingle = exdData->getField< int16_t >( row, 1 ); + type = exdData->getField< int8_t >( row, 2 ); + lang = exdData->getField< bool >( row, 3 ); } Sapphire::Data::SecretRecipeBook::SecretRecipeBook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SecretRecipeBookDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_SecretRecipeBookDat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::SkyIsland2Mission::SkyIsland2Mission( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SkyIsland2MissionDat.get_row( row_id ); - item1 = exdData->getField< uint32_t >( row, 0 ); - item2 = exdData->getField< uint32_t >( row, 1 ); - objective1 = exdData->getField< uint16_t >( row, 4 ); - requiredAmount1 = exdData->getField< uint8_t >( row, 6 ); - objective2 = exdData->getField< uint16_t >( row, 9 ); - requiredAmount2 = exdData->getField< uint8_t >( row, 11 ); - objective3 = exdData->getField< uint16_t >( row, 14 ); - image = exdData->getField< uint32_t >( row, 20 ); + auto row = exdData->m_SkyIsland2MissionDat.get_row( row_id ); + item1 = exdData->getField< uint32_t >( row, 0 ); + item2 = exdData->getField< uint32_t >( row, 1 ); + placeName = exdData->getField< uint16_t >( row, 2 ); + objective1 = exdData->getField< uint16_t >( row, 4 ); + popRange0 = exdData->getField< uint32_t >( row, 5 ); + requiredAmount1 = exdData->getField< uint8_t >( row, 6 ); + objective2 = exdData->getField< uint16_t >( row, 9 ); + popRange1 = exdData->getField< uint32_t >( row, 10 ); + requiredAmount2 = exdData->getField< uint8_t >( row, 11 ); + objective3 = exdData->getField< uint16_t >( row, 14 ); + popRange2 = exdData->getField< uint32_t >( row, 15 ); + image = exdData->getField< uint32_t >( row, 20 ); } Sapphire::Data::SkyIsland2MissionDetail::SkyIsland2MissionDetail( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SkyIsland2MissionDetailDat.get_row( row_id ); - type = exdData->getField< uint8_t >( row, 0 ); - range = exdData->getField< uint8_t >( row, 2 ); - eObj = exdData->getField< uint32_t >( row, 4 ); - objective = exdData->getField< std::string >( row, 7 ); + auto row = exdData->m_SkyIsland2MissionDetailDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + range = exdData->getField< uint8_t >( row, 2 ); + eObj = exdData->getField< uint32_t >( row, 4 ); + objective = exdData->getField< std::string >( row, 7 ); } Sapphire::Data::SkyIsland2MissionType::SkyIsland2MissionType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SkyIsland2MissionTypeDat.get_row( row_id ); - type = exdData->getField< bool >( row, 0 ); + auto row = exdData->m_SkyIsland2MissionTypeDat.get_row( row_id ); + type = exdData->getField< bool >( row, 0 ); } Sapphire::Data::SkyIsland2RangeType::SkyIsland2RangeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SkyIsland2RangeTypeDat.get_row( row_id ); - type = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_SkyIsland2RangeTypeDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); +} + +Sapphire::Data::SnipeTalk::SnipeTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SnipeTalkDat.get_row( row_id ); + name = exdData->getField< uint16_t >( row, 2 ); + text = exdData->getField< std::string >( row, 3 ); +} + +Sapphire::Data::SnipeTalkName::SnipeTalkName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SnipeTalkNameDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::SpearfishingItem::SpearfishingItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SpearfishingItemDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); - item = exdData->getField< int32_t >( row, 1 ); - gatheringItemLevel = exdData->getField< uint16_t >( row, 2 ); - territoryType = exdData->getField< uint16_t >( row, 4 ); - isVisible = exdData->getField< bool >( row, 5 ); + auto row = exdData->m_SpearfishingItemDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); + item = exdData->getField< int32_t >( row, 1 ); + gatheringItemLevel = exdData->getField< uint16_t >( row, 2 ); + fishingRecordType = exdData->getField< uint8_t >( row, 3 ); + territoryType = exdData->getField< uint16_t >( row, 4 ); + isVisible = exdData->getField< bool >( row, 5 ); } Sapphire::Data::SpearfishingNotebook::SpearfishingNotebook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SpearfishingNotebookDat.get_row( row_id ); - gatheringLevel = exdData->getField< uint8_t >( row, 0 ); - territoryType = exdData->getField< int32_t >( row, 2 ); - x = exdData->getField< int16_t >( row, 3 ); - y = exdData->getField< int16_t >( row, 4 ); - radius = exdData->getField< uint16_t >( row, 5 ); - placeName = exdData->getField< uint16_t >( row, 7 ); - gatheringPointBase = exdData->getField< uint16_t >( row, 9 ); + auto row = exdData->m_SpearfishingNotebookDat.get_row( row_id ); + gatheringLevel = exdData->getField< uint8_t >( row, 0 ); + territoryType = exdData->getField< int32_t >( row, 2 ); + x = exdData->getField< int16_t >( row, 3 ); + y = exdData->getField< int16_t >( row, 4 ); + radius = exdData->getField< uint16_t >( row, 5 ); + placeName = exdData->getField< uint16_t >( row, 7 ); + gatheringPointBase = exdData->getField< uint16_t >( row, 9 ); } Sapphire::Data::SpearfishingRecordPage::SpearfishingRecordPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SpearfishingRecordPageDat.get_row( row_id ); - placeName = exdData->getField< int32_t >( row, 3 ); - image = exdData->getField< int32_t >( row, 4 ); + auto row = exdData->m_SpearfishingRecordPageDat.get_row( row_id ); + placeName = exdData->getField< int32_t >( row, 3 ); + image = exdData->getField< int32_t >( row, 4 ); } Sapphire::Data::SpecialShop::SpecialShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SpecialShopDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - questItem.push_back( exdData->getField< int32_t >( row, 1201 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1202 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1203 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1204 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1205 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1206 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1207 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1208 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1209 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1210 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1211 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1212 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1213 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1214 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1215 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1216 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1217 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1218 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1219 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1220 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1221 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1222 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1223 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1224 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1225 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1226 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1227 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1228 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1229 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1230 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1231 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1232 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1233 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1234 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1235 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1236 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1237 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1238 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1239 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1240 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1241 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1242 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1243 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1244 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1245 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1246 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1247 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1248 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1249 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1250 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1251 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1252 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1253 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1254 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1255 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1256 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1257 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1258 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1259 ) ); - questItem.push_back( exdData->getField< int32_t >( row, 1260 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1261 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1262 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1263 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1264 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1265 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1266 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1267 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1268 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1269 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1270 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1271 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1272 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1273 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1274 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1275 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1276 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1277 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1278 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1279 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1280 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1281 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1282 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1283 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1284 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1285 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1286 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1287 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1288 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1289 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1290 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1291 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1292 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1293 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1294 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1295 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1296 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1297 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1298 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1299 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1300 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1301 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1302 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1303 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1304 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1305 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1306 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1307 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1308 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1309 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1310 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1311 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1312 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1313 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1314 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1315 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1316 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1317 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1318 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1319 ) ); - unknown.push_back( exdData->getField< int32_t >( row, 1320 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1321 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1322 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1323 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1324 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1325 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1326 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1327 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1328 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1329 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1330 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1331 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1332 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1333 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1334 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1335 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1336 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1337 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1338 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1339 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1340 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1341 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1342 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1343 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1344 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1345 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1346 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1347 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1348 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1349 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1350 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1351 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1352 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1353 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1354 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1355 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1356 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1357 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1358 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1359 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1360 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1361 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1362 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1363 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1364 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1365 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1366 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1367 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1368 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1369 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1370 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1371 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1372 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1373 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1374 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1375 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1376 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1377 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1378 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1379 ) ); - achievementUnlock.push_back( exdData->getField< int32_t >( row, 1380 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1801 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1802 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1803 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1804 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1805 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1806 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1807 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1808 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1809 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1810 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1811 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1812 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1813 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1814 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1815 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1816 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1817 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1818 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1819 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1820 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1821 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1822 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1823 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1824 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1825 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1826 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1827 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1828 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1829 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1830 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1831 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1832 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1833 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1834 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1835 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1836 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1837 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1838 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1839 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1840 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1841 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1842 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1843 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1844 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1845 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1846 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1847 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1848 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1849 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1850 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1851 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1852 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1853 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1854 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1855 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1856 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1857 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1858 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1859 ) ); - patchNumber.push_back( exdData->getField< uint16_t >( row, 1860 ) ); - questUnlock = exdData->getField< uint32_t >( row, 1862 ); - questShop = exdData->getField< int32_t >( row, 1863 ); - notCompleteText = exdData->getField< int32_t >( row, 1864 ); - completeText = exdData->getField< int32_t >( row, 1865 ); + auto row = exdData->m_SpecialShopDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + questItem.push_back( exdData->getField< int32_t >( row, 1201 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1202 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1203 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1204 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1205 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1206 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1207 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1208 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1209 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1210 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1211 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1212 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1213 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1214 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1215 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1216 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1217 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1218 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1219 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1220 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1221 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1222 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1223 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1224 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1225 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1226 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1227 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1228 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1229 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1230 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1231 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1232 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1233 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1234 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1235 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1236 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1237 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1238 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1239 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1240 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1241 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1242 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1243 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1244 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1245 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1246 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1247 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1248 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1249 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1250 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1251 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1252 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1253 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1254 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1255 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1256 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1257 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1258 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1259 ) ); + questItem.push_back( exdData->getField< int32_t >( row, 1260 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1261 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1262 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1263 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1264 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1265 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1266 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1267 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1268 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1269 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1270 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1271 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1272 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1273 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1274 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1275 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1276 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1277 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1278 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1279 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1280 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1281 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1282 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1283 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1284 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1285 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1286 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1287 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1288 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1289 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1290 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1291 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1292 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1293 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1294 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1295 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1296 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1297 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1298 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1299 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1300 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1301 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1302 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1303 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1304 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1305 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1306 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1307 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1308 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1309 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1310 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1311 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1312 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1313 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1314 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1315 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1316 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1317 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1318 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1319 ) ); + unknown.push_back( exdData->getField< int32_t >( row, 1320 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1321 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1322 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1323 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1324 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1325 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1326 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1327 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1328 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1329 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1330 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1331 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1332 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1333 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1334 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1335 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1336 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1337 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1338 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1339 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1340 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1341 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1342 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1343 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1344 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1345 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1346 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1347 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1348 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1349 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1350 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1351 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1352 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1353 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1354 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1355 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1356 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1357 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1358 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1359 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1360 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1361 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1362 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1363 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1364 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1365 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1366 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1367 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1368 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1369 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1370 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1371 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1372 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1373 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1374 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1375 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1376 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1377 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1378 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1379 ) ); + achievementUnlock.push_back( exdData->getField< int32_t >( row, 1380 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1441 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1442 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1443 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1444 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1445 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1446 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1447 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1448 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1449 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1450 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1451 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1452 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1453 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1454 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1455 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1456 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1457 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1458 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1459 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1460 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1461 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1462 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1463 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1464 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1465 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1466 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1467 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1468 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1469 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1470 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1471 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1472 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1473 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1474 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1475 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1476 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1477 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1478 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1479 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1480 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1481 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1482 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1483 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1484 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1485 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1486 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1487 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1488 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1489 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1490 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1491 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1492 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1493 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1494 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1495 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1496 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1497 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1498 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1499 ) ); + patchNumber.push_back( exdData->getField< uint16_t >( row, 1500 ) ); + useCurrencyType = exdData->getField< bool >( row, 1501 ); + questUnlock = exdData->getField< uint32_t >( row, 1502 ); + completeText = exdData->getField< int32_t >( row, 1503 ); + notCompleteText = exdData->getField< int32_t >( row, 1504 ); } Sapphire::Data::SpecialShopItemCategory::SpecialShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SpecialShopItemCategoryDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_SpecialShopItemCategoryDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Stain::Stain( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_StainDat.get_row( row_id ); - color = exdData->getField< uint32_t >( row, 0 ); - shade = exdData->getField< uint8_t >( row, 1 ); - name = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_StainDat.get_row( row_id ); + color = exdData->getField< uint32_t >( row, 0 ); + shade = exdData->getField< uint8_t >( row, 1 ); + name = exdData->getField< std::string >( row, 3 ); } Sapphire::Data::StainTransient::StainTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_StainTransientDat.get_row( row_id ); - item1 = exdData->getField< uint32_t >( row, 0 ); - item2 = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_StainTransientDat.get_row( row_id ); + item1 = exdData->getField< uint32_t >( row, 0 ); + item2 = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::Status::Status( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_StatusDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - description = exdData->getField< std::string >( row, 1 ); - icon = exdData->getField< uint16_t >( row, 2 ); - maxStacks = exdData->getField< uint8_t >( row, 3 ); - category = exdData->getField< uint8_t >( row, 4 ); - hitEffect = exdData->getField< uint8_t >( row, 5 ); - vFX = exdData->getField< uint8_t >( row, 6 ); - lockMovement = exdData->getField< bool >( row, 7 ); - lockActions = exdData->getField< bool >( row, 9 ); - lockControl = exdData->getField< bool >( row, 10 ); - transfiguration = exdData->getField< bool >( row, 11 ); - canDispel = exdData->getField< bool >( row, 13 ); - inflictedByActor = exdData->getField< bool >( row, 14 ); - isPermanent = exdData->getField< bool >( row, 15 ); - isFcBuff = exdData->getField< bool >( row, 21 ); - invisibility = exdData->getField< bool >( row, 22 ); + auto row = exdData->m_StatusDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + description = exdData->getField< std::string >( row, 1 ); + icon = exdData->getField< uint16_t >( row, 2 ); + maxStacks = exdData->getField< uint8_t >( row, 3 ); + category = exdData->getField< uint8_t >( row, 5 ); + hitEffect = exdData->getField< uint8_t >( row, 6 ); + vFX = exdData->getField< uint8_t >( row, 7 ); + lockMovement = exdData->getField< bool >( row, 8 ); + lockActions = exdData->getField< bool >( row, 10 ); + lockControl = exdData->getField< bool >( row, 11 ); + transfiguration = exdData->getField< bool >( row, 12 ); + canDispel = exdData->getField< bool >( row, 14 ); + inflictedByActor = exdData->getField< bool >( row, 15 ); + isPermanent = exdData->getField< bool >( row, 16 ); + partyListPriority = exdData->getField< uint8_t >( row, 17 ); + log = exdData->getField< uint16_t >( row, 24 ); + isFcBuff = exdData->getField< bool >( row, 25 ); + invisibility = exdData->getField< bool >( row, 26 ); } Sapphire::Data::StatusHitEffect::StatusHitEffect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_StatusHitEffectDat.get_row( row_id ); - location = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_StatusHitEffectDat.get_row( row_id ); + location = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::StatusLoopVFX::StatusLoopVFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_StatusLoopVFXDat.get_row( row_id ); - vFX = exdData->getField< uint16_t >( row, 0 ); - vFX2 = exdData->getField< uint16_t >( row, 2 ); - vFX3 = exdData->getField< uint16_t >( row, 4 ); + auto row = exdData->m_StatusLoopVFXDat.get_row( row_id ); + vFX = exdData->getField< uint16_t >( row, 0 ); + vFX2 = exdData->getField< uint16_t >( row, 2 ); + vFX3 = exdData->getField< uint16_t >( row, 4 ); } Sapphire::Data::Story::Story( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_StoryDat.get_row( row_id ); + auto row = exdData->m_StoryDat.get_row( row_id ); + script = exdData->getField< std::string >( row, 0 ); + instruction.push_back( exdData->getField< std::string >( row, 1 ) ); + instruction.push_back( exdData->getField< std::string >( row, 2 ) ); + instruction.push_back( exdData->getField< std::string >( row, 3 ) ); + instruction.push_back( exdData->getField< std::string >( row, 4 ) ); + instruction.push_back( exdData->getField< std::string >( row, 5 ) ); + instruction.push_back( exdData->getField< std::string >( row, 6 ) ); + instruction.push_back( exdData->getField< std::string >( row, 7 ) ); + instruction.push_back( exdData->getField< std::string >( row, 8 ) ); + instruction.push_back( exdData->getField< std::string >( row, 9 ) ); + instruction.push_back( exdData->getField< std::string >( row, 10 ) ); + instruction.push_back( exdData->getField< std::string >( row, 11 ) ); + instruction.push_back( exdData->getField< std::string >( row, 12 ) ); + instruction.push_back( exdData->getField< std::string >( row, 13 ) ); + instruction.push_back( exdData->getField< std::string >( row, 14 ) ); + instruction.push_back( exdData->getField< std::string >( row, 15 ) ); + instruction.push_back( exdData->getField< std::string >( row, 16 ) ); + instruction.push_back( exdData->getField< std::string >( row, 17 ) ); + instruction.push_back( exdData->getField< std::string >( row, 18 ) ); + instruction.push_back( exdData->getField< std::string >( row, 19 ) ); + instruction.push_back( exdData->getField< std::string >( row, 20 ) ); + instruction.push_back( exdData->getField< std::string >( row, 21 ) ); + instruction.push_back( exdData->getField< std::string >( row, 22 ) ); + instruction.push_back( exdData->getField< std::string >( row, 23 ) ); + instruction.push_back( exdData->getField< std::string >( row, 24 ) ); + instruction.push_back( exdData->getField< std::string >( row, 25 ) ); + instruction.push_back( exdData->getField< std::string >( row, 26 ) ); + instruction.push_back( exdData->getField< std::string >( row, 27 ) ); + instruction.push_back( exdData->getField< std::string >( row, 28 ) ); + instruction.push_back( exdData->getField< std::string >( row, 29 ) ); + instruction.push_back( exdData->getField< std::string >( row, 30 ) ); + instruction.push_back( exdData->getField< std::string >( row, 31 ) ); + instruction.push_back( exdData->getField< std::string >( row, 32 ) ); + instruction.push_back( exdData->getField< std::string >( row, 33 ) ); + instruction.push_back( exdData->getField< std::string >( row, 34 ) ); + instruction.push_back( exdData->getField< std::string >( row, 35 ) ); + instruction.push_back( exdData->getField< std::string >( row, 36 ) ); + instruction.push_back( exdData->getField< std::string >( row, 37 ) ); + instruction.push_back( exdData->getField< std::string >( row, 38 ) ); + instruction.push_back( exdData->getField< std::string >( row, 39 ) ); + instruction.push_back( exdData->getField< std::string >( row, 40 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 41 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 42 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 43 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 44 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 45 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 46 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 47 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 48 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 49 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 50 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 51 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 52 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 53 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 54 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 55 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 56 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 57 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 58 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 59 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 60 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 61 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 62 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 63 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 64 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 65 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 66 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 67 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 68 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 69 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 70 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 71 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 72 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 73 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 74 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 75 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 76 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 77 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 78 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 79 ) ); + argument.push_back( exdData->getField< uint32_t >( row, 80 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 81 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 82 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 83 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 84 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 85 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 86 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 87 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 88 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 89 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 90 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 91 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 92 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 93 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 94 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 95 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 96 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 97 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 98 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 99 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 100 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 101 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 102 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 103 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 104 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 105 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 106 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 107 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 108 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 109 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 110 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 111 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 112 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 113 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 114 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 115 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 116 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 117 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 118 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 119 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 120 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 121 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 122 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 123 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 124 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 125 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 126 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 127 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 128 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 129 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 130 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 131 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 132 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 133 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 134 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 135 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 136 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 137 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 138 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 139 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 140 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 141 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 142 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 143 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 144 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 145 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 146 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 147 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 148 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 149 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 150 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 151 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 152 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 153 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 154 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 155 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 156 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 157 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 158 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 159 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 160 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 161 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 162 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 163 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 164 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 165 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 166 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 167 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 168 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 169 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 170 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 171 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 172 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 173 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 174 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 175 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 176 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 177 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 178 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 179 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 180 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 181 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 182 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 183 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 184 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 185 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 186 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 187 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 188 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 189 ) ); + sequence.push_back( exdData->getField< uint16_t >( row, 190 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 191 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 192 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 193 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 194 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 195 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 196 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 197 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 198 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 199 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 200 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 201 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 202 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 203 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 204 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 205 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 206 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 207 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 208 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 209 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 210 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 211 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 212 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 213 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 214 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 215 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 216 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 217 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 218 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 219 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 220 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 221 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 222 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 223 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 224 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 225 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 226 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 227 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 228 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 229 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 230 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 231 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 232 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 233 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 234 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 235 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 236 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 237 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 238 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 239 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 240 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 241 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 242 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 243 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 244 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 245 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 246 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 247 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 248 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 249 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 250 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 251 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 252 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 253 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 254 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 255 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 256 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 257 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 258 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 259 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 260 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 261 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 262 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 263 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 264 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 265 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 266 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 267 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 268 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 269 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 270 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 271 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 272 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 273 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 274 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 275 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 276 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 277 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 278 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 279 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 280 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 281 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 282 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 283 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 284 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 285 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 286 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 287 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 288 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 289 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 290 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 291 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 292 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 293 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 294 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 295 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 296 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 297 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 298 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 299 ) ); + completedQuestOperator.push_back( exdData->getField< uint8_t >( row, 300 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 301 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 302 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 303 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 304 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 305 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 306 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 307 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 308 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 309 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 310 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 311 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 312 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 313 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 314 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 315 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 316 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 317 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 318 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 319 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 320 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 321 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 322 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 323 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 324 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 325 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 326 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 327 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 328 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 329 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 330 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 331 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 332 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 333 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 334 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 335 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 336 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 337 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 338 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 339 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 340 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 341 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 342 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 343 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 344 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 345 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 346 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 347 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 348 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 349 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 350 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 351 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 352 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 353 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 354 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 355 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 356 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 357 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 358 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 359 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 360 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 361 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 362 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 363 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 364 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 365 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 366 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 367 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 368 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 369 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 370 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 371 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 372 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 373 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 374 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 375 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 376 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 377 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 378 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 379 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 380 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 381 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 382 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 383 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 384 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 385 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 386 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 387 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 388 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 389 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 390 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 391 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 392 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 393 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 394 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 395 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 396 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 397 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 398 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 399 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 400 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 401 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 402 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 403 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 404 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 405 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 406 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 407 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 408 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 409 ) ); + completedQuest0.push_back( exdData->getField< uint32_t >( row, 410 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 411 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 412 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 413 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 414 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 415 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 416 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 417 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 418 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 419 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 420 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 421 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 422 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 423 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 424 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 425 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 426 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 427 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 428 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 429 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 430 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 431 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 432 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 433 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 434 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 435 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 436 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 437 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 438 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 439 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 440 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 441 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 442 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 443 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 444 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 445 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 446 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 447 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 448 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 449 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 450 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 451 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 452 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 453 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 454 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 455 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 456 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 457 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 458 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 459 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 460 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 461 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 462 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 463 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 464 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 465 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 466 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 467 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 468 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 469 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 470 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 471 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 472 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 473 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 474 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 475 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 476 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 477 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 478 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 479 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 480 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 481 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 482 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 483 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 484 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 485 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 486 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 487 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 488 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 489 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 490 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 491 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 492 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 493 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 494 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 495 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 496 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 497 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 498 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 499 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 500 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 501 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 502 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 503 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 504 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 505 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 506 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 507 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 508 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 509 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 510 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 511 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 512 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 513 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 514 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 515 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 516 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 517 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 518 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 519 ) ); + completedQuest1.push_back( exdData->getField< uint32_t >( row, 520 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 521 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 522 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 523 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 524 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 525 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 526 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 527 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 528 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 529 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 530 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 531 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 532 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 533 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 534 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 535 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 536 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 537 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 538 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 539 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 540 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 541 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 542 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 543 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 544 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 545 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 546 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 547 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 548 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 549 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 550 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 551 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 552 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 553 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 554 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 555 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 556 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 557 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 558 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 559 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 560 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 561 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 562 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 563 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 564 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 565 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 566 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 567 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 568 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 569 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 570 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 571 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 572 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 573 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 574 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 575 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 576 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 577 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 578 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 579 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 580 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 581 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 582 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 583 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 584 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 585 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 586 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 587 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 588 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 589 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 590 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 591 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 592 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 593 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 594 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 595 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 596 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 597 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 598 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 599 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 600 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 601 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 602 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 603 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 604 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 605 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 606 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 607 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 608 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 609 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 610 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 611 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 612 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 613 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 614 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 615 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 616 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 617 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 618 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 619 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 620 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 621 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 622 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 623 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 624 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 625 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 626 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 627 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 628 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 629 ) ); + completedQuest2.push_back( exdData->getField< uint32_t >( row, 630 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 631 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 632 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 633 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 634 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 635 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 636 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 637 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 638 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 639 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 640 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 641 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 642 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 643 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 644 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 645 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 646 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 647 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 648 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 649 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 650 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 651 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 652 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 653 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 654 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 655 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 656 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 657 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 658 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 659 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 660 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 661 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 662 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 663 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 664 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 665 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 666 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 667 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 668 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 669 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 670 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 671 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 672 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 673 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 674 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 675 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 676 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 677 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 678 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 679 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 680 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 681 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 682 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 683 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 684 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 685 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 686 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 687 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 688 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 689 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 690 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 691 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 692 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 693 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 694 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 695 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 696 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 697 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 698 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 699 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 700 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 701 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 702 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 703 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 704 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 705 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 706 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 707 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 708 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 709 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 710 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 711 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 712 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 713 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 714 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 715 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 716 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 717 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 718 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 719 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 720 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 721 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 722 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 723 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 724 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 725 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 726 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 727 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 728 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 729 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 730 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 731 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 732 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 733 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 734 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 735 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 736 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 737 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 738 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 739 ) ); + acceptedQuestOperator.push_back( exdData->getField< uint8_t >( row, 740 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 741 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 742 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 743 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 744 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 745 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 746 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 747 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 748 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 749 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 750 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 751 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 752 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 753 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 754 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 755 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 756 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 757 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 758 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 759 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 760 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 761 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 762 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 763 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 764 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 765 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 766 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 767 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 768 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 769 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 770 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 771 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 772 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 773 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 774 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 775 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 776 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 777 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 778 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 779 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 780 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 781 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 782 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 783 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 784 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 785 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 786 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 787 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 788 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 789 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 790 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 791 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 792 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 793 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 794 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 795 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 796 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 797 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 798 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 799 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 800 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 801 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 802 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 803 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 804 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 805 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 806 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 807 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 808 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 809 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 810 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 811 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 812 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 813 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 814 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 815 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 816 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 817 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 818 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 819 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 820 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 821 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 822 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 823 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 824 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 825 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 826 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 827 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 828 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 829 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 830 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 831 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 832 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 833 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 834 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 835 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 836 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 837 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 838 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 839 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 840 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 841 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 842 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 843 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 844 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 845 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 846 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 847 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 848 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 849 ) ); + acceptedQuest0.push_back( exdData->getField< uint32_t >( row, 850 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 851 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 852 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 853 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 854 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 855 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 856 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 857 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 858 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 859 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 860 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 861 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 862 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 863 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 864 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 865 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 866 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 867 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 868 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 869 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 870 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 871 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 872 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 873 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 874 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 875 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 876 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 877 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 878 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 879 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 880 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 881 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 882 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 883 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 884 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 885 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 886 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 887 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 888 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 889 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 890 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 891 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 892 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 893 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 894 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 895 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 896 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 897 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 898 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 899 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 900 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 901 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 902 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 903 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 904 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 905 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 906 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 907 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 908 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 909 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 910 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 911 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 912 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 913 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 914 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 915 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 916 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 917 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 918 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 919 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 920 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 921 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 922 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 923 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 924 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 925 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 926 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 927 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 928 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 929 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 930 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 931 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 932 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 933 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 934 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 935 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 936 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 937 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 938 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 939 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 940 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 941 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 942 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 943 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 944 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 945 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 946 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 947 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 948 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 949 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 950 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 951 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 952 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 953 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 954 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 955 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 956 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 957 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 958 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 959 ) ); + acceptedQuestSequence0.push_back( exdData->getField< uint8_t >( row, 960 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 961 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 962 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 963 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 964 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 965 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 966 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 967 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 968 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 969 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 970 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 971 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 972 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 973 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 974 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 975 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 976 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 977 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 978 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 979 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 980 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 981 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 982 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 983 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 984 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 985 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 986 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 987 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 988 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 989 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 990 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 991 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 992 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 993 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 994 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 995 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 996 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 997 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 998 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 999 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1000 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1001 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1002 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1003 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1004 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1005 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1006 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1007 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1008 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1009 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1010 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1011 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1012 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1013 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1014 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1015 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1016 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1017 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1018 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1019 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1020 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1021 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1022 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1023 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1024 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1025 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1026 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1027 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1028 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1029 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1030 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1031 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1032 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1033 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1034 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1035 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1036 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1037 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1038 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1039 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1040 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1041 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1042 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1043 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1044 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1045 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1046 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1047 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1048 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1049 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1050 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1051 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1052 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1053 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1054 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1055 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1056 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1057 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1058 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1059 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1060 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1061 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1062 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1063 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1064 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1065 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1066 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1067 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1068 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1069 ) ); + acceptedQuest1.push_back( exdData->getField< uint32_t >( row, 1070 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1071 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1072 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1073 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1074 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1075 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1076 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1077 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1078 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1079 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1080 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1081 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1082 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1083 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1084 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1085 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1086 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1087 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1088 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1089 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1090 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1091 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1092 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1093 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1094 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1095 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1096 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1097 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1098 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1099 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1100 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1101 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1102 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1103 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1104 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1105 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1106 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1107 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1108 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1109 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1110 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1111 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1112 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1113 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1114 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1115 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1116 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1117 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1118 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1119 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1120 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1121 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1122 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1123 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1124 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1125 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1126 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1127 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1128 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1129 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1130 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1131 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1132 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1133 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1134 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1135 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1136 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1137 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1138 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1139 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1140 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1141 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1142 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1143 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1144 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1145 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1146 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1147 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1148 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1149 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1150 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1151 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1152 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1153 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1154 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1155 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1156 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1157 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1158 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1159 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1160 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1161 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1162 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1163 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1164 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1165 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1166 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1167 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1168 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1169 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1170 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1171 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1172 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1173 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1174 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1175 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1176 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1177 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1178 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1179 ) ); + acceptedQuestSequence1.push_back( exdData->getField< uint8_t >( row, 1180 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1181 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1182 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1183 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1184 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1185 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1186 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1187 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1188 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1189 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1190 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1191 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1192 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1193 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1194 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1195 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1196 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1197 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1198 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1199 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1200 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1201 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1202 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1203 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1204 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1205 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1206 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1207 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1208 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1209 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1210 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1211 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1212 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1213 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1214 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1215 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1216 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1217 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1218 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1219 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1220 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1221 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1222 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1223 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1224 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1225 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1226 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1227 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1228 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1229 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1230 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1231 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1232 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1233 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1234 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1235 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1236 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1237 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1238 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1239 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1240 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1241 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1242 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1243 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1244 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1245 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1246 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1247 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1248 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1249 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1250 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1251 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1252 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1253 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1254 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1255 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1256 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1257 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1258 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1259 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1260 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1261 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1262 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1263 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1264 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1265 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1266 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1267 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1268 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1269 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1270 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1271 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1272 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1273 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1274 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1275 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1276 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1277 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1278 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1279 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1280 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1281 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1282 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1283 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1284 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1285 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1286 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1287 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1288 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1289 ) ); + acceptedQuest2.push_back( exdData->getField< uint32_t >( row, 1290 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1291 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1292 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1293 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1294 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1295 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1296 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1297 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1298 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1299 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1300 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1301 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1302 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1303 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1304 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1305 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1306 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1307 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1308 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1309 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1310 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1311 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1312 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1313 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1314 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1315 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1316 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1317 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1318 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1319 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1320 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1321 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1322 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1323 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1324 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1325 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1326 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1327 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1328 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1329 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1330 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1331 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1332 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1333 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1334 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1335 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1336 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1337 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1338 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1339 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1340 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1341 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1342 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1343 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1344 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1345 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1346 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1347 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1348 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1349 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1350 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1351 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1352 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1353 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1354 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1355 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1356 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1357 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1358 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1359 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1360 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1361 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1362 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1363 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1364 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1365 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1366 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1367 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1368 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1369 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1370 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1371 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1372 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1373 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1374 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1375 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1376 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1377 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1378 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1379 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1380 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1381 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1382 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1383 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1384 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1385 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1386 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1387 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1388 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1389 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1390 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1391 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1392 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1393 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1394 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1395 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1396 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1397 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1398 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1399 ) ); + acceptedQuestSequence2.push_back( exdData->getField< uint8_t >( row, 1400 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1401 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1402 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1403 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1404 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1405 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1406 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1407 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1408 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1409 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1410 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1411 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1412 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1413 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1414 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1415 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1416 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1417 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1418 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1419 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1420 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1421 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1422 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1423 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1424 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1425 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1426 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1427 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1428 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1429 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1430 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1431 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1432 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1433 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1434 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1435 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1436 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1437 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1438 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1439 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1440 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1441 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1442 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1443 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1444 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1445 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1446 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1447 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1448 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1449 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1450 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1451 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1452 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1453 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1454 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1455 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1456 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1457 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1458 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1459 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1460 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1461 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1462 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1463 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1464 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1465 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1466 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1467 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1468 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1469 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1470 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1471 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1472 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1473 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1474 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1475 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1476 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1477 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1478 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1479 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1480 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1481 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1482 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1483 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1484 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1485 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1486 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1487 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1488 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1489 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1490 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1491 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1492 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1493 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1494 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1495 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1496 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1497 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1498 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1499 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1500 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1501 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1502 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1503 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1504 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1505 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1506 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1507 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1508 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1509 ) ); + layerSet0.push_back( exdData->getField< uint32_t >( row, 1510 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1511 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1512 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1513 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1514 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1515 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1516 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1517 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1518 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1519 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1520 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1521 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1522 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1523 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1524 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1525 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1526 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1527 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1528 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1529 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1530 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1531 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1532 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1533 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1534 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1535 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1536 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1537 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1538 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1539 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1540 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1541 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1542 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1543 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1544 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1545 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1546 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1547 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1548 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1549 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1550 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1551 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1552 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1553 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1554 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1555 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1556 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1557 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1558 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1559 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1560 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1561 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1562 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1563 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1564 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1565 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1566 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1567 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1568 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1569 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1570 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1571 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1572 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1573 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1574 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1575 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1576 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1577 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1578 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1579 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1580 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1581 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1582 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1583 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1584 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1585 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1586 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1587 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1588 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1589 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1590 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1591 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1592 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1593 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1594 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1595 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1596 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1597 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1598 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1599 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1600 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1601 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1602 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1603 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1604 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1605 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1606 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1607 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1608 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1609 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1610 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1611 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1612 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1613 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1614 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1615 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1616 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1617 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1618 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1619 ) ); + layerSet1.push_back( exdData->getField< uint32_t >( row, 1620 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1621 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1622 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1623 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1624 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1625 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1626 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1627 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1628 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1629 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1630 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1631 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1632 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1633 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1634 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1635 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1636 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1637 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1638 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1639 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1640 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1641 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1642 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1643 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1644 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1645 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1646 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1647 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1648 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1649 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1650 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1651 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1652 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1653 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1654 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1655 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1656 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1657 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1658 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1659 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1660 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1661 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1662 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1663 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1664 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1665 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1666 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1667 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1668 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1669 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1670 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1671 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1672 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1673 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1674 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1675 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1676 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1677 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1678 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1679 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1680 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1681 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1682 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1683 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1684 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1685 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1686 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1687 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1688 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1689 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1690 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1691 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1692 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1693 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1694 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1695 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1696 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1697 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1698 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1699 ) ); + sequenceBegin.push_back( exdData->getField< uint16_t >( row, 1700 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1701 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1702 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1703 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1704 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1705 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1706 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1707 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1708 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1709 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1710 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1711 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1712 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1713 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1714 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1715 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1716 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1717 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1718 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1719 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1720 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1721 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1722 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1723 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1724 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1725 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1726 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1727 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1728 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1729 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1730 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1731 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1732 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1733 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1734 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1735 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1736 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1737 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1738 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1739 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1740 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1741 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1742 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1743 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1744 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1745 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1746 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1747 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1748 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1749 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1750 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1751 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1752 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1753 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1754 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1755 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1756 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1757 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1758 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1759 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1760 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1761 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1762 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1763 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1764 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1765 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1766 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1767 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1768 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1769 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1770 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1771 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1772 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1773 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1774 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1775 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1776 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1777 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1778 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1779 ) ); + sequenceEnd.push_back( exdData->getField< uint16_t >( row, 1780 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1781 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1782 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1783 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1784 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1785 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1786 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1787 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1788 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1789 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1790 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1791 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1792 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1793 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1794 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1795 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1796 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1797 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1798 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1799 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1800 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1801 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1802 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1803 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1804 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1805 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1806 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1807 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1808 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1809 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1810 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1811 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1812 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1813 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1814 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1815 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1816 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1817 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1818 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1819 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1820 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1821 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1822 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1823 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1824 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1825 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1826 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1827 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1828 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1829 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1830 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1831 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1832 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1833 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1834 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1835 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1836 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1837 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1838 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1839 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1840 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1841 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1842 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1843 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1844 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1845 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1846 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1847 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1848 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1849 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1850 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1851 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1852 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1853 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1854 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1855 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1856 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1857 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1858 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1859 ) ); + listener.push_back( exdData->getField< uint32_t >( row, 1860 ) ); + layerSetTerritoryType0 = exdData->getField< uint16_t >( row, 1861 ); + layerSetTerritoryType1 = exdData->getField< uint16_t >( row, 1862 ); } Sapphire::Data::SubmarineExploration::SubmarineExploration( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SubmarineExplorationDat.get_row( row_id ); - destination = exdData->getField< std::string >( row, 0 ); - location = exdData->getField< std::string >( row, 1 ); - rankReq = exdData->getField< uint8_t >( row, 5 ); - ceruleumTankReq = exdData->getField< uint8_t >( row, 6 ); - durationmin = exdData->getField< uint16_t >( row, 7 ); - distanceForSurvey = exdData->getField< uint8_t >( row, 8 ); - expReward = exdData->getField< uint32_t >( row, 9 ); + auto row = exdData->m_SubmarineExplorationDat.get_row( row_id ); + destination = exdData->getField< std::string >( row, 0 ); + location = exdData->getField< std::string >( row, 1 ); + map = exdData->getField< uint8_t >( row, 5 ); + stars = exdData->getField< uint8_t >( row, 7 ); + rankReq = exdData->getField< uint8_t >( row, 8 ); + ceruleumTankReq = exdData->getField< uint8_t >( row, 9 ); + durationmin = exdData->getField< uint16_t >( row, 10 ); + distanceForSurvey = exdData->getField< uint8_t >( row, 11 ); + expReward = exdData->getField< uint32_t >( row, 12 ); +} + +Sapphire::Data::SubmarineMap::SubmarineMap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SubmarineMapDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + image = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::SubmarinePart::SubmarinePart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SubmarinePartDat.get_row( row_id ); - slot = exdData->getField< uint8_t >( row, 0 ); - rank = exdData->getField< uint8_t >( row, 1 ); - components = exdData->getField< uint8_t >( row, 2 ); - surveillance = exdData->getField< int16_t >( row, 3 ); - retrieval = exdData->getField< int16_t >( row, 4 ); - speed = exdData->getField< int16_t >( row, 5 ); - range = exdData->getField< int16_t >( row, 6 ); - favor = exdData->getField< int16_t >( row, 7 ); - repairMaterials = exdData->getField< uint8_t >( row, 9 ); + auto row = exdData->m_SubmarinePartDat.get_row( row_id ); + slot = exdData->getField< uint8_t >( row, 0 ); + rank = exdData->getField< uint8_t >( row, 1 ); + components = exdData->getField< uint8_t >( row, 2 ); + surveillance = exdData->getField< int16_t >( row, 3 ); + retrieval = exdData->getField< int16_t >( row, 4 ); + speed = exdData->getField< int16_t >( row, 5 ); + range = exdData->getField< int16_t >( row, 6 ); + favor = exdData->getField< int16_t >( row, 7 ); + repairMaterials = exdData->getField< uint8_t >( row, 9 ); } Sapphire::Data::SubmarineRank::SubmarineRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SubmarineRankDat.get_row( row_id ); - rank = exdData->getField< uint16_t >( row, 0 ); - expToNext = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_SubmarineRankDat.get_row( row_id ); + capacity = exdData->getField< uint16_t >( row, 0 ); + expToNext = exdData->getField< uint32_t >( row, 1 ); + surveillanceBonus = exdData->getField< uint8_t >( row, 2 ); + retrievalBonus = exdData->getField< uint8_t >( row, 3 ); + speedBonus = exdData->getField< uint8_t >( row, 4 ); + rangeBonus = exdData->getField< uint8_t >( row, 5 ); + favorBonus = exdData->getField< uint8_t >( row, 6 ); } Sapphire::Data::SwitchTalk::SwitchTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_SwitchTalkDat.get_row( row_id ); - quest.push_back( exdData->getField< uint32_t >( row, 2 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 3 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 4 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 5 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 6 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 7 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 8 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 9 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 10 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 11 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 12 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 13 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 14 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 15 ) ); - quest.push_back( exdData->getField< uint32_t >( row, 16 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 17 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 18 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 19 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 20 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 21 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 22 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 23 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 24 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 25 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 26 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 27 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 28 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 29 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 30 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 31 ) ); - defaultTalk.push_back( exdData->getField< uint32_t >( row, 32 ) ); + auto row = exdData->m_SwitchTalkDat.get_row( row_id ); +} + +Sapphire::Data::SwitchTalkVariation::SwitchTalkVariation( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SwitchTalkVariationDat.get_row( row_id, subRow ); + quest0 = exdData->getField< uint32_t >( row, 0 ); + quest1 = exdData->getField< uint32_t >( row, 1 ); + defaultTalk = exdData->getField< uint32_t >( row, 3 ); } Sapphire::Data::TerritoryType::TerritoryType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TerritoryTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - bg = exdData->getField< std::string >( row, 1 ); - placeNameRegion = exdData->getField< uint16_t >( row, 3 ); - placeNameZone = exdData->getField< uint16_t >( row, 4 ); - placeName = exdData->getField< uint16_t >( row, 5 ); - map = exdData->getField< uint16_t >( row, 6 ); - territoryIntendedUse = exdData->getField< uint8_t >( row, 9 ); - weatherRate = exdData->getField< uint8_t >( row, 12 ); - arrayEventHandler = exdData->getField< uint32_t >( row, 22 ); - questBattle = exdData->getField< uint16_t >( row, 23 ); - aetheryte = exdData->getField< int32_t >( row, 24 ); + auto row = exdData->m_TerritoryTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + bg = exdData->getField< std::string >( row, 1 ); + battalionMode = exdData->getField< uint8_t >( row, 2 ); + placeNameRegion = exdData->getField< uint16_t >( row, 3 ); + placeNameZone = exdData->getField< uint16_t >( row, 4 ); + placeName = exdData->getField< uint16_t >( row, 5 ); + map = exdData->getField< uint16_t >( row, 6 ); + loadingImage = exdData->getField< uint8_t >( row, 7 ); + exclusiveType = exdData->getField< uint8_t >( row, 8 ); + territoryIntendedUse = exdData->getField< uint8_t >( row, 9 ); + weatherRate = exdData->getField< uint8_t >( row, 12 ); + pCSearch = exdData->getField< bool >( row, 15 ); + stealth = exdData->getField< bool >( row, 16 ); + mount = exdData->getField< bool >( row, 17 ); + bGM = exdData->getField< uint16_t >( row, 19 ); + placeNameRegionIcon = exdData->getField< int32_t >( row, 20 ); + placeNameIcon = exdData->getField< int32_t >( row, 21 ); + arrayEventHandler = exdData->getField< uint32_t >( row, 22 ); + questBattle = exdData->getField< uint16_t >( row, 23 ); + aetheryte = exdData->getField< int32_t >( row, 24 ); + fixedTime = exdData->getField< int32_t >( row, 25 ); + resident = exdData->getField< uint16_t >( row, 26 ); + achievementIndex = exdData->getField< int8_t >( row, 27 ); + isPvpZone = exdData->getField< bool >( row, 28 ); + exVersion = exdData->getField< uint8_t >( row, 29 ); + addedIn53 = exdData->getField< uint8_t >( row, 32 ); + mountSpeed = exdData->getField< uint8_t >( row, 33 ); +} + +Sapphire::Data::TerritoryTypeTransient::TerritoryTypeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_TerritoryTypeTransientDat.get_row( row_id ); + offsetZ = exdData->getField< int16_t >( row, 0 ); } Sapphire::Data::TextCommand::TextCommand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TextCommandDat.get_row( row_id ); - command = exdData->getField< std::string >( row, 5 ); - shortCommand = exdData->getField< std::string >( row, 6 ); - description = exdData->getField< std::string >( row, 7 ); - alias = exdData->getField< std::string >( row, 8 ); - shortAlias = exdData->getField< std::string >( row, 9 ); + auto row = exdData->m_TextCommandDat.get_row( row_id ); + command = exdData->getField< std::string >( row, 5 ); + shortCommand = exdData->getField< std::string >( row, 6 ); + description = exdData->getField< std::string >( row, 7 ); + alias = exdData->getField< std::string >( row, 8 ); + shortAlias = exdData->getField< std::string >( row, 9 ); } Sapphire::Data::Title::Title( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TitleDat.get_row( row_id ); - masculine = exdData->getField< std::string >( row, 0 ); - feminine = exdData->getField< std::string >( row, 1 ); - isPrefix = exdData->getField< bool >( row, 2 ); - order = exdData->getField< uint16_t >( row, 3 ); + auto row = exdData->m_TitleDat.get_row( row_id ); + masculine = exdData->getField< std::string >( row, 0 ); + feminine = exdData->getField< std::string >( row, 1 ); + isPrefix = exdData->getField< bool >( row, 2 ); + order = exdData->getField< uint16_t >( row, 3 ); } Sapphire::Data::Tomestones::Tomestones( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TomestonesDat.get_row( row_id ); - weeklyLimit = exdData->getField< uint16_t >( row, 0 ); + auto row = exdData->m_TomestonesDat.get_row( row_id ); + weeklyLimit = exdData->getField< uint16_t >( row, 0 ); } Sapphire::Data::TomestonesItem::TomestonesItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TomestonesItemDat.get_row( row_id ); - item = exdData->getField< int32_t >( row, 0 ); - tomestones = exdData->getField< int32_t >( row, 2 ); + auto row = exdData->m_TomestonesItemDat.get_row( row_id ); + item = exdData->getField< int32_t >( row, 0 ); + tomestones = exdData->getField< int32_t >( row, 2 ); } Sapphire::Data::TopicSelect::TopicSelect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TopicSelectDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_TopicSelectDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Town::Town( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TownDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_TownDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::Trait::Trait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TraitDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - icon = exdData->getField< int32_t >( row, 1 ); - classJob = exdData->getField< uint8_t >( row, 2 ); - level = exdData->getField< uint8_t >( row, 3 ); - quest = exdData->getField< uint32_t >( row, 4 ); - value = exdData->getField< int16_t >( row, 5 ); - classJobCategory = exdData->getField< uint8_t >( row, 6 ); + auto row = exdData->m_TraitDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); + classJob = exdData->getField< uint8_t >( row, 2 ); + level = exdData->getField< uint8_t >( row, 3 ); + quest = exdData->getField< uint32_t >( row, 4 ); + value = exdData->getField< int16_t >( row, 5 ); + classJobCategory = exdData->getField< uint8_t >( row, 6 ); } Sapphire::Data::TraitRecast::TraitRecast( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TraitRecastDat.get_row( row_id ); - trait = exdData->getField< uint16_t >( row, 0 ); - action = exdData->getField< uint16_t >( row, 1 ); - timeds = exdData->getField< uint16_t >( row, 2 ); + auto row = exdData->m_TraitRecastDat.get_row( row_id ); + trait = exdData->getField< uint16_t >( row, 0 ); + action = exdData->getField< uint16_t >( row, 1 ); + timeds = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::TraitTransient::TraitTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TraitTransientDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_TraitTransientDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Transformation::Transformation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TransformationDat.get_row( row_id ); - model = exdData->getField< int16_t >( row, 1 ); - bNpcCustomize = exdData->getField< int32_t >( row, 4 ); - action.push_back( exdData->getField< uint16_t >( row, 5 ) ); - action.push_back( exdData->getField< uint16_t >( row, 6 ) ); - action.push_back( exdData->getField< uint16_t >( row, 7 ) ); - action.push_back( exdData->getField< uint16_t >( row, 8 ) ); - action.push_back( exdData->getField< uint16_t >( row, 9 ) ); - action.push_back( exdData->getField< uint16_t >( row, 10 ) ); - speed = exdData->getField< float >( row, 13 ); - scale = exdData->getField< float >( row, 14 ); - isPvP = exdData->getField< bool >( row, 15 ); - isEvent = exdData->getField< bool >( row, 16 ); - playerCamera = exdData->getField< bool >( row, 17 ); + auto row = exdData->m_TransformationDat.get_row( row_id ); + model = exdData->getField< int16_t >( row, 1 ); + bNpcName = exdData->getField< uint16_t >( row, 2 ); + bNpcCustomize = exdData->getField< int32_t >( row, 3 ); + npcEquip = exdData->getField< int32_t >( row, 4 ); + exHotbarEnableConfig = exdData->getField< bool >( row, 5 ); + action0 = exdData->getField< uint16_t >( row, 6 ); + action1 = exdData->getField< uint16_t >( row, 8 ); + action2 = exdData->getField< uint16_t >( row, 10 ); + action3 = exdData->getField< uint16_t >( row, 12 ); + action4 = exdData->getField< uint16_t >( row, 14 ); + action5 = exdData->getField< uint16_t >( row, 16 ); + rPParameter = exdData->getField< uint16_t >( row, 18 ); + removeAction = exdData->getField< uint16_t >( row, 19 ); + speed = exdData->getField< float >( row, 23 ); + scale = exdData->getField< float >( row, 24 ); + isPvP = exdData->getField< bool >( row, 25 ); + isEvent = exdData->getField< bool >( row, 26 ); + playerCamera = exdData->getField< bool >( row, 27 ); + startVFX = exdData->getField< uint16_t >( row, 30 ); + endVFX = exdData->getField< uint16_t >( row, 31 ); + action6 = exdData->getField< uint32_t >( row, 32 ); + action7 = exdData->getField< uint16_t >( row, 34 ); } Sapphire::Data::Treasure::Treasure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TreasureDat.get_row( row_id ); - item = exdData->getField< uint32_t >( row, 8 ); + auto row = exdData->m_TreasureDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 8 ); } Sapphire::Data::TreasureHuntRank::TreasureHuntRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TreasureHuntRankDat.get_row( row_id ); - icon = exdData->getField< uint32_t >( row, 1 ); - itemName = exdData->getField< int32_t >( row, 2 ); - keyItemName = exdData->getField< int32_t >( row, 3 ); - instanceMap = exdData->getField< int32_t >( row, 4 ); - maxPartySize = exdData->getField< uint8_t >( row, 5 ); - minPartySize = exdData->getField< uint8_t >( row, 6 ); + auto row = exdData->m_TreasureHuntRankDat.get_row( row_id ); + icon = exdData->getField< uint32_t >( row, 1 ); + itemName = exdData->getField< int32_t >( row, 2 ); + keyItemName = exdData->getField< int32_t >( row, 3 ); + instanceMap = exdData->getField< int32_t >( row, 4 ); + maxPartySize = exdData->getField< uint8_t >( row, 5 ); + treasureHuntTexture = exdData->getField< uint8_t >( row, 6 ); +} + +Sapphire::Data::TreasureModel::TreasureModel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_TreasureModelDat.get_row( row_id ); + path = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::TreasureSpot::TreasureSpot( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_TreasureSpotDat.get_row( row_id, subRow ); + location = exdData->getField< int32_t >( row, 0 ); + mapOffsetX = exdData->getField< float >( row, 1 ); + mapOffsetY = exdData->getField< float >( row, 2 ); } Sapphire::Data::Tribe::Tribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TribeDat.get_row( row_id ); - masculine = exdData->getField< std::string >( row, 0 ); - feminine = exdData->getField< std::string >( row, 1 ); - sTR = exdData->getField< int8_t >( row, 4 ); - dEX = exdData->getField< int8_t >( row, 5 ); - vIT = exdData->getField< int8_t >( row, 6 ); - iNT = exdData->getField< int8_t >( row, 7 ); - mND = exdData->getField< int8_t >( row, 8 ); - pIE = exdData->getField< int8_t >( row, 9 ); + auto row = exdData->m_TribeDat.get_row( row_id ); + masculine = exdData->getField< std::string >( row, 0 ); + feminine = exdData->getField< std::string >( row, 1 ); + hp = exdData->getField< int8_t >( row, 2 ); + mp = exdData->getField< int8_t >( row, 3 ); + sTR = exdData->getField< int8_t >( row, 4 ); + vIT = exdData->getField< int8_t >( row, 5 ); + dEX = exdData->getField< int8_t >( row, 6 ); + iNT = exdData->getField< int8_t >( row, 7 ); + mND = exdData->getField< int8_t >( row, 8 ); + pIE = exdData->getField< int8_t >( row, 9 ); } Sapphire::Data::TripleTriad::TripleTriad( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TripleTriadDat.get_row( row_id ); - tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 0 ) ); - tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 1 ) ); - tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 2 ) ); - tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 3 ) ); - tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 4 ) ); - tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 5 ) ); - tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 6 ) ); - tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 7 ) ); - tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 8 ) ); - tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 9 ) ); - tripleTriadRule.push_back( exdData->getField< uint8_t >( row, 10 ) ); - tripleTriadRule.push_back( exdData->getField< uint8_t >( row, 11 ) ); - usesRegionalRules = exdData->getField< bool >( row, 12 ); - fee = exdData->getField< uint16_t >( row, 13 ); - previousQuestJoin = exdData->getField< uint8_t >( row, 14 ); - previousQuest.push_back( exdData->getField< uint32_t >( row, 15 ) ); - previousQuest.push_back( exdData->getField< uint32_t >( row, 16 ) ); - previousQuest.push_back( exdData->getField< uint32_t >( row, 17 ) ); - startTime = exdData->getField< uint16_t >( row, 18 ); - endTime = exdData->getField< uint16_t >( row, 19 ); - defaultTalkChallenge = exdData->getField< uint32_t >( row, 20 ); - defaultTalkUnavailable = exdData->getField< uint32_t >( row, 21 ); - defaultTalkNPCWin = exdData->getField< uint32_t >( row, 22 ); - defaultTalkDraw = exdData->getField< uint32_t >( row, 23 ); - defaultTalkPCWin = exdData->getField< uint32_t >( row, 24 ); - itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 26 ) ); - itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 27 ) ); - itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 28 ) ); - itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 29 ) ); + auto row = exdData->m_TripleTriadDat.get_row( row_id ); + tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 0 ) ); + tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 1 ) ); + tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 2 ) ); + tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 3 ) ); + tripleTriadCardFixed.push_back( exdData->getField< uint16_t >( row, 4 ) ); + tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 5 ) ); + tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 6 ) ); + tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 7 ) ); + tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 8 ) ); + tripleTriadCardVariable.push_back( exdData->getField< uint16_t >( row, 9 ) ); + tripleTriadRule.push_back( exdData->getField< uint8_t >( row, 10 ) ); + tripleTriadRule.push_back( exdData->getField< uint8_t >( row, 11 ) ); + usesRegionalRules = exdData->getField< bool >( row, 12 ); + fee = exdData->getField< uint16_t >( row, 13 ); + previousQuestJoin = exdData->getField< uint8_t >( row, 14 ); + previousQuest.push_back( exdData->getField< uint32_t >( row, 15 ) ); + previousQuest.push_back( exdData->getField< uint32_t >( row, 16 ) ); + previousQuest.push_back( exdData->getField< uint32_t >( row, 17 ) ); + startTime = exdData->getField< uint16_t >( row, 18 ); + endTime = exdData->getField< uint16_t >( row, 19 ); + defaultTalkChallenge = exdData->getField< uint32_t >( row, 20 ); + defaultTalkUnavailable = exdData->getField< uint32_t >( row, 21 ); + defaultTalkNPCWin = exdData->getField< uint32_t >( row, 22 ); + defaultTalkDraw = exdData->getField< uint32_t >( row, 23 ); + defaultTalkPCWin = exdData->getField< uint32_t >( row, 24 ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 26 ) ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 27 ) ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 28 ) ); + itemPossibleReward.push_back( exdData->getField< uint32_t >( row, 29 ) ); } Sapphire::Data::TripleTriadCard::TripleTriadCard( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TripleTriadCardDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - startsWithVowel = exdData->getField< int8_t >( row, 4 ); - description = exdData->getField< std::string >( row, 8 ); + auto row = exdData->m_TripleTriadCardDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + startsWithVowel = exdData->getField< int8_t >( row, 4 ); + description = exdData->getField< std::string >( row, 8 ); } Sapphire::Data::TripleTriadCardRarity::TripleTriadCardRarity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TripleTriadCardRarityDat.get_row( row_id ); - stars = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_TripleTriadCardRarityDat.get_row( row_id ); + stars = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::TripleTriadCardResident::TripleTriadCardResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TripleTriadCardResidentDat.get_row( row_id ); - top = exdData->getField< uint8_t >( row, 1 ); - bottom = exdData->getField< uint8_t >( row, 2 ); - left = exdData->getField< uint8_t >( row, 3 ); - right = exdData->getField< uint8_t >( row, 4 ); - tripleTriadCardRarity = exdData->getField< uint8_t >( row, 5 ); - tripleTriadCardType = exdData->getField< uint8_t >( row, 6 ); - saleValue = exdData->getField< uint16_t >( row, 7 ); - sortKey = exdData->getField< uint8_t >( row, 8 ); + auto row = exdData->m_TripleTriadCardResidentDat.get_row( row_id ); + top = exdData->getField< uint8_t >( row, 1 ); + bottom = exdData->getField< uint8_t >( row, 2 ); + left = exdData->getField< uint8_t >( row, 3 ); + right = exdData->getField< uint8_t >( row, 4 ); + tripleTriadCardRarity = exdData->getField< uint8_t >( row, 5 ); + tripleTriadCardType = exdData->getField< uint8_t >( row, 6 ); + saleValue = exdData->getField< uint16_t >( row, 7 ); + sortKey = exdData->getField< uint8_t >( row, 8 ); } Sapphire::Data::TripleTriadCardType::TripleTriadCardType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TripleTriadCardTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_TripleTriadCardTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::TripleTriadCompetition::TripleTriadCompetition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TripleTriadCompetitionDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_TripleTriadCompetitionDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::TripleTriadRule::TripleTriadRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TripleTriadRuleDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_TripleTriadRuleDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Tutorial::Tutorial( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TutorialDat.get_row( row_id ); - exp = exdData->getField< uint32_t >( row, 4 ); - gil = exdData->getField< uint32_t >( row, 5 ); - rewardTank = exdData->getField< uint32_t >( row, 6 ); - rewardMelee = exdData->getField< uint32_t >( row, 7 ); - rewardRanged = exdData->getField< uint32_t >( row, 8 ); - objective = exdData->getField< uint32_t >( row, 9 ); + auto row = exdData->m_TutorialDat.get_row( row_id ); + exp = exdData->getField< uint32_t >( row, 4 ); + gil = exdData->getField< uint32_t >( row, 5 ); + rewardTank = exdData->getField< uint32_t >( row, 6 ); + rewardMelee = exdData->getField< uint32_t >( row, 7 ); + rewardRanged = exdData->getField< uint32_t >( row, 8 ); + objective = exdData->getField< uint32_t >( row, 9 ); } Sapphire::Data::TutorialDPS::TutorialDPS( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TutorialDPSDat.get_row( row_id ); - objective = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_TutorialDPSDat.get_row( row_id ); + objective = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::TutorialHealer::TutorialHealer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TutorialHealerDat.get_row( row_id ); - objective = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_TutorialHealerDat.get_row( row_id ); + objective = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::TutorialTank::TutorialTank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_TutorialTankDat.get_row( row_id ); - objective = exdData->getField< uint8_t >( row, 0 ); + auto row = exdData->m_TutorialTankDat.get_row( row_id ); + objective = exdData->getField< uint8_t >( row, 0 ); } Sapphire::Data::UIColor::UIColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_UIColorDat.get_row( row_id ); - uIForeground = exdData->getField< uint32_t >( row, 0 ); - uIGlow = exdData->getField< uint32_t >( row, 1 ); + auto row = exdData->m_UIColorDat.get_row( row_id ); + uIForeground = exdData->getField< uint32_t >( row, 0 ); + uIGlow = exdData->getField< uint32_t >( row, 1 ); } Sapphire::Data::VaseFlower::VaseFlower( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_VaseFlowerDat.get_row( row_id ); - item = exdData->getField< uint32_t >( row, 3 ); + auto row = exdData->m_VaseFlowerDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 3 ); } Sapphire::Data::VFX::VFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_VFXDat.get_row( row_id ); - location = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_VFXDat.get_row( row_id ); + location = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::Warp::Warp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WarpDat.get_row( row_id ); - level = exdData->getField< uint32_t >( row, 0 ); - placeName = exdData->getField< uint16_t >( row, 1 ); - conditionSuccessEvent = exdData->getField< uint32_t >( row, 2 ); - conditionFailEvent = exdData->getField< uint32_t >( row, 3 ); - confirmEvent = exdData->getField< uint32_t >( row, 4 ); - warpCondition = exdData->getField< uint16_t >( row, 5 ); - warpLogic = exdData->getField< uint16_t >( row, 6 ); + auto row = exdData->m_WarpDat.get_row( row_id ); + popRange = exdData->getField< uint32_t >( row, 0 ); + territoryType = exdData->getField< uint16_t >( row, 1 ); + conditionSuccessEvent = exdData->getField< uint32_t >( row, 2 ); + conditionFailEvent = exdData->getField< uint32_t >( row, 3 ); + confirmEvent = exdData->getField< uint32_t >( row, 4 ); + warpCondition = exdData->getField< uint16_t >( row, 5 ); + warpLogic = exdData->getField< uint16_t >( row, 6 ); + startCutscene = exdData->getField< uint16_t >( row, 7 ); + endCutscene = exdData->getField< uint16_t >( row, 8 ); + canSkipCutscene = exdData->getField< bool >( row, 9 ); + name = exdData->getField< std::string >( row, 10 ); + question = exdData->getField< std::string >( row, 11 ); } Sapphire::Data::WarpCondition::WarpCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WarpConditionDat.get_row( row_id ); - requiredQuest1 = exdData->getField< uint32_t >( row, 2 ); - requiredQuest2 = exdData->getField< uint32_t >( row, 3 ); - dRequiredQuest3 = exdData->getField< uint32_t >( row, 4 ); - requiredQuest4 = exdData->getField< uint32_t >( row, 5 ); + auto row = exdData->m_WarpConditionDat.get_row( row_id ); + gil = exdData->getField< uint16_t >( row, 0 ); + completeParam = exdData->getField< uint8_t >( row, 1 ); + requiredQuest1 = exdData->getField< uint32_t >( row, 2 ); + requiredQuest2 = exdData->getField< uint32_t >( row, 3 ); + dRequiredQuest3 = exdData->getField< uint32_t >( row, 4 ); + requiredQuest4 = exdData->getField< uint32_t >( row, 5 ); + questReward = exdData->getField< uint16_t >( row, 6 ); + classLevel = exdData->getField< uint16_t >( row, 7 ); } Sapphire::Data::WarpLogic::WarpLogic( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WarpLogicDat.get_row( row_id ); - warpName = exdData->getField< std::string >( row, 1 ); - function.push_back( exdData->getField< std::string >( row, 3 ) ); - function.push_back( exdData->getField< std::string >( row, 4 ) ); - function.push_back( exdData->getField< std::string >( row, 5 ) ); - function.push_back( exdData->getField< std::string >( row, 6 ) ); - function.push_back( exdData->getField< std::string >( row, 7 ) ); - function.push_back( exdData->getField< std::string >( row, 8 ) ); - function.push_back( exdData->getField< std::string >( row, 9 ) ); - function.push_back( exdData->getField< std::string >( row, 10 ) ); - function.push_back( exdData->getField< std::string >( row, 11 ) ); - function.push_back( exdData->getField< std::string >( row, 12 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 13 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 14 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 15 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 16 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 17 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 18 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 19 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 20 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 21 ) ); - argument.push_back( exdData->getField< uint32_t >( row, 22 ) ); - question = exdData->getField< std::string >( row, 23 ); - responseYes = exdData->getField< std::string >( row, 24 ); - responseNo = exdData->getField< std::string >( row, 25 ); + auto row = exdData->m_WarpLogicDat.get_row( row_id ); + warpName = exdData->getField< std::string >( row, 1 ); + canSkipCutscene = exdData->getField< bool >( row, 2 ); + function.push_back( exdData->getField< std::string >( row, 3 ) ); + function.push_back( exdData->getField< std::string >( row, 4 ) ); + function.push_back( exdData->getField< std::string >( row, 5 ) ); + function.push_back( exdData->getField< std::string >( row, 6 ) ); + function.push_back( exdData->getField< std::string >( row, 7 ) ); + function.push_back( exdData->getField< std::string >( row, 8 ) ); + function.push_back( exdData->getField< std::string >( row, 9 ) ); + function.push_back( exdData->getField< std::string >( row, 10 ) ); + function.push_back( exdData->getField< std::string >( row, 11 ) ); + function.push_back( exdData->getField< std::string >( row, 12 ) ); + question = exdData->getField< std::string >( row, 23 ); + responseYes = exdData->getField< std::string >( row, 24 ); + responseNo = exdData->getField< std::string >( row, 25 ); +} + +Sapphire::Data::WeaponTimeline::WeaponTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_WeaponTimelineDat.get_row( row_id ); + file = exdData->getField< std::string >( row, 0 ); + nextWeaponTimeline = exdData->getField< int16_t >( row, 1 ); } Sapphire::Data::Weather::Weather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeatherDat.get_row( row_id ); - icon = exdData->getField< int32_t >( row, 0 ); - name = exdData->getField< std::string >( row, 1 ); - description = exdData->getField< std::string >( row, 2 ); + auto row = exdData->m_WeatherDat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); + description = exdData->getField< std::string >( row, 2 ); } Sapphire::Data::WeatherGroup::WeatherGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeatherGroupDat.get_row( row_id, subRow ); - weatherRate = exdData->getField< int32_t >( row, 1 ); + auto row = exdData->m_WeatherGroupDat.get_row( row_id, subRow ); + weatherRate = exdData->getField< int32_t >( row, 1 ); } Sapphire::Data::WeatherRate::WeatherRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeatherRateDat.get_row( row_id ); + auto row = exdData->m_WeatherRateDat.get_row( row_id ); } Sapphire::Data::WeatherReportReplace::WeatherReportReplace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeatherReportReplaceDat.get_row( row_id ); - placeNameSub = exdData->getField< uint16_t >( row, 0 ); - placeNameParent = exdData->getField< uint16_t >( row, 1 ); + auto row = exdData->m_WeatherReportReplaceDat.get_row( row_id ); + placeNameSub = exdData->getField< uint16_t >( row, 0 ); + placeNameParent = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::WeddingBGM::WeddingBGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeddingBGMDat.get_row( row_id ); - song = exdData->getField< uint16_t >( row, 0 ); - songName = exdData->getField< std::string >( row, 1 ); + auto row = exdData->m_WeddingBGMDat.get_row( row_id ); + song = exdData->getField< uint16_t >( row, 0 ); + songName = exdData->getField< std::string >( row, 1 ); } Sapphire::Data::WeeklyBingoOrderData::WeeklyBingoOrderData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeeklyBingoOrderDataDat.get_row( row_id ); - type = exdData->getField< uint32_t >( row, 0 ); - data = exdData->getField< uint32_t >( row, 1 ); - text = exdData->getField< uint8_t >( row, 3 ); - icon = exdData->getField< uint32_t >( row, 4 ); + auto row = exdData->m_WeeklyBingoOrderDataDat.get_row( row_id ); + type = exdData->getField< uint32_t >( row, 0 ); + data = exdData->getField< uint32_t >( row, 1 ); + text = exdData->getField< uint8_t >( row, 3 ); + icon = exdData->getField< uint32_t >( row, 4 ); } Sapphire::Data::WeeklyBingoRewardData::WeeklyBingoRewardData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeeklyBingoRewardDataDat.get_row( row_id ); - rewardItem2 = exdData->getField< uint32_t >( row, 10 ); - rewardHQ2 = exdData->getField< bool >( row, 11 ); - rewardQuantity2 = exdData->getField< uint16_t >( row, 12 ); + auto row = exdData->m_WeeklyBingoRewardDataDat.get_row( row_id ); + rewardItem2 = exdData->getField< uint32_t >( row, 10 ); + rewardHQ2 = exdData->getField< bool >( row, 11 ); + rewardQuantity2 = exdData->getField< uint16_t >( row, 12 ); } Sapphire::Data::WeeklyBingoText::WeeklyBingoText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeeklyBingoTextDat.get_row( row_id ); - description = exdData->getField< std::string >( row, 0 ); + auto row = exdData->m_WeeklyBingoTextDat.get_row( row_id ); + description = exdData->getField< std::string >( row, 0 ); } Sapphire::Data::WeeklyLotBonus::WeeklyLotBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WeeklyLotBonusDat.get_row( row_id ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 0 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 1 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 2 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 3 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 4 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 5 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 6 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 7 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 8 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 9 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 10 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 11 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 12 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 13 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 14 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 15 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 16 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 17 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 18 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 19 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 20 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 21 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 22 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 23 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 24 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 25 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 26 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 27 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 28 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 29 ) ); - weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 30 ) ); + auto row = exdData->m_WeeklyLotBonusDat.get_row( row_id ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 0 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 1 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 2 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 3 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 4 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 5 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 6 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 7 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 8 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 9 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 10 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 11 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 12 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 13 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 14 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 15 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 16 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 17 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 18 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 19 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 20 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 21 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 22 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 23 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 24 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 25 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 26 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 27 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 28 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 29 ) ); + weeklyLotBonusThreshold.push_back( exdData->getField< uint8_t >( row, 30 ) ); } Sapphire::Data::World::World( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WorldDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - dataCenter = exdData->getField< uint8_t >( row, 2 ); - isPublic = exdData->getField< bool >( row, 3 ); + auto row = exdData->m_WorldDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + userType = exdData->getField< uint8_t >( row, 1 ); + dataCenter = exdData->getField< uint8_t >( row, 2 ); + isPublic = exdData->getField< bool >( row, 3 ); } Sapphire::Data::WorldDCGroupType::WorldDCGroupType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_WorldDCGroupTypeDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); - region = exdData->getField< uint8_t >( row, 1 ); + auto row = exdData->m_WorldDCGroupTypeDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + region = exdData->getField< uint8_t >( row, 1 ); +} + +Sapphire::Data::YardCatalogCategory::YardCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_YardCatalogCategoryDat.get_row( row_id ); + category = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::YardCatalogItemList::YardCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_YardCatalogItemListDat.get_row( row_id ); + category = exdData->getField< uint16_t >( row, 0 ); + item = exdData->getField< int32_t >( row, 1 ); + patch = exdData->getField< uint16_t >( row, 2 ); } Sapphire::Data::YKW::YKW( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_YKWDat.get_row( row_id ); - item = exdData->getField< uint32_t >( row, 1 ); - location.push_back( exdData->getField< uint16_t >( row, 2 ) ); - location.push_back( exdData->getField< uint16_t >( row, 3 ) ); - location.push_back( exdData->getField< uint16_t >( row, 4 ) ); + auto row = exdData->m_YKWDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 1 ); + location.push_back( exdData->getField< uint16_t >( row, 2 ) ); + location.push_back( exdData->getField< uint16_t >( row, 3 ) ); + location.push_back( exdData->getField< uint16_t >( row, 4 ) ); + location.push_back( exdData->getField< uint16_t >( row, 5 ) ); + location.push_back( exdData->getField< uint16_t >( row, 6 ) ); + location.push_back( exdData->getField< uint16_t >( row, 7 ) ); } Sapphire::Data::ZoneSharedGroup::ZoneSharedGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { - auto row = exdData->m_ZoneSharedGroupDat.get_row( row_id, subRow ); - quest1 = exdData->getField< uint32_t >( row, 2 ); - quest2 = exdData->getField< uint32_t >( row, 6 ); - quest3 = exdData->getField< uint32_t >( row, 10 ); - quest4 = exdData->getField< uint32_t >( row, 14 ); - quest5 = exdData->getField< uint32_t >( row, 18 ); - quest6 = exdData->getField< uint32_t >( row, 22 ); + auto row = exdData->m_ZoneSharedGroupDat.get_row( row_id, subRow ); + quest1 = exdData->getField< uint32_t >( row, 2 ); + quest2 = exdData->getField< uint32_t >( row, 6 ); + quest3 = exdData->getField< uint32_t >( row, 10 ); + quest4 = exdData->getField< uint32_t >( row, 14 ); + quest5 = exdData->getField< uint32_t >( row, 18 ); + quest6 = exdData->getField< uint32_t >( row, 22 ); } @@ -6588,507 +12175,652 @@ Sapphire::Data::ExdDataGenerated::~ExdDataGenerated() xiv::exd::Exd Sapphire::Data::ExdDataGenerated::setupDatAccess( const std::string& name, xiv::exd::Language lang ) { - auto& cat = m_exd_data->get_category( name ); - return static_cast< xiv::exd::Exd >( cat.get_data_ln( lang ) ); + auto& cat = m_exd_data->get_category( name ); + return static_cast< xiv::exd::Exd >( cat.get_data_ln( lang ) ); }; void Sapphire::Data::ExdDataGenerated::loadIdList( xiv::exd::Exd& data, std::set< uint32_t >& outIdList ) { - auto pDataRows = data.get_rows(); + auto pDataRows = data.get_rows(); - for( auto row : pDataRows ) - { - uint32_t id = row.first; - outIdList.insert( id ); - } + for( auto row : pDataRows ) + { + uint32_t id = row.first; + outIdList.insert( id ); + } } bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) { - try - { - m_data = std::make_shared< xiv::dat::GameData >( path ); - m_exd_data = std::make_shared< xiv::exd::ExdData >( *m_data ); + try + { + m_data = std::make_shared< xiv::dat::GameData >( path ); + m_exd_data = std::make_shared< xiv::exd::ExdData >( *m_data ); - m_AchievementDat = setupDatAccess( "Achievement", xiv::exd::Language::en ); - m_AchievementCategoryDat = setupDatAccess( "AchievementCategory", xiv::exd::Language::en ); - m_AchievementKindDat = setupDatAccess( "AchievementKind", xiv::exd::Language::en ); - m_ActionDat = setupDatAccess( "Action", xiv::exd::Language::en ); - m_ActionCastTimelineDat = setupDatAccess( "ActionCastTimeline", xiv::exd::Language::none ); - m_ActionCastVFXDat = setupDatAccess( "ActionCastVFX", xiv::exd::Language::none ); - m_ActionCategoryDat = setupDatAccess( "ActionCategory", xiv::exd::Language::en ); - m_ActionComboRouteDat = setupDatAccess( "ActionComboRoute", xiv::exd::Language::en ); - m_ActionIndirectionDat = setupDatAccess( "ActionIndirection", xiv::exd::Language::none ); - m_ActionParamDat = setupDatAccess( "ActionParam", xiv::exd::Language::none ); - m_ActionProcStatusDat = setupDatAccess( "ActionProcStatus", xiv::exd::Language::none ); - m_ActionTimelineDat = setupDatAccess( "ActionTimeline", xiv::exd::Language::none ); - m_ActionTimelineMoveDat = setupDatAccess( "ActionTimelineMove", xiv::exd::Language::none ); - m_ActionTimelineReplaceDat = setupDatAccess( "ActionTimelineReplace", xiv::exd::Language::none ); - m_ActionTransientDat = setupDatAccess( "ActionTransient", xiv::exd::Language::en ); - m_ActivityFeedButtonsDat = setupDatAccess( "ActivityFeedButtons", xiv::exd::Language::none ); - m_ActivityFeedCaptionsDat = setupDatAccess( "ActivityFeedCaptions", xiv::exd::Language::none ); - m_ActivityFeedGroupCaptionsDat = setupDatAccess( "ActivityFeedGroupCaptions", xiv::exd::Language::none ); - m_ActivityFeedImagesDat = setupDatAccess( "ActivityFeedImages", xiv::exd::Language::none ); - m_AddonDat = setupDatAccess( "Addon", xiv::exd::Language::en ); - m_AddonHudDat = setupDatAccess( "AddonHud", xiv::exd::Language::en ); - m_AdventureDat = setupDatAccess( "Adventure", xiv::exd::Language::en ); - m_AdventureExPhaseDat = setupDatAccess( "AdventureExPhase", xiv::exd::Language::none ); - m_AetherCurrentDat = setupDatAccess( "AetherCurrent", xiv::exd::Language::none ); - m_AetherCurrentCompFlgSetDat = setupDatAccess( "AetherCurrentCompFlgSet", xiv::exd::Language::none ); - m_AetherialWheelDat = setupDatAccess( "AetherialWheel", xiv::exd::Language::none ); - m_AetheryteDat = setupDatAccess( "Aetheryte", xiv::exd::Language::en ); - m_AetheryteSystemDefineDat = setupDatAccess( "AetheryteSystemDefine", xiv::exd::Language::none ); - m_AirshipExplorationLevelDat = setupDatAccess( "AirshipExplorationLevel", xiv::exd::Language::none ); - m_AirshipExplorationLogDat = setupDatAccess( "AirshipExplorationLog", xiv::exd::Language::en ); - m_AirshipExplorationParamTypeDat = setupDatAccess( "AirshipExplorationParamType", xiv::exd::Language::en ); - m_AirshipExplorationPartDat = setupDatAccess( "AirshipExplorationPart", xiv::exd::Language::none ); - m_AirshipExplorationPointDat = setupDatAccess( "AirshipExplorationPoint", xiv::exd::Language::en ); - m_AnimaWeapon5Dat = setupDatAccess( "AnimaWeapon5", xiv::exd::Language::none ); - m_AnimaWeapon5ParamDat = setupDatAccess( "AnimaWeapon5Param", xiv::exd::Language::en ); - m_AnimaWeapon5PatternGroupDat = setupDatAccess( "AnimaWeapon5PatternGroup", xiv::exd::Language::en ); - m_AnimaWeapon5SpiritTalkDat = setupDatAccess( "AnimaWeapon5SpiritTalk", xiv::exd::Language::none ); - m_AnimaWeapon5SpiritTalkParamDat = setupDatAccess( "AnimaWeapon5SpiritTalkParam", xiv::exd::Language::en ); - m_AnimaWeapon5TradeItemDat = setupDatAccess( "AnimaWeapon5TradeItem", xiv::exd::Language::none ); - m_AnimaWeaponFUITalkDat = setupDatAccess( "AnimaWeaponFUITalk", xiv::exd::Language::none ); - m_AnimaWeaponFUITalkParamDat = setupDatAccess( "AnimaWeaponFUITalkParam", xiv::exd::Language::en ); - m_AnimaWeaponIconDat = setupDatAccess( "AnimaWeaponIcon", xiv::exd::Language::none ); - m_AnimaWeaponItemDat = setupDatAccess( "AnimaWeaponItem", xiv::exd::Language::none ); - m_AozActionDat = setupDatAccess( "AozAction", xiv::exd::Language::none ); - m_AozActionTransientDat = setupDatAccess( "AozActionTransient", xiv::exd::Language::en ); - m_AOZArrangementDat = setupDatAccess( "AOZArrangement", xiv::exd::Language::none ); - m_AOZBossDat = setupDatAccess( "AOZBoss", xiv::exd::Language::none ); - m_AOZContentDat = setupDatAccess( "AOZContent", xiv::exd::Language::none ); - m_AOZContentBriefingBNpcDat = setupDatAccess( "AOZContentBriefingBNpc", xiv::exd::Language::none ); - m_AquariumFishDat = setupDatAccess( "AquariumFish", xiv::exd::Language::none ); - m_AquariumWaterDat = setupDatAccess( "AquariumWater", xiv::exd::Language::en ); - m_ArrayEventHandlerDat = setupDatAccess( "ArrayEventHandler", xiv::exd::Language::none ); - m_AttackTypeDat = setupDatAccess( "AttackType", xiv::exd::Language::en ); - m_BacklightColorDat = setupDatAccess( "BacklightColor", xiv::exd::Language::none ); - m_BalloonDat = setupDatAccess( "Balloon", xiv::exd::Language::en ); - m_BaseParamDat = setupDatAccess( "BaseParam", xiv::exd::Language::en ); - m_BattleLeveDat = setupDatAccess( "BattleLeve", xiv::exd::Language::none ); - m_BeastRankBonusDat = setupDatAccess( "BeastRankBonus", xiv::exd::Language::none ); - m_BeastReputationRankDat = setupDatAccess( "BeastReputationRank", xiv::exd::Language::en ); - m_BeastTribeDat = setupDatAccess( "BeastTribe", xiv::exd::Language::en ); - m_BehaviorDat = setupDatAccess( "Behavior", xiv::exd::Language::none ); - m_BGMDat = setupDatAccess( "BGM", xiv::exd::Language::none ); - m_BGMFadeDat = setupDatAccess( "BGMFade", xiv::exd::Language::none ); - m_BGMSituationDat = setupDatAccess( "BGMSituation", xiv::exd::Language::none ); - m_BGMSwitchDat = setupDatAccess( "BGMSwitch", xiv::exd::Language::none ); - m_BGMSystemDefineDat = setupDatAccess( "BGMSystemDefine", xiv::exd::Language::none ); - m_BNpcAnnounceIconDat = setupDatAccess( "BNpcAnnounceIcon", xiv::exd::Language::none ); - m_BNpcBaseDat = setupDatAccess( "BNpcBase", xiv::exd::Language::none ); - m_BNpcCustomizeDat = setupDatAccess( "BNpcCustomize", xiv::exd::Language::none ); - m_BNpcNameDat = setupDatAccess( "BNpcName", xiv::exd::Language::en ); - m_BNpcPartsDat = setupDatAccess( "BNpcParts", xiv::exd::Language::none ); - m_BuddyDat = setupDatAccess( "Buddy", xiv::exd::Language::none ); - m_BuddyActionDat = setupDatAccess( "BuddyAction", xiv::exd::Language::en ); - m_BuddyEquipDat = setupDatAccess( "BuddyEquip", xiv::exd::Language::en ); - m_BuddyItemDat = setupDatAccess( "BuddyItem", xiv::exd::Language::none ); - m_BuddyRankDat = setupDatAccess( "BuddyRank", xiv::exd::Language::none ); - m_BuddySkillDat = setupDatAccess( "BuddySkill", xiv::exd::Language::none ); - m_CabinetDat = setupDatAccess( "Cabinet", xiv::exd::Language::none ); - m_CabinetCategoryDat = setupDatAccess( "CabinetCategory", xiv::exd::Language::none ); - m_CalendarDat = setupDatAccess( "Calendar", xiv::exd::Language::none ); - m_CharaMakeCustomizeDat = setupDatAccess( "CharaMakeCustomize", xiv::exd::Language::none ); - m_CharaMakeTypeDat = setupDatAccess( "CharaMakeType", xiv::exd::Language::en ); - m_ChocoboRaceDat = setupDatAccess( "ChocoboRace", xiv::exd::Language::none ); - m_ChocoboRaceAbilityDat = setupDatAccess( "ChocoboRaceAbility", xiv::exd::Language::en ); - m_ChocoboRaceAbilityTypeDat = setupDatAccess( "ChocoboRaceAbilityType", xiv::exd::Language::none ); - m_ChocoboRaceItemDat = setupDatAccess( "ChocoboRaceItem", xiv::exd::Language::en ); - m_ChocoboRaceRankDat = setupDatAccess( "ChocoboRaceRank", xiv::exd::Language::none ); - m_ChocoboRaceStatusDat = setupDatAccess( "ChocoboRaceStatus", xiv::exd::Language::none ); - m_ChocoboRaceTerritoryDat = setupDatAccess( "ChocoboRaceTerritory", xiv::exd::Language::none ); - m_ChocoboRaceTutorialDat = setupDatAccess( "ChocoboRaceTutorial", xiv::exd::Language::none ); - m_ChocoboRaceWeatherDat = setupDatAccess( "ChocoboRaceWeather", xiv::exd::Language::none ); - m_ChocoboTaxiDat = setupDatAccess( "ChocoboTaxi", xiv::exd::Language::none ); - m_ChocoboTaxiStandDat = setupDatAccess( "ChocoboTaxiStand", xiv::exd::Language::en ); - m_ClassJobDat = setupDatAccess( "ClassJob", xiv::exd::Language::en ); - m_ClassJobCategoryDat = setupDatAccess( "ClassJobCategory", xiv::exd::Language::en ); - m_CompanionDat = setupDatAccess( "Companion", xiv::exd::Language::en ); - m_CompanionMoveDat = setupDatAccess( "CompanionMove", xiv::exd::Language::en ); - m_CompanionTransientDat = setupDatAccess( "CompanionTransient", xiv::exd::Language::en ); - m_CompanyActionDat = setupDatAccess( "CompanyAction", xiv::exd::Language::en ); - m_CompanyCraftDraftDat = setupDatAccess( "CompanyCraftDraft", xiv::exd::Language::en ); - m_CompanyCraftDraftCategoryDat = setupDatAccess( "CompanyCraftDraftCategory", xiv::exd::Language::en ); - m_CompanyCraftManufactoryStateDat = setupDatAccess( "CompanyCraftManufactoryState", xiv::exd::Language::en ); - m_CompanyCraftPartDat = setupDatAccess( "CompanyCraftPart", xiv::exd::Language::none ); - m_CompanyCraftProcessDat = setupDatAccess( "CompanyCraftProcess", xiv::exd::Language::none ); - m_CompanyCraftSequenceDat = setupDatAccess( "CompanyCraftSequence", xiv::exd::Language::none ); - m_CompanyCraftSupplyItemDat = setupDatAccess( "CompanyCraftSupplyItem", xiv::exd::Language::none ); - m_CompanyCraftTypeDat = setupDatAccess( "CompanyCraftType", xiv::exd::Language::en ); - m_CompleteJournalDat = setupDatAccess( "CompleteJournal", xiv::exd::Language::en ); - m_CompleteJournalCategoryDat = setupDatAccess( "CompleteJournalCategory", xiv::exd::Language::none ); - m_ContentCloseCycleDat = setupDatAccess( "ContentCloseCycle", xiv::exd::Language::none ); - m_ContentExActionDat = setupDatAccess( "ContentExAction", xiv::exd::Language::none ); - m_ContentFinderConditionDat = setupDatAccess( "ContentFinderCondition", xiv::exd::Language::en ); - m_ContentFinderConditionTransientDat = setupDatAccess( "ContentFinderConditionTransient", xiv::exd::Language::en ); - m_ContentGaugeDat = setupDatAccess( "ContentGauge", xiv::exd::Language::en ); - m_ContentGaugeColorDat = setupDatAccess( "ContentGaugeColor", xiv::exd::Language::none ); - m_ContentMemberTypeDat = setupDatAccess( "ContentMemberType", xiv::exd::Language::none ); - m_ContentNpcTalkDat = setupDatAccess( "ContentNpcTalk", xiv::exd::Language::none ); - m_ContentRouletteDat = setupDatAccess( "ContentRoulette", xiv::exd::Language::en ); - m_ContentRouletteOpenRuleDat = setupDatAccess( "ContentRouletteOpenRule", xiv::exd::Language::none ); - m_ContentRouletteRoleBonusDat = setupDatAccess( "ContentRouletteRoleBonus", xiv::exd::Language::none ); - m_ContentsNoteDat = setupDatAccess( "ContentsNote", xiv::exd::Language::en ); - m_ContentTalkDat = setupDatAccess( "ContentTalk", xiv::exd::Language::en ); - m_ContentTalkParamDat = setupDatAccess( "ContentTalkParam", xiv::exd::Language::none ); - m_ContentTypeDat = setupDatAccess( "ContentType", xiv::exd::Language::en ); - m_CraftActionDat = setupDatAccess( "CraftAction", xiv::exd::Language::en ); - m_CraftLeveDat = setupDatAccess( "CraftLeve", xiv::exd::Language::none ); - m_CraftTypeDat = setupDatAccess( "CraftType", xiv::exd::Language::en ); - m_CreditDat = setupDatAccess( "Credit", xiv::exd::Language::none ); - m_CreditBackImageDat = setupDatAccess( "CreditBackImage", xiv::exd::Language::none ); - m_CreditCastDat = setupDatAccess( "CreditCast", xiv::exd::Language::en ); - m_CurrencyDat = setupDatAccess( "Currency", xiv::exd::Language::none ); - m_CustomTalkDat = setupDatAccess( "CustomTalk", xiv::exd::Language::en ); - m_CustomTalkDynamicIconDat = setupDatAccess( "CustomTalkDynamicIcon", xiv::exd::Language::none ); - m_CustomTalkNestHandlersDat = setupDatAccess( "CustomTalkNestHandlers", xiv::exd::Language::none ); - m_CutsceneDat = setupDatAccess( "Cutscene", xiv::exd::Language::none ); - m_CutScreenImageDat = setupDatAccess( "CutScreenImage", xiv::exd::Language::none ); - m_DailySupplyItemDat = setupDatAccess( "DailySupplyItem", xiv::exd::Language::none ); - m_DeepDungeonDat = setupDatAccess( "DeepDungeon", xiv::exd::Language::en ); - m_DeepDungeonBanDat = setupDatAccess( "DeepDungeonBan", xiv::exd::Language::none ); - m_DeepDungeonDangerDat = setupDatAccess( "DeepDungeonDanger", xiv::exd::Language::none ); - m_DeepDungeonEquipmentDat = setupDatAccess( "DeepDungeonEquipment", xiv::exd::Language::en ); - m_DeepDungeonFloorEffectUIDat = setupDatAccess( "DeepDungeonFloorEffectUI", xiv::exd::Language::en ); - m_DeepDungeonItemDat = setupDatAccess( "DeepDungeonItem", xiv::exd::Language::en ); - m_DeepDungeonLayerDat = setupDatAccess( "DeepDungeonLayer", xiv::exd::Language::none ); - m_DeepDungeonMagicStoneDat = setupDatAccess( "DeepDungeonMagicStone", xiv::exd::Language::en ); - m_DeepDungeonMap5XDat = setupDatAccess( "DeepDungeonMap5X", xiv::exd::Language::none ); - m_DeepDungeonRoomDat = setupDatAccess( "DeepDungeonRoom", xiv::exd::Language::none ); - m_DeepDungeonStatusDat = setupDatAccess( "DeepDungeonStatus", xiv::exd::Language::none ); - m_DefaultTalkDat = setupDatAccess( "DefaultTalk", xiv::exd::Language::en ); - m_DefaultTalkLipSyncTypeDat = setupDatAccess( "DefaultTalkLipSyncType", xiv::exd::Language::none ); - m_DeliveryQuestDat = setupDatAccess( "DeliveryQuest", xiv::exd::Language::none ); - m_DescriptionPageDat = setupDatAccess( "DescriptionPage", xiv::exd::Language::none ); - m_DescriptionStringDat = setupDatAccess( "DescriptionString", xiv::exd::Language::en ); - m_DisposalShopDat = setupDatAccess( "DisposalShop", xiv::exd::Language::en ); - m_DisposalShopFilterTypeDat = setupDatAccess( "DisposalShopFilterType", xiv::exd::Language::en ); - m_DisposalShopItemDat = setupDatAccess( "DisposalShopItem", xiv::exd::Language::none ); - m_DpsChallengeDat = setupDatAccess( "DpsChallenge", xiv::exd::Language::en ); - m_DpsChallengeOfficerDat = setupDatAccess( "DpsChallengeOfficer", xiv::exd::Language::none ); - m_DpsChallengeTransientDat = setupDatAccess( "DpsChallengeTransient", xiv::exd::Language::none ); - m_EmjAddonDat = setupDatAccess( "EmjAddon", xiv::exd::Language::en ); - m_EmjDaniDat = setupDatAccess( "EmjDani", xiv::exd::Language::none ); - m_EmoteDat = setupDatAccess( "Emote", xiv::exd::Language::en ); - m_EmoteCategoryDat = setupDatAccess( "EmoteCategory", xiv::exd::Language::en ); - m_ENpcBaseDat = setupDatAccess( "ENpcBase", xiv::exd::Language::none ); - m_ENpcDressUpDat = setupDatAccess( "ENpcDressUp", xiv::exd::Language::none ); - m_ENpcDressUpDressDat = setupDatAccess( "ENpcDressUpDress", xiv::exd::Language::none ); - m_ENpcResidentDat = setupDatAccess( "ENpcResident", xiv::exd::Language::en ); - m_EObjDat = setupDatAccess( "EObj", xiv::exd::Language::none ); - m_EObjNameDat = setupDatAccess( "EObjName", xiv::exd::Language::en ); - m_EquipRaceCategoryDat = setupDatAccess( "EquipRaceCategory", xiv::exd::Language::none ); - m_EquipSlotCategoryDat = setupDatAccess( "EquipSlotCategory", xiv::exd::Language::none ); - m_EurekaAetherItemDat = setupDatAccess( "EurekaAetherItem", xiv::exd::Language::en ); - m_EurekaAethernetDat = setupDatAccess( "EurekaAethernet", xiv::exd::Language::none ); - m_EurekaGrowDataDat = setupDatAccess( "EurekaGrowData", xiv::exd::Language::none ); - m_EurekaLogosMixerProbabilityDat = setupDatAccess( "EurekaLogosMixerProbability", xiv::exd::Language::none ); - m_EurekaMagiaActionDat = setupDatAccess( "EurekaMagiaAction", xiv::exd::Language::none ); - m_EurekaMagiciteItemDat = setupDatAccess( "EurekaMagiciteItem", xiv::exd::Language::none ); - m_EurekaMagiciteItemTypeDat = setupDatAccess( "EurekaMagiciteItemType", xiv::exd::Language::en ); - m_EurekaSphereElementAdjustDat = setupDatAccess( "EurekaSphereElementAdjust", xiv::exd::Language::none ); - m_EventActionDat = setupDatAccess( "EventAction", xiv::exd::Language::en ); - m_EventIconPriorityDat = setupDatAccess( "EventIconPriority", xiv::exd::Language::none ); - m_EventIconTypeDat = setupDatAccess( "EventIconType", xiv::exd::Language::none ); - m_EventItemDat = setupDatAccess( "EventItem", xiv::exd::Language::en ); - m_EventItemCastTimelineDat = setupDatAccess( "EventItemCastTimeline", xiv::exd::Language::none ); - m_EventItemHelpDat = setupDatAccess( "EventItemHelp", xiv::exd::Language::en ); - m_EventItemTimelineDat = setupDatAccess( "EventItemTimeline", xiv::exd::Language::none ); - m_ExportedSGDat = setupDatAccess( "ExportedSG", xiv::exd::Language::none ); - m_ExVersionDat = setupDatAccess( "ExVersion", xiv::exd::Language::en ); - m_FateDat = setupDatAccess( "Fate", xiv::exd::Language::en ); - m_FCActivityDat = setupDatAccess( "FCActivity", xiv::exd::Language::en ); - m_FCActivityCategoryDat = setupDatAccess( "FCActivityCategory", xiv::exd::Language::en ); - m_FCAuthorityDat = setupDatAccess( "FCAuthority", xiv::exd::Language::en ); - m_FCAuthorityCategoryDat = setupDatAccess( "FCAuthorityCategory", xiv::exd::Language::en ); - m_FCChestNameDat = setupDatAccess( "FCChestName", xiv::exd::Language::en ); - m_FccShopDat = setupDatAccess( "FccShop", xiv::exd::Language::en ); - m_FCHierarchyDat = setupDatAccess( "FCHierarchy", xiv::exd::Language::en ); - m_FCProfileDat = setupDatAccess( "FCProfile", xiv::exd::Language::en ); - m_FCReputationDat = setupDatAccess( "FCReputation", xiv::exd::Language::en ); - m_FCRightsDat = setupDatAccess( "FCRights", xiv::exd::Language::en ); - m_FestivalDat = setupDatAccess( "Festival", xiv::exd::Language::none ); - m_FieldMarkerDat = setupDatAccess( "FieldMarker", xiv::exd::Language::en ); - m_FishingRecordTypeDat = setupDatAccess( "FishingRecordType", xiv::exd::Language::none ); - m_FishingRecordTypeTransientDat = setupDatAccess( "FishingRecordTypeTransient", xiv::exd::Language::none ); - m_FishingSpotDat = setupDatAccess( "FishingSpot", xiv::exd::Language::en ); - m_FishParameterDat = setupDatAccess( "FishParameter", xiv::exd::Language::en ); - m_Frontline03Dat = setupDatAccess( "Frontline03", xiv::exd::Language::none ); - m_Frontline04Dat = setupDatAccess( "Frontline04", xiv::exd::Language::none ); - m_GardeningSeedDat = setupDatAccess( "GardeningSeed", xiv::exd::Language::none ); - m_GatheringConditionDat = setupDatAccess( "GatheringCondition", xiv::exd::Language::en ); - m_GatheringExpDat = setupDatAccess( "GatheringExp", xiv::exd::Language::none ); - m_GatheringItemDat = setupDatAccess( "GatheringItem", xiv::exd::Language::none ); - m_GatheringItemLevelConvertTableDat = setupDatAccess( "GatheringItemLevelConvertTable", xiv::exd::Language::none ); - m_GatheringItemPointDat = setupDatAccess( "GatheringItemPoint", xiv::exd::Language::none ); - m_GatheringLeveDat = setupDatAccess( "GatheringLeve", xiv::exd::Language::none ); - m_GatheringLeveRouteDat = setupDatAccess( "GatheringLeveRoute", xiv::exd::Language::none ); - m_GatheringNotebookListDat = setupDatAccess( "GatheringNotebookList", xiv::exd::Language::none ); - m_GatheringPointDat = setupDatAccess( "GatheringPoint", xiv::exd::Language::none ); - m_GatheringPointBaseDat = setupDatAccess( "GatheringPointBase", xiv::exd::Language::none ); - m_GatheringPointBonusDat = setupDatAccess( "GatheringPointBonus", xiv::exd::Language::none ); - m_GatheringPointBonusTypeDat = setupDatAccess( "GatheringPointBonusType", xiv::exd::Language::en ); - m_GatheringPointNameDat = setupDatAccess( "GatheringPointName", xiv::exd::Language::en ); - m_GatheringSubCategoryDat = setupDatAccess( "GatheringSubCategory", xiv::exd::Language::en ); - m_GatheringTypeDat = setupDatAccess( "GatheringType", xiv::exd::Language::en ); - m_GcArmyCaptureTacticsDat = setupDatAccess( "GcArmyCaptureTactics", xiv::exd::Language::none ); - m_GcArmyExpeditionDat = setupDatAccess( "GcArmyExpedition", xiv::exd::Language::en ); - m_GcArmyExpeditionMemberBonusDat = setupDatAccess( "GcArmyExpeditionMemberBonus", xiv::exd::Language::none ); - m_GcArmyExpeditionTypeDat = setupDatAccess( "GcArmyExpeditionType", xiv::exd::Language::en ); - m_GcArmyMemberGrowDat = setupDatAccess( "GcArmyMemberGrow", xiv::exd::Language::none ); - m_GcArmyTrainingDat = setupDatAccess( "GcArmyTraining", xiv::exd::Language::en ); - m_GCRankGridaniaFemaleTextDat = setupDatAccess( "GCRankGridaniaFemaleText", xiv::exd::Language::en ); - m_GCRankGridaniaMaleTextDat = setupDatAccess( "GCRankGridaniaMaleText", xiv::exd::Language::en ); - m_GCRankLimsaFemaleTextDat = setupDatAccess( "GCRankLimsaFemaleText", xiv::exd::Language::en ); - m_GCRankLimsaMaleTextDat = setupDatAccess( "GCRankLimsaMaleText", xiv::exd::Language::en ); - m_GCRankUldahFemaleTextDat = setupDatAccess( "GCRankUldahFemaleText", xiv::exd::Language::en ); - m_GCRankUldahMaleTextDat = setupDatAccess( "GCRankUldahMaleText", xiv::exd::Language::en ); - m_GCScripShopCategoryDat = setupDatAccess( "GCScripShopCategory", xiv::exd::Language::none ); - m_GCScripShopItemDat = setupDatAccess( "GCScripShopItem", xiv::exd::Language::none ); - m_GCShopDat = setupDatAccess( "GCShop", xiv::exd::Language::none ); - m_GCShopItemCategoryDat = setupDatAccess( "GCShopItemCategory", xiv::exd::Language::en ); - m_GCSupplyDutyDat = setupDatAccess( "GCSupplyDuty", xiv::exd::Language::none ); - m_GCSupplyDutyRewardDat = setupDatAccess( "GCSupplyDutyReward", xiv::exd::Language::none ); - m_GeneralActionDat = setupDatAccess( "GeneralAction", xiv::exd::Language::en ); - m_GFATEDat = setupDatAccess( "GFATE", xiv::exd::Language::none ); - m_GFateClimbing2Dat = setupDatAccess( "GFateClimbing2", xiv::exd::Language::none ); - m_GFateClimbing2ContentDat = setupDatAccess( "GFateClimbing2Content", xiv::exd::Language::none ); - m_GFateClimbing2TotemTypeDat = setupDatAccess( "GFateClimbing2TotemType", xiv::exd::Language::none ); - m_GFateRideShootingDat = setupDatAccess( "GFateRideShooting", xiv::exd::Language::none ); - m_GilShopDat = setupDatAccess( "GilShop", xiv::exd::Language::en ); - m_GilShopItemDat = setupDatAccess( "GilShopItem", xiv::exd::Language::none ); - m_GoldSaucerArcadeMachineDat = setupDatAccess( "GoldSaucerArcadeMachine", xiv::exd::Language::en ); - m_GoldSaucerTextDataDat = setupDatAccess( "GoldSaucerTextData", xiv::exd::Language::en ); - m_GrandCompanyDat = setupDatAccess( "GrandCompany", xiv::exd::Language::en ); - m_GrandCompanyRankDat = setupDatAccess( "GrandCompanyRank", xiv::exd::Language::none ); - m_GuardianDeityDat = setupDatAccess( "GuardianDeity", xiv::exd::Language::en ); - m_GuildleveAssignmentDat = setupDatAccess( "GuildleveAssignment", xiv::exd::Language::none ); - m_GuildleveAssignmentCategoryDat = setupDatAccess( "GuildleveAssignmentCategory", xiv::exd::Language::none ); - m_GuildOrderGuideDat = setupDatAccess( "GuildOrderGuide", xiv::exd::Language::none ); - m_GuildOrderOfficerDat = setupDatAccess( "GuildOrderOfficer", xiv::exd::Language::none ); - m_HairMakeTypeDat = setupDatAccess( "HairMakeType", xiv::exd::Language::none ); - m_HouseRetainerPoseDat = setupDatAccess( "HouseRetainerPose", xiv::exd::Language::none ); - m_HousingAethernetDat = setupDatAccess( "HousingAethernet", xiv::exd::Language::none ); - m_HousingAppealDat = setupDatAccess( "HousingAppeal", xiv::exd::Language::en ); - m_HousingEmploymentNpcListDat = setupDatAccess( "HousingEmploymentNpcList", xiv::exd::Language::none ); - m_HousingEmploymentNpcRaceDat = setupDatAccess( "HousingEmploymentNpcRace", xiv::exd::Language::en ); - m_HousingExteriorDat = setupDatAccess( "HousingExterior", xiv::exd::Language::none ); - m_HousingFurnitureDat = setupDatAccess( "HousingFurniture", xiv::exd::Language::none ); - m_HousingLandSetDat = setupDatAccess( "HousingLandSet", xiv::exd::Language::none ); - m_HousingMapMarkerInfoDat = setupDatAccess( "HousingMapMarkerInfo", xiv::exd::Language::none ); - m_HousingMerchantPoseDat = setupDatAccess( "HousingMerchantPose", xiv::exd::Language::en ); - m_HousingPlacementDat = setupDatAccess( "HousingPlacement", xiv::exd::Language::en ); - m_HousingPresetDat = setupDatAccess( "HousingPreset", xiv::exd::Language::en ); - m_HousingUnitedExteriorDat = setupDatAccess( "HousingUnitedExterior", xiv::exd::Language::none ); - m_HousingYardObjectDat = setupDatAccess( "HousingYardObject", xiv::exd::Language::none ); - m_HowToDat = setupDatAccess( "HowTo", xiv::exd::Language::en ); - m_HowToCategoryDat = setupDatAccess( "HowToCategory", xiv::exd::Language::en ); - m_HowToPageDat = setupDatAccess( "HowToPage", xiv::exd::Language::en ); - m_InstanceContentDat = setupDatAccess( "InstanceContent", xiv::exd::Language::en ); - m_InstanceContentBuffDat = setupDatAccess( "InstanceContentBuff", xiv::exd::Language::none ); - m_InstanceContentCSBonusDat = setupDatAccess( "InstanceContentCSBonus", xiv::exd::Language::none ); - m_InstanceContentGuideDat = setupDatAccess( "InstanceContentGuide", xiv::exd::Language::none ); - m_InstanceContentTextDataDat = setupDatAccess( "InstanceContentTextData", xiv::exd::Language::en ); - m_ItemDat = setupDatAccess( "Item", xiv::exd::Language::en ); - m_ItemActionDat = setupDatAccess( "ItemAction", xiv::exd::Language::none ); - m_ItemFoodDat = setupDatAccess( "ItemFood", xiv::exd::Language::none ); - m_ItemLevelDat = setupDatAccess( "ItemLevel", xiv::exd::Language::none ); - m_ItemSearchCategoryDat = setupDatAccess( "ItemSearchCategory", xiv::exd::Language::en ); - m_ItemSeriesDat = setupDatAccess( "ItemSeries", xiv::exd::Language::en ); - m_ItemSpecialBonusDat = setupDatAccess( "ItemSpecialBonus", xiv::exd::Language::en ); - m_ItemUICategoryDat = setupDatAccess( "ItemUICategory", xiv::exd::Language::en ); - m_JournalCategoryDat = setupDatAccess( "JournalCategory", xiv::exd::Language::en ); - m_JournalGenreDat = setupDatAccess( "JournalGenre", xiv::exd::Language::en ); - m_JournalSectionDat = setupDatAccess( "JournalSection", xiv::exd::Language::en ); - m_LeveDat = setupDatAccess( "Leve", xiv::exd::Language::en ); - m_LeveAssignmentTypeDat = setupDatAccess( "LeveAssignmentType", xiv::exd::Language::en ); - m_LeveClientDat = setupDatAccess( "LeveClient", xiv::exd::Language::en ); - m_LevelDat = setupDatAccess( "Level", xiv::exd::Language::none ); - m_LeveRewardItemDat = setupDatAccess( "LeveRewardItem", xiv::exd::Language::none ); - m_LeveRewardItemGroupDat = setupDatAccess( "LeveRewardItemGroup", xiv::exd::Language::none ); - m_LeveVfxDat = setupDatAccess( "LeveVfx", xiv::exd::Language::none ); - m_LogFilterDat = setupDatAccess( "LogFilter", xiv::exd::Language::en ); - m_LogKindDat = setupDatAccess( "LogKind", xiv::exd::Language::en ); - m_LogKindCategoryTextDat = setupDatAccess( "LogKindCategoryText", xiv::exd::Language::en ); - m_LogMessageDat = setupDatAccess( "LogMessage", xiv::exd::Language::en ); - m_LotteryExchangeShopDat = setupDatAccess( "LotteryExchangeShop", xiv::exd::Language::en ); - m_MacroIconDat = setupDatAccess( "MacroIcon", xiv::exd::Language::none ); - m_MacroIconRedirectOldDat = setupDatAccess( "MacroIconRedirectOld", xiv::exd::Language::none ); - m_MainCommandDat = setupDatAccess( "MainCommand", xiv::exd::Language::en ); - m_MainCommandCategoryDat = setupDatAccess( "MainCommandCategory", xiv::exd::Language::en ); - m_ManeuversArmorDat = setupDatAccess( "ManeuversArmor", xiv::exd::Language::en ); - m_MapDat = setupDatAccess( "Map", xiv::exd::Language::none ); - m_MapMarkerDat = setupDatAccess( "MapMarker", xiv::exd::Language::none ); - m_MapMarkerRegionDat = setupDatAccess( "MapMarkerRegion", xiv::exd::Language::none ); - m_MapSymbolDat = setupDatAccess( "MapSymbol", xiv::exd::Language::none ); - m_MarkerDat = setupDatAccess( "Marker", xiv::exd::Language::en ); - m_MasterpieceSupplyDutyDat = setupDatAccess( "MasterpieceSupplyDuty", xiv::exd::Language::none ); - m_MasterpieceSupplyMultiplierDat = setupDatAccess( "MasterpieceSupplyMultiplier", xiv::exd::Language::none ); - m_MateriaDat = setupDatAccess( "Materia", xiv::exd::Language::none ); - m_MiniGameRADat = setupDatAccess( "MiniGameRA", xiv::exd::Language::none ); - m_MinionRaceDat = setupDatAccess( "MinionRace", xiv::exd::Language::en ); - m_MinionRulesDat = setupDatAccess( "MinionRules", xiv::exd::Language::en ); - m_MinionSkillTypeDat = setupDatAccess( "MinionSkillType", xiv::exd::Language::en ); - m_MobHuntOrderTypeDat = setupDatAccess( "MobHuntOrderType", xiv::exd::Language::none ); - m_MobHuntTargetDat = setupDatAccess( "MobHuntTarget", xiv::exd::Language::none ); - m_ModelCharaDat = setupDatAccess( "ModelChara", xiv::exd::Language::none ); - m_ModelStateDat = setupDatAccess( "ModelState", xiv::exd::Language::none ); - m_MonsterNoteDat = setupDatAccess( "MonsterNote", xiv::exd::Language::en ); - m_MonsterNoteTargetDat = setupDatAccess( "MonsterNoteTarget", xiv::exd::Language::none ); - m_MountDat = setupDatAccess( "Mount", xiv::exd::Language::en ); - m_MountActionDat = setupDatAccess( "MountAction", xiv::exd::Language::none ); - m_MountCustomizeDat = setupDatAccess( "MountCustomize", xiv::exd::Language::none ); - m_MountFlyingConditionDat = setupDatAccess( "MountFlyingCondition", xiv::exd::Language::none ); - m_MountSpeedDat = setupDatAccess( "MountSpeed", xiv::exd::Language::none ); - m_MountTransientDat = setupDatAccess( "MountTransient", xiv::exd::Language::en ); - m_MoveTimelineDat = setupDatAccess( "MoveTimeline", xiv::exd::Language::none ); - m_MoveVfxDat = setupDatAccess( "MoveVfx", xiv::exd::Language::none ); - m_NpcEquipDat = setupDatAccess( "NpcEquip", xiv::exd::Language::none ); - m_NpcYellDat = setupDatAccess( "NpcYell", xiv::exd::Language::en ); - m_OmenDat = setupDatAccess( "Omen", xiv::exd::Language::none ); - m_OnlineStatusDat = setupDatAccess( "OnlineStatus", xiv::exd::Language::en ); - m_OpeningDat = setupDatAccess( "Opening", xiv::exd::Language::none ); - m_OrchestrionDat = setupDatAccess( "Orchestrion", xiv::exd::Language::en ); - m_OrchestrionCategoryDat = setupDatAccess( "OrchestrionCategory", xiv::exd::Language::en ); - m_OrchestrionPathDat = setupDatAccess( "OrchestrionPath", xiv::exd::Language::none ); - m_OrchestrionUiparamDat = setupDatAccess( "OrchestrionUiparam", xiv::exd::Language::none ); - m_ParamGrowDat = setupDatAccess( "ParamGrow", xiv::exd::Language::none ); - m_PartyContentDat = setupDatAccess( "PartyContent", xiv::exd::Language::en ); - m_PartyContentCutsceneDat = setupDatAccess( "PartyContentCutscene", xiv::exd::Language::none ); - m_PartyContentTextDataDat = setupDatAccess( "PartyContentTextData", xiv::exd::Language::en ); - m_PerformDat = setupDatAccess( "Perform", xiv::exd::Language::en ); - m_PerformTransientDat = setupDatAccess( "PerformTransient", xiv::exd::Language::en ); - m_PetDat = setupDatAccess( "Pet", xiv::exd::Language::en ); - m_PetActionDat = setupDatAccess( "PetAction", xiv::exd::Language::en ); - m_PictureDat = setupDatAccess( "Picture", xiv::exd::Language::none ); - m_PlaceNameDat = setupDatAccess( "PlaceName", xiv::exd::Language::en ); - m_PlantPotFlowerSeedDat = setupDatAccess( "PlantPotFlowerSeed", xiv::exd::Language::none ); - m_PreHandlerDat = setupDatAccess( "PreHandler", xiv::exd::Language::none ); - m_PublicContentDat = setupDatAccess( "PublicContent", xiv::exd::Language::en ); - m_PublicContentCutsceneDat = setupDatAccess( "PublicContentCutscene", xiv::exd::Language::none ); - m_PublicContentTextDataDat = setupDatAccess( "PublicContentTextData", xiv::exd::Language::en ); - m_PvPActionDat = setupDatAccess( "PvPAction", xiv::exd::Language::none ); - m_PvPActionSortDat = setupDatAccess( "PvPActionSort", xiv::exd::Language::none ); - m_PvPRankDat = setupDatAccess( "PvPRank", xiv::exd::Language::none ); - m_PvPSelectTraitDat = setupDatAccess( "PvPSelectTrait", xiv::exd::Language::en ); - m_PvPTraitDat = setupDatAccess( "PvPTrait", xiv::exd::Language::none ); - m_QuestDat = setupDatAccess( "Quest", xiv::exd::Language::en ); - m_QuestBattleDat = setupDatAccess( "QuestBattle", xiv::exd::Language::none ); - m_QuestClassJobRewardDat = setupDatAccess( "QuestClassJobReward", xiv::exd::Language::none ); - m_QuestClassJobSupplyDat = setupDatAccess( "QuestClassJobSupply", xiv::exd::Language::none ); - m_QuestRepeatFlagDat = setupDatAccess( "QuestRepeatFlag", xiv::exd::Language::none ); - m_QuestRewardOtherDat = setupDatAccess( "QuestRewardOther", xiv::exd::Language::en ); - m_QuickChatDat = setupDatAccess( "QuickChat", xiv::exd::Language::en ); - m_QuickChatTransientDat = setupDatAccess( "QuickChatTransient", xiv::exd::Language::en ); - m_RaceDat = setupDatAccess( "Race", xiv::exd::Language::en ); - m_RacingChocoboItemDat = setupDatAccess( "RacingChocoboItem", xiv::exd::Language::none ); - m_RacingChocoboNameDat = setupDatAccess( "RacingChocoboName", xiv::exd::Language::en ); - m_RacingChocoboNameCategoryDat = setupDatAccess( "RacingChocoboNameCategory", xiv::exd::Language::en ); - m_RacingChocoboNameInfoDat = setupDatAccess( "RacingChocoboNameInfo", xiv::exd::Language::none ); - m_RacingChocoboParamDat = setupDatAccess( "RacingChocoboParam", xiv::exd::Language::en ); - m_RecastNavimeshDat = setupDatAccess( "RecastNavimesh", xiv::exd::Language::none ); - m_RecipeDat = setupDatAccess( "Recipe", xiv::exd::Language::none ); - m_RecipeElementDat = setupDatAccess( "RecipeElement", xiv::exd::Language::en ); - m_RecipeLevelTableDat = setupDatAccess( "RecipeLevelTable", xiv::exd::Language::none ); - m_RecipeNotebookListDat = setupDatAccess( "RecipeNotebookList", xiv::exd::Language::none ); - m_RecommendContentsDat = setupDatAccess( "RecommendContents", xiv::exd::Language::none ); - m_RelicDat = setupDatAccess( "Relic", xiv::exd::Language::none ); - m_Relic3Dat = setupDatAccess( "Relic3", xiv::exd::Language::none ); - m_RelicItemDat = setupDatAccess( "RelicItem", xiv::exd::Language::none ); - m_RelicNoteDat = setupDatAccess( "RelicNote", xiv::exd::Language::none ); - m_RelicNoteCategoryDat = setupDatAccess( "RelicNoteCategory", xiv::exd::Language::en ); - m_ResidentDat = setupDatAccess( "Resident", xiv::exd::Language::none ); - m_RetainerTaskDat = setupDatAccess( "RetainerTask", xiv::exd::Language::none ); - m_RetainerTaskLvRangeDat = setupDatAccess( "RetainerTaskLvRange", xiv::exd::Language::none ); - m_RetainerTaskNormalDat = setupDatAccess( "RetainerTaskNormal", xiv::exd::Language::none ); - m_RetainerTaskParameterDat = setupDatAccess( "RetainerTaskParameter", xiv::exd::Language::none ); - m_RetainerTaskRandomDat = setupDatAccess( "RetainerTaskRandom", xiv::exd::Language::en ); - m_RPParameterDat = setupDatAccess( "RPParameter", xiv::exd::Language::none ); - m_SalvageDat = setupDatAccess( "Salvage", xiv::exd::Language::none ); - m_SatisfactionNpcDat = setupDatAccess( "SatisfactionNpc", xiv::exd::Language::none ); - m_SatisfactionSupplyDat = setupDatAccess( "SatisfactionSupply", xiv::exd::Language::none ); - m_SatisfactionSupplyRewardDat = setupDatAccess( "SatisfactionSupplyReward", xiv::exd::Language::none ); - m_ScenarioTreeDat = setupDatAccess( "ScenarioTree", xiv::exd::Language::none ); - m_ScenarioTreeTipsDat = setupDatAccess( "ScenarioTreeTips", xiv::exd::Language::none ); - m_ScenarioTreeTipsClassQuestDat = setupDatAccess( "ScenarioTreeTipsClassQuest", xiv::exd::Language::none ); - m_ScenarioTreeTipsQuestDat = setupDatAccess( "ScenarioTreeTipsQuest", xiv::exd::Language::none ); - m_ScenarioTypeDat = setupDatAccess( "ScenarioType", xiv::exd::Language::en ); - m_ScreenImageDat = setupDatAccess( "ScreenImage", xiv::exd::Language::none ); - m_SecretRecipeBookDat = setupDatAccess( "SecretRecipeBook", xiv::exd::Language::en ); - m_SkyIsland2MissionDat = setupDatAccess( "SkyIsland2Mission", xiv::exd::Language::en ); - m_SkyIsland2MissionDetailDat = setupDatAccess( "SkyIsland2MissionDetail", xiv::exd::Language::en ); - m_SkyIsland2MissionTypeDat = setupDatAccess( "SkyIsland2MissionType", xiv::exd::Language::none ); - m_SkyIsland2RangeTypeDat = setupDatAccess( "SkyIsland2RangeType", xiv::exd::Language::none ); - m_SpearfishingItemDat = setupDatAccess( "SpearfishingItem", xiv::exd::Language::en ); - m_SpearfishingNotebookDat = setupDatAccess( "SpearfishingNotebook", xiv::exd::Language::none ); - m_SpearfishingRecordPageDat = setupDatAccess( "SpearfishingRecordPage", xiv::exd::Language::none ); - m_SpecialShopDat = setupDatAccess( "SpecialShop", xiv::exd::Language::en ); - m_SpecialShopItemCategoryDat = setupDatAccess( "SpecialShopItemCategory", xiv::exd::Language::en ); - m_StainDat = setupDatAccess( "Stain", xiv::exd::Language::en ); - m_StainTransientDat = setupDatAccess( "StainTransient", xiv::exd::Language::none ); - m_StatusDat = setupDatAccess( "Status", xiv::exd::Language::en ); - m_StatusHitEffectDat = setupDatAccess( "StatusHitEffect", xiv::exd::Language::none ); - m_StatusLoopVFXDat = setupDatAccess( "StatusLoopVFX", xiv::exd::Language::none ); - m_StoryDat = setupDatAccess( "Story", xiv::exd::Language::none ); - m_SubmarineExplorationDat = setupDatAccess( "SubmarineExploration", xiv::exd::Language::en ); - m_SubmarinePartDat = setupDatAccess( "SubmarinePart", xiv::exd::Language::none ); - m_SubmarineRankDat = setupDatAccess( "SubmarineRank", xiv::exd::Language::none ); - m_SwitchTalkDat = setupDatAccess( "SwitchTalk", xiv::exd::Language::none ); - m_TerritoryTypeDat = setupDatAccess( "TerritoryType", xiv::exd::Language::none ); - m_TextCommandDat = setupDatAccess( "TextCommand", xiv::exd::Language::en ); - m_TitleDat = setupDatAccess( "Title", xiv::exd::Language::en ); - m_TomestonesDat = setupDatAccess( "Tomestones", xiv::exd::Language::none ); - m_TomestonesItemDat = setupDatAccess( "TomestonesItem", xiv::exd::Language::none ); - m_TopicSelectDat = setupDatAccess( "TopicSelect", xiv::exd::Language::en ); - m_TownDat = setupDatAccess( "Town", xiv::exd::Language::en ); - m_TraitDat = setupDatAccess( "Trait", xiv::exd::Language::en ); - m_TraitRecastDat = setupDatAccess( "TraitRecast", xiv::exd::Language::none ); - m_TraitTransientDat = setupDatAccess( "TraitTransient", xiv::exd::Language::en ); - m_TransformationDat = setupDatAccess( "Transformation", xiv::exd::Language::none ); - m_TreasureDat = setupDatAccess( "Treasure", xiv::exd::Language::en ); - m_TreasureHuntRankDat = setupDatAccess( "TreasureHuntRank", xiv::exd::Language::none ); - m_TribeDat = setupDatAccess( "Tribe", xiv::exd::Language::en ); - m_TripleTriadDat = setupDatAccess( "TripleTriad", xiv::exd::Language::none ); - m_TripleTriadCardDat = setupDatAccess( "TripleTriadCard", xiv::exd::Language::en ); - m_TripleTriadCardRarityDat = setupDatAccess( "TripleTriadCardRarity", xiv::exd::Language::none ); - m_TripleTriadCardResidentDat = setupDatAccess( "TripleTriadCardResident", xiv::exd::Language::none ); - m_TripleTriadCardTypeDat = setupDatAccess( "TripleTriadCardType", xiv::exd::Language::en ); - m_TripleTriadCompetitionDat = setupDatAccess( "TripleTriadCompetition", xiv::exd::Language::en ); - m_TripleTriadRuleDat = setupDatAccess( "TripleTriadRule", xiv::exd::Language::en ); - m_TutorialDat = setupDatAccess( "Tutorial", xiv::exd::Language::none ); - m_TutorialDPSDat = setupDatAccess( "TutorialDPS", xiv::exd::Language::none ); - m_TutorialHealerDat = setupDatAccess( "TutorialHealer", xiv::exd::Language::none ); - m_TutorialTankDat = setupDatAccess( "TutorialTank", xiv::exd::Language::none ); - m_UIColorDat = setupDatAccess( "UIColor", xiv::exd::Language::none ); - m_VaseFlowerDat = setupDatAccess( "VaseFlower", xiv::exd::Language::none ); - m_VFXDat = setupDatAccess( "VFX", xiv::exd::Language::none ); - m_WarpDat = setupDatAccess( "Warp", xiv::exd::Language::en ); - m_WarpConditionDat = setupDatAccess( "WarpCondition", xiv::exd::Language::none ); - m_WarpLogicDat = setupDatAccess( "WarpLogic", xiv::exd::Language::en ); - m_WeatherDat = setupDatAccess( "Weather", xiv::exd::Language::en ); - m_WeatherGroupDat = setupDatAccess( "WeatherGroup", xiv::exd::Language::none ); - m_WeatherRateDat = setupDatAccess( "WeatherRate", xiv::exd::Language::none ); - m_WeatherReportReplaceDat = setupDatAccess( "WeatherReportReplace", xiv::exd::Language::none ); - m_WeddingBGMDat = setupDatAccess( "WeddingBGM", xiv::exd::Language::en ); - m_WeeklyBingoOrderDataDat = setupDatAccess( "WeeklyBingoOrderData", xiv::exd::Language::none ); - m_WeeklyBingoRewardDataDat = setupDatAccess( "WeeklyBingoRewardData", xiv::exd::Language::none ); - m_WeeklyBingoTextDat = setupDatAccess( "WeeklyBingoText", xiv::exd::Language::en ); - m_WeeklyLotBonusDat = setupDatAccess( "WeeklyLotBonus", xiv::exd::Language::none ); - m_WorldDat = setupDatAccess( "World", xiv::exd::Language::none ); - m_WorldDCGroupTypeDat = setupDatAccess( "WorldDCGroupType", xiv::exd::Language::none ); - m_YKWDat = setupDatAccess( "YKW", xiv::exd::Language::en ); - m_ZoneSharedGroupDat = setupDatAccess( "ZoneSharedGroup", xiv::exd::Language::none ); + m_AchievementDat = setupDatAccess( "Achievement", xiv::exd::Language::en ); + m_AchievementCategoryDat = setupDatAccess( "AchievementCategory", xiv::exd::Language::en ); + m_AchievementHideConditionDat = setupDatAccess( "AchievementHideCondition", xiv::exd::Language::none ); + m_AchievementKindDat = setupDatAccess( "AchievementKind", xiv::exd::Language::en ); + m_ActionDat = setupDatAccess( "Action", xiv::exd::Language::en ); + m_ActionCastTimelineDat = setupDatAccess( "ActionCastTimeline", xiv::exd::Language::none ); + m_ActionCastVFXDat = setupDatAccess( "ActionCastVFX", xiv::exd::Language::none ); + m_ActionCategoryDat = setupDatAccess( "ActionCategory", xiv::exd::Language::en ); + m_ActionComboRouteDat = setupDatAccess( "ActionComboRoute", xiv::exd::Language::en ); + m_ActionIndirectionDat = setupDatAccess( "ActionIndirection", xiv::exd::Language::none ); + m_ActionParamDat = setupDatAccess( "ActionParam", xiv::exd::Language::none ); + m_ActionProcStatusDat = setupDatAccess( "ActionProcStatus", xiv::exd::Language::none ); + m_ActionTimelineDat = setupDatAccess( "ActionTimeline", xiv::exd::Language::none ); + m_ActionTimelineMoveDat = setupDatAccess( "ActionTimelineMove", xiv::exd::Language::none ); + m_ActionTimelineReplaceDat = setupDatAccess( "ActionTimelineReplace", xiv::exd::Language::none ); + m_ActionTransientDat = setupDatAccess( "ActionTransient", xiv::exd::Language::en ); + m_ActivityFeedButtonsDat = setupDatAccess( "ActivityFeedButtons", xiv::exd::Language::none ); + m_ActivityFeedCaptionsDat = setupDatAccess( "ActivityFeedCaptions", xiv::exd::Language::none ); + m_ActivityFeedGroupCaptionsDat = setupDatAccess( "ActivityFeedGroupCaptions", xiv::exd::Language::none ); + m_ActivityFeedImagesDat = setupDatAccess( "ActivityFeedImages", xiv::exd::Language::none ); + m_AddonDat = setupDatAccess( "Addon", xiv::exd::Language::en ); + m_AdventureDat = setupDatAccess( "Adventure", xiv::exd::Language::en ); + m_AdventureExPhaseDat = setupDatAccess( "AdventureExPhase", xiv::exd::Language::none ); + m_AetherCurrentDat = setupDatAccess( "AetherCurrent", xiv::exd::Language::none ); + m_AetherCurrentCompFlgSetDat = setupDatAccess( "AetherCurrentCompFlgSet", xiv::exd::Language::none ); + m_AetherialWheelDat = setupDatAccess( "AetherialWheel", xiv::exd::Language::none ); + m_AetheryteDat = setupDatAccess( "Aetheryte", xiv::exd::Language::en ); + m_AetheryteSystemDefineDat = setupDatAccess( "AetheryteSystemDefine", xiv::exd::Language::none ); + m_AirshipExplorationLevelDat = setupDatAccess( "AirshipExplorationLevel", xiv::exd::Language::none ); + m_AirshipExplorationLogDat = setupDatAccess( "AirshipExplorationLog", xiv::exd::Language::en ); + m_AirshipExplorationParamTypeDat = setupDatAccess( "AirshipExplorationParamType", xiv::exd::Language::en ); + m_AirshipExplorationPartDat = setupDatAccess( "AirshipExplorationPart", xiv::exd::Language::none ); + m_AirshipExplorationPointDat = setupDatAccess( "AirshipExplorationPoint", xiv::exd::Language::en ); + m_AnimationLODDat = setupDatAccess( "AnimationLOD", xiv::exd::Language::none ); + m_AnimaWeapon5Dat = setupDatAccess( "AnimaWeapon5", xiv::exd::Language::none ); + m_AnimaWeapon5ParamDat = setupDatAccess( "AnimaWeapon5Param", xiv::exd::Language::en ); + m_AnimaWeapon5PatternGroupDat = setupDatAccess( "AnimaWeapon5PatternGroup", xiv::exd::Language::en ); + m_AnimaWeapon5SpiritTalkDat = setupDatAccess( "AnimaWeapon5SpiritTalk", xiv::exd::Language::none ); + m_AnimaWeapon5SpiritTalkParamDat = setupDatAccess( "AnimaWeapon5SpiritTalkParam", xiv::exd::Language::en ); + m_AnimaWeapon5TradeItemDat = setupDatAccess( "AnimaWeapon5TradeItem", xiv::exd::Language::none ); + m_AnimaWeaponFUITalkDat = setupDatAccess( "AnimaWeaponFUITalk", xiv::exd::Language::none ); + m_AnimaWeaponFUITalkParamDat = setupDatAccess( "AnimaWeaponFUITalkParam", xiv::exd::Language::en ); + m_AnimaWeaponIconDat = setupDatAccess( "AnimaWeaponIcon", xiv::exd::Language::none ); + m_AnimaWeaponItemDat = setupDatAccess( "AnimaWeaponItem", xiv::exd::Language::none ); + m_AozActionDat = setupDatAccess( "AozAction", xiv::exd::Language::none ); + m_AozActionTransientDat = setupDatAccess( "AozActionTransient", xiv::exd::Language::en ); + m_AOZArrangementDat = setupDatAccess( "AOZArrangement", xiv::exd::Language::none ); + m_AOZBossDat = setupDatAccess( "AOZBoss", xiv::exd::Language::none ); + m_AOZContentDat = setupDatAccess( "AOZContent", xiv::exd::Language::none ); + m_AOZContentBriefingBNpcDat = setupDatAccess( "AOZContentBriefingBNpc", xiv::exd::Language::none ); + m_AquariumFishDat = setupDatAccess( "AquariumFish", xiv::exd::Language::none ); + m_AquariumWaterDat = setupDatAccess( "AquariumWater", xiv::exd::Language::en ); + m_ArrayEventHandlerDat = setupDatAccess( "ArrayEventHandler", xiv::exd::Language::none ); + m_AttackTypeDat = setupDatAccess( "AttackType", xiv::exd::Language::en ); + m_BacklightColorDat = setupDatAccess( "BacklightColor", xiv::exd::Language::none ); + m_BallistaDat = setupDatAccess( "Ballista", xiv::exd::Language::none ); + m_BalloonDat = setupDatAccess( "Balloon", xiv::exd::Language::en ); + m_BaseParamDat = setupDatAccess( "BaseParam", xiv::exd::Language::en ); + m_BattleLeveDat = setupDatAccess( "BattleLeve", xiv::exd::Language::none ); + m_BattleLeveRuleDat = setupDatAccess( "BattleLeveRule", xiv::exd::Language::none ); + m_BeastRankBonusDat = setupDatAccess( "BeastRankBonus", xiv::exd::Language::none ); + m_BeastReputationRankDat = setupDatAccess( "BeastReputationRank", xiv::exd::Language::en ); + m_BeastTribeDat = setupDatAccess( "BeastTribe", xiv::exd::Language::en ); + m_BehaviorDat = setupDatAccess( "Behavior", xiv::exd::Language::none ); + m_BehaviorPathDat = setupDatAccess( "BehaviorPath", xiv::exd::Language::none ); + m_BenchmarkOverrideEquipmentDat = setupDatAccess( "BenchmarkOverrideEquipment", xiv::exd::Language::none ); + m_BGMDat = setupDatAccess( "BGM", xiv::exd::Language::none ); + m_BGMFadeDat = setupDatAccess( "BGMFade", xiv::exd::Language::none ); + m_BGMFadeTypeDat = setupDatAccess( "BGMFadeType", xiv::exd::Language::none ); + m_BGMSceneDat = setupDatAccess( "BGMScene", xiv::exd::Language::none ); + m_BGMSituationDat = setupDatAccess( "BGMSituation", xiv::exd::Language::none ); + m_BGMSwitchDat = setupDatAccess( "BGMSwitch", xiv::exd::Language::none ); + m_BGMSystemDefineDat = setupDatAccess( "BGMSystemDefine", xiv::exd::Language::none ); + m_BNpcAnnounceIconDat = setupDatAccess( "BNpcAnnounceIcon", xiv::exd::Language::none ); + m_BNpcBaseDat = setupDatAccess( "BNpcBase", xiv::exd::Language::none ); + m_BNpcCustomizeDat = setupDatAccess( "BNpcCustomize", xiv::exd::Language::none ); + m_BNpcNameDat = setupDatAccess( "BNpcName", xiv::exd::Language::en ); + m_BNpcPartsDat = setupDatAccess( "BNpcParts", xiv::exd::Language::none ); + m_BNpcStateDat = setupDatAccess( "BNpcState", xiv::exd::Language::none ); + m_BuddyDat = setupDatAccess( "Buddy", xiv::exd::Language::none ); + m_BuddyActionDat = setupDatAccess( "BuddyAction", xiv::exd::Language::en ); + m_BuddyEquipDat = setupDatAccess( "BuddyEquip", xiv::exd::Language::en ); + m_BuddyItemDat = setupDatAccess( "BuddyItem", xiv::exd::Language::none ); + m_BuddyRankDat = setupDatAccess( "BuddyRank", xiv::exd::Language::none ); + m_BuddySkillDat = setupDatAccess( "BuddySkill", xiv::exd::Language::none ); + m_CabinetDat = setupDatAccess( "Cabinet", xiv::exd::Language::none ); + m_CabinetCategoryDat = setupDatAccess( "CabinetCategory", xiv::exd::Language::none ); + m_CalendarDat = setupDatAccess( "Calendar", xiv::exd::Language::none ); + m_CarryDat = setupDatAccess( "Carry", xiv::exd::Language::none ); + m_ChannelingDat = setupDatAccess( "Channeling", xiv::exd::Language::none ); + m_CharaMakeClassEquipDat = setupDatAccess( "CharaMakeClassEquip", xiv::exd::Language::none ); + m_CharaMakeCustomizeDat = setupDatAccess( "CharaMakeCustomize", xiv::exd::Language::none ); + m_CharaMakeNameDat = setupDatAccess( "CharaMakeName", xiv::exd::Language::en ); + m_CharaMakeTypeDat = setupDatAccess( "CharaMakeType", xiv::exd::Language::en ); + m_ChocoboRaceDat = setupDatAccess( "ChocoboRace", xiv::exd::Language::none ); + m_ChocoboRaceAbilityDat = setupDatAccess( "ChocoboRaceAbility", xiv::exd::Language::en ); + m_ChocoboRaceAbilityTypeDat = setupDatAccess( "ChocoboRaceAbilityType", xiv::exd::Language::none ); + m_ChocoboRaceItemDat = setupDatAccess( "ChocoboRaceItem", xiv::exd::Language::en ); + m_ChocoboRaceRankDat = setupDatAccess( "ChocoboRaceRank", xiv::exd::Language::none ); + m_ChocoboRaceStatusDat = setupDatAccess( "ChocoboRaceStatus", xiv::exd::Language::none ); + m_ChocoboRaceTerritoryDat = setupDatAccess( "ChocoboRaceTerritory", xiv::exd::Language::none ); + m_ChocoboRaceTutorialDat = setupDatAccess( "ChocoboRaceTutorial", xiv::exd::Language::none ); + m_ChocoboRaceWeatherDat = setupDatAccess( "ChocoboRaceWeather", xiv::exd::Language::none ); + m_ChocoboTaxiDat = setupDatAccess( "ChocoboTaxi", xiv::exd::Language::none ); + m_ChocoboTaxiStandDat = setupDatAccess( "ChocoboTaxiStand", xiv::exd::Language::en ); + m_CircleActivityDat = setupDatAccess( "CircleActivity", xiv::exd::Language::en ); + m_ClassJobDat = setupDatAccess( "ClassJob", xiv::exd::Language::en ); + m_ClassJobCategoryDat = setupDatAccess( "ClassJobCategory", xiv::exd::Language::en ); + m_CollectablesShopDat = setupDatAccess( "CollectablesShop", xiv::exd::Language::en ); + m_CollectablesShopItemDat = setupDatAccess( "CollectablesShopItem", xiv::exd::Language::none ); + m_CollectablesShopItemGroupDat = setupDatAccess( "CollectablesShopItemGroup", xiv::exd::Language::en ); + m_CollectablesShopRefineDat = setupDatAccess( "CollectablesShopRefine", xiv::exd::Language::none ); + m_CollectablesShopRewardItemDat = setupDatAccess( "CollectablesShopRewardItem", xiv::exd::Language::none ); + m_CollectablesShopRewardScripDat = setupDatAccess( "CollectablesShopRewardScrip", xiv::exd::Language::none ); + m_CompanionDat = setupDatAccess( "Companion", xiv::exd::Language::en ); + m_CompanionMoveDat = setupDatAccess( "CompanionMove", xiv::exd::Language::en ); + m_CompanionTransientDat = setupDatAccess( "CompanionTransient", xiv::exd::Language::en ); + m_CompanyActionDat = setupDatAccess( "CompanyAction", xiv::exd::Language::en ); + m_CompanyCraftDraftDat = setupDatAccess( "CompanyCraftDraft", xiv::exd::Language::en ); + m_CompanyCraftDraftCategoryDat = setupDatAccess( "CompanyCraftDraftCategory", xiv::exd::Language::en ); + m_CompanyCraftManufactoryStateDat = setupDatAccess( "CompanyCraftManufactoryState", xiv::exd::Language::en ); + m_CompanyCraftPartDat = setupDatAccess( "CompanyCraftPart", xiv::exd::Language::none ); + m_CompanyCraftProcessDat = setupDatAccess( "CompanyCraftProcess", xiv::exd::Language::none ); + m_CompanyCraftSequenceDat = setupDatAccess( "CompanyCraftSequence", xiv::exd::Language::none ); + m_CompanyCraftSupplyItemDat = setupDatAccess( "CompanyCraftSupplyItem", xiv::exd::Language::none ); + m_CompanyCraftTypeDat = setupDatAccess( "CompanyCraftType", xiv::exd::Language::en ); + m_CompanyLeveDat = setupDatAccess( "CompanyLeve", xiv::exd::Language::none ); + m_CompanyLeveRuleDat = setupDatAccess( "CompanyLeveRule", xiv::exd::Language::none ); + m_CompleteJournalDat = setupDatAccess( "CompleteJournal", xiv::exd::Language::en ); + m_CompleteJournalCategoryDat = setupDatAccess( "CompleteJournalCategory", xiv::exd::Language::none ); + m_ConditionDat = setupDatAccess( "Condition", xiv::exd::Language::none ); + m_ConfigKeyDat = setupDatAccess( "ConfigKey", xiv::exd::Language::en ); + m_ContentCloseCycleDat = setupDatAccess( "ContentCloseCycle", xiv::exd::Language::none ); + m_ContentExActionDat = setupDatAccess( "ContentExAction", xiv::exd::Language::none ); + m_ContentFinderConditionDat = setupDatAccess( "ContentFinderCondition", xiv::exd::Language::en ); + m_ContentFinderConditionTransientDat = setupDatAccess( "ContentFinderConditionTransient", xiv::exd::Language::en ); + m_ContentGaugeDat = setupDatAccess( "ContentGauge", xiv::exd::Language::en ); + m_ContentGaugeColorDat = setupDatAccess( "ContentGaugeColor", xiv::exd::Language::none ); + m_ContentMemberTypeDat = setupDatAccess( "ContentMemberType", xiv::exd::Language::none ); + m_ContentNpcTalkDat = setupDatAccess( "ContentNpcTalk", xiv::exd::Language::none ); + m_ContentRandomSelectDat = setupDatAccess( "ContentRandomSelect", xiv::exd::Language::none ); + m_ContentRouletteDat = setupDatAccess( "ContentRoulette", xiv::exd::Language::en ); + m_ContentRouletteOpenRuleDat = setupDatAccess( "ContentRouletteOpenRule", xiv::exd::Language::none ); + m_ContentRouletteRoleBonusDat = setupDatAccess( "ContentRouletteRoleBonus", xiv::exd::Language::none ); + m_ContentsNoteDat = setupDatAccess( "ContentsNote", xiv::exd::Language::en ); + m_ContentTalkDat = setupDatAccess( "ContentTalk", xiv::exd::Language::en ); + m_ContentTalkParamDat = setupDatAccess( "ContentTalkParam", xiv::exd::Language::none ); + m_ContentTypeDat = setupDatAccess( "ContentType", xiv::exd::Language::en ); + m_CraftActionDat = setupDatAccess( "CraftAction", xiv::exd::Language::en ); + m_CraftLeveDat = setupDatAccess( "CraftLeve", xiv::exd::Language::none ); + m_CraftLevelDifferenceDat = setupDatAccess( "CraftLevelDifference", xiv::exd::Language::none ); + m_CraftTypeDat = setupDatAccess( "CraftType", xiv::exd::Language::en ); + m_CreditDat = setupDatAccess( "Credit", xiv::exd::Language::none ); + m_CreditBackImageDat = setupDatAccess( "CreditBackImage", xiv::exd::Language::none ); + m_CreditCastDat = setupDatAccess( "CreditCast", xiv::exd::Language::en ); + m_CreditListDat = setupDatAccess( "CreditList", xiv::exd::Language::none ); + m_CreditListTextDat = setupDatAccess( "CreditListText", xiv::exd::Language::en ); + m_CurrencyDat = setupDatAccess( "Currency", xiv::exd::Language::none ); + m_CustomTalkDat = setupDatAccess( "CustomTalk", xiv::exd::Language::en ); + m_CustomTalkDynamicIconDat = setupDatAccess( "CustomTalkDynamicIcon", xiv::exd::Language::none ); + m_CustomTalkNestHandlersDat = setupDatAccess( "CustomTalkNestHandlers", xiv::exd::Language::none ); + m_CutsceneDat = setupDatAccess( "Cutscene", xiv::exd::Language::none ); + m_CutsceneMotionDat = setupDatAccess( "CutsceneMotion", xiv::exd::Language::none ); + m_CutsceneWorkIndexDat = setupDatAccess( "CutsceneWorkIndex", xiv::exd::Language::none ); + m_CutScreenImageDat = setupDatAccess( "CutScreenImage", xiv::exd::Language::none ); + m_CycleTimeDat = setupDatAccess( "CycleTime", xiv::exd::Language::none ); + m_DailySupplyItemDat = setupDatAccess( "DailySupplyItem", xiv::exd::Language::none ); + m_DawnContentDat = setupDatAccess( "DawnContent", xiv::exd::Language::none ); + m_DawnGrowMemberDat = setupDatAccess( "DawnGrowMember", xiv::exd::Language::none ); + m_DawnMemberUIParamDat = setupDatAccess( "DawnMemberUIParam", xiv::exd::Language::en ); + m_DawnQuestAnnounceDat = setupDatAccess( "DawnQuestAnnounce", xiv::exd::Language::none ); + m_DawnQuestMemberDat = setupDatAccess( "DawnQuestMember", xiv::exd::Language::none ); + m_DeepDungeonDat = setupDatAccess( "DeepDungeon", xiv::exd::Language::en ); + m_DeepDungeonBanDat = setupDatAccess( "DeepDungeonBan", xiv::exd::Language::none ); + m_DeepDungeonDangerDat = setupDatAccess( "DeepDungeonDanger", xiv::exd::Language::none ); + m_DeepDungeonEquipmentDat = setupDatAccess( "DeepDungeonEquipment", xiv::exd::Language::en ); + m_DeepDungeonFloorEffectUIDat = setupDatAccess( "DeepDungeonFloorEffectUI", xiv::exd::Language::en ); + m_DeepDungeonItemDat = setupDatAccess( "DeepDungeonItem", xiv::exd::Language::en ); + m_DeepDungeonLayerDat = setupDatAccess( "DeepDungeonLayer", xiv::exd::Language::none ); + m_DeepDungeonMagicStoneDat = setupDatAccess( "DeepDungeonMagicStone", xiv::exd::Language::en ); + m_DeepDungeonMap5XDat = setupDatAccess( "DeepDungeonMap5X", xiv::exd::Language::none ); + m_DeepDungeonRoomDat = setupDatAccess( "DeepDungeonRoom", xiv::exd::Language::none ); + m_DeepDungeonStatusDat = setupDatAccess( "DeepDungeonStatus", xiv::exd::Language::none ); + m_DefaultTalkDat = setupDatAccess( "DefaultTalk", xiv::exd::Language::en ); + m_DefaultTalkLipSyncTypeDat = setupDatAccess( "DefaultTalkLipSyncType", xiv::exd::Language::none ); + m_DeliveryQuestDat = setupDatAccess( "DeliveryQuest", xiv::exd::Language::none ); + m_DescriptionDat = setupDatAccess( "Description", xiv::exd::Language::en ); + m_DescriptionPageDat = setupDatAccess( "DescriptionPage", xiv::exd::Language::none ); + m_DescriptionSectionDat = setupDatAccess( "DescriptionSection", xiv::exd::Language::none ); + m_DescriptionStringDat = setupDatAccess( "DescriptionString", xiv::exd::Language::en ); + m_DisposalShopDat = setupDatAccess( "DisposalShop", xiv::exd::Language::en ); + m_DisposalShopFilterTypeDat = setupDatAccess( "DisposalShopFilterType", xiv::exd::Language::en ); + m_DisposalShopItemDat = setupDatAccess( "DisposalShopItem", xiv::exd::Language::none ); + m_DpsChallengeDat = setupDatAccess( "DpsChallenge", xiv::exd::Language::en ); + m_DpsChallengeOfficerDat = setupDatAccess( "DpsChallengeOfficer", xiv::exd::Language::none ); + m_DpsChallengeTransientDat = setupDatAccess( "DpsChallengeTransient", xiv::exd::Language::none ); + m_DynamicEventDat = setupDatAccess( "DynamicEvent", xiv::exd::Language::en ); + m_DynamicEventEnemyTypeDat = setupDatAccess( "DynamicEventEnemyType", xiv::exd::Language::en ); + m_DynamicEventSingleBattleDat = setupDatAccess( "DynamicEventSingleBattle", xiv::exd::Language::en ); + m_DynamicEventTypeDat = setupDatAccess( "DynamicEventType", xiv::exd::Language::none ); + m_EmjAddonDat = setupDatAccess( "EmjAddon", xiv::exd::Language::en ); + m_EmjDaniDat = setupDatAccess( "EmjDani", xiv::exd::Language::none ); + m_EmoteDat = setupDatAccess( "Emote", xiv::exd::Language::en ); + m_EmoteCategoryDat = setupDatAccess( "EmoteCategory", xiv::exd::Language::en ); + m_EmoteModeDat = setupDatAccess( "EmoteMode", xiv::exd::Language::none ); + m_ENpcBaseDat = setupDatAccess( "ENpcBase", xiv::exd::Language::none ); + m_ENpcDressUpDat = setupDatAccess( "ENpcDressUp", xiv::exd::Language::none ); + m_ENpcDressUpDressDat = setupDatAccess( "ENpcDressUpDress", xiv::exd::Language::none ); + m_ENpcResidentDat = setupDatAccess( "ENpcResident", xiv::exd::Language::en ); + m_EObjDat = setupDatAccess( "EObj", xiv::exd::Language::none ); + m_EObjNameDat = setupDatAccess( "EObjName", xiv::exd::Language::en ); + m_EquipRaceCategoryDat = setupDatAccess( "EquipRaceCategory", xiv::exd::Language::none ); + m_EquipSlotCategoryDat = setupDatAccess( "EquipSlotCategory", xiv::exd::Language::none ); + m_EurekaAetherItemDat = setupDatAccess( "EurekaAetherItem", xiv::exd::Language::en ); + m_EurekaAethernetDat = setupDatAccess( "EurekaAethernet", xiv::exd::Language::none ); + m_EurekaGrowDataDat = setupDatAccess( "EurekaGrowData", xiv::exd::Language::none ); + m_EurekaLogosMixerProbabilityDat = setupDatAccess( "EurekaLogosMixerProbability", xiv::exd::Language::none ); + m_EurekaMagiaActionDat = setupDatAccess( "EurekaMagiaAction", xiv::exd::Language::none ); + m_EurekaMagiciteItemDat = setupDatAccess( "EurekaMagiciteItem", xiv::exd::Language::none ); + m_EurekaMagiciteItemTypeDat = setupDatAccess( "EurekaMagiciteItemType", xiv::exd::Language::en ); + m_EurekaSphereElementAdjustDat = setupDatAccess( "EurekaSphereElementAdjust", xiv::exd::Language::none ); + m_EventActionDat = setupDatAccess( "EventAction", xiv::exd::Language::en ); + m_EventIconPriorityDat = setupDatAccess( "EventIconPriority", xiv::exd::Language::none ); + m_EventIconTypeDat = setupDatAccess( "EventIconType", xiv::exd::Language::none ); + m_EventItemDat = setupDatAccess( "EventItem", xiv::exd::Language::en ); + m_EventItemCastTimelineDat = setupDatAccess( "EventItemCastTimeline", xiv::exd::Language::none ); + m_EventItemHelpDat = setupDatAccess( "EventItemHelp", xiv::exd::Language::en ); + m_EventItemTimelineDat = setupDatAccess( "EventItemTimeline", xiv::exd::Language::none ); + m_EventSystemDefineDat = setupDatAccess( "EventSystemDefine", xiv::exd::Language::none ); + m_ExportedSGDat = setupDatAccess( "ExportedSG", xiv::exd::Language::none ); + m_ExVersionDat = setupDatAccess( "ExVersion", xiv::exd::Language::en ); + m_FateDat = setupDatAccess( "Fate", xiv::exd::Language::en ); + m_FateEventDat = setupDatAccess( "FateEvent", xiv::exd::Language::en ); + m_FateModeDat = setupDatAccess( "FateMode", xiv::exd::Language::none ); + m_FateProgressUIDat = setupDatAccess( "FateProgressUI", xiv::exd::Language::none ); + m_FateTokenTypeDat = setupDatAccess( "FateTokenType", xiv::exd::Language::none ); + m_FCActivityDat = setupDatAccess( "FCActivity", xiv::exd::Language::en ); + m_FCActivityCategoryDat = setupDatAccess( "FCActivityCategory", xiv::exd::Language::en ); + m_FCAuthorityDat = setupDatAccess( "FCAuthority", xiv::exd::Language::en ); + m_FCAuthorityCategoryDat = setupDatAccess( "FCAuthorityCategory", xiv::exd::Language::en ); + m_FCChestNameDat = setupDatAccess( "FCChestName", xiv::exd::Language::en ); + m_FCCrestSymbolDat = setupDatAccess( "FCCrestSymbol", xiv::exd::Language::none ); + m_FccShopDat = setupDatAccess( "FccShop", xiv::exd::Language::en ); + m_FCHierarchyDat = setupDatAccess( "FCHierarchy", xiv::exd::Language::en ); + m_FCProfileDat = setupDatAccess( "FCProfile", xiv::exd::Language::en ); + m_FCRankDat = setupDatAccess( "FCRank", xiv::exd::Language::none ); + m_FCReputationDat = setupDatAccess( "FCReputation", xiv::exd::Language::en ); + m_FCRightsDat = setupDatAccess( "FCRights", xiv::exd::Language::en ); + m_FestivalDat = setupDatAccess( "Festival", xiv::exd::Language::none ); + m_FieldMarkerDat = setupDatAccess( "FieldMarker", xiv::exd::Language::en ); + m_FishingRecordTypeDat = setupDatAccess( "FishingRecordType", xiv::exd::Language::none ); + m_FishingRecordTypeTransientDat = setupDatAccess( "FishingRecordTypeTransient", xiv::exd::Language::none ); + m_FishingSpotDat = setupDatAccess( "FishingSpot", xiv::exd::Language::en ); + m_FishParameterDat = setupDatAccess( "FishParameter", xiv::exd::Language::en ); + m_Frontline03Dat = setupDatAccess( "Frontline03", xiv::exd::Language::none ); + m_Frontline04Dat = setupDatAccess( "Frontline04", xiv::exd::Language::none ); + m_FurnitureCatalogCategoryDat = setupDatAccess( "FurnitureCatalogCategory", xiv::exd::Language::en ); + m_FurnitureCatalogItemListDat = setupDatAccess( "FurnitureCatalogItemList", xiv::exd::Language::none ); + m_GardeningSeedDat = setupDatAccess( "GardeningSeed", xiv::exd::Language::none ); + m_GatheringConditionDat = setupDatAccess( "GatheringCondition", xiv::exd::Language::en ); + m_GatheringExpDat = setupDatAccess( "GatheringExp", xiv::exd::Language::none ); + m_GatheringItemDat = setupDatAccess( "GatheringItem", xiv::exd::Language::none ); + m_GatheringItemLevelConvertTableDat = setupDatAccess( "GatheringItemLevelConvertTable", xiv::exd::Language::none ); + m_GatheringItemPointDat = setupDatAccess( "GatheringItemPoint", xiv::exd::Language::none ); + m_GatheringLeveDat = setupDatAccess( "GatheringLeve", xiv::exd::Language::none ); + m_GatheringLeveRouteDat = setupDatAccess( "GatheringLeveRoute", xiv::exd::Language::none ); + m_GatheringLeveRuleDat = setupDatAccess( "GatheringLeveRule", xiv::exd::Language::none ); + m_GatheringNotebookListDat = setupDatAccess( "GatheringNotebookList", xiv::exd::Language::none ); + m_GatheringPointDat = setupDatAccess( "GatheringPoint", xiv::exd::Language::none ); + m_GatheringPointBaseDat = setupDatAccess( "GatheringPointBase", xiv::exd::Language::none ); + m_GatheringPointBonusDat = setupDatAccess( "GatheringPointBonus", xiv::exd::Language::none ); + m_GatheringPointBonusTypeDat = setupDatAccess( "GatheringPointBonusType", xiv::exd::Language::en ); + m_GatheringPointNameDat = setupDatAccess( "GatheringPointName", xiv::exd::Language::en ); + m_GatheringPointTransientDat = setupDatAccess( "GatheringPointTransient", xiv::exd::Language::none ); + m_GatheringRarePopTimeTableDat = setupDatAccess( "GatheringRarePopTimeTable", xiv::exd::Language::none ); + m_GatheringSubCategoryDat = setupDatAccess( "GatheringSubCategory", xiv::exd::Language::en ); + m_GatheringTypeDat = setupDatAccess( "GatheringType", xiv::exd::Language::en ); + m_GcArmyCaptureTacticsDat = setupDatAccess( "GcArmyCaptureTactics", xiv::exd::Language::none ); + m_GcArmyExpeditionDat = setupDatAccess( "GcArmyExpedition", xiv::exd::Language::en ); + m_GcArmyExpeditionMemberBonusDat = setupDatAccess( "GcArmyExpeditionMemberBonus", xiv::exd::Language::none ); + m_GcArmyExpeditionTypeDat = setupDatAccess( "GcArmyExpeditionType", xiv::exd::Language::en ); + m_GcArmyMemberGrowDat = setupDatAccess( "GcArmyMemberGrow", xiv::exd::Language::none ); + m_GcArmyTrainingDat = setupDatAccess( "GcArmyTraining", xiv::exd::Language::en ); + m_GCRankGridaniaFemaleTextDat = setupDatAccess( "GCRankGridaniaFemaleText", xiv::exd::Language::en ); + m_GCRankGridaniaMaleTextDat = setupDatAccess( "GCRankGridaniaMaleText", xiv::exd::Language::en ); + m_GCRankLimsaFemaleTextDat = setupDatAccess( "GCRankLimsaFemaleText", xiv::exd::Language::en ); + m_GCRankLimsaMaleTextDat = setupDatAccess( "GCRankLimsaMaleText", xiv::exd::Language::en ); + m_GCRankUldahFemaleTextDat = setupDatAccess( "GCRankUldahFemaleText", xiv::exd::Language::en ); + m_GCRankUldahMaleTextDat = setupDatAccess( "GCRankUldahMaleText", xiv::exd::Language::en ); + m_GCScripShopCategoryDat = setupDatAccess( "GCScripShopCategory", xiv::exd::Language::none ); + m_GCScripShopItemDat = setupDatAccess( "GCScripShopItem", xiv::exd::Language::none ); + m_GCShopDat = setupDatAccess( "GCShop", xiv::exd::Language::none ); + m_GCShopItemCategoryDat = setupDatAccess( "GCShopItemCategory", xiv::exd::Language::en ); + m_GCSupplyDutyDat = setupDatAccess( "GCSupplyDuty", xiv::exd::Language::none ); + m_GCSupplyDutyRewardDat = setupDatAccess( "GCSupplyDutyReward", xiv::exd::Language::none ); + m_GeneralActionDat = setupDatAccess( "GeneralAction", xiv::exd::Language::en ); + m_GFATEDat = setupDatAccess( "GFATE", xiv::exd::Language::none ); + m_GFateClimbing2Dat = setupDatAccess( "GFateClimbing2", xiv::exd::Language::none ); + m_GFateClimbing2ContentDat = setupDatAccess( "GFateClimbing2Content", xiv::exd::Language::none ); + m_GFateClimbing2TotemTypeDat = setupDatAccess( "GFateClimbing2TotemType", xiv::exd::Language::none ); + m_GFateRideShootingDat = setupDatAccess( "GFateRideShooting", xiv::exd::Language::none ); + m_GilShopDat = setupDatAccess( "GilShop", xiv::exd::Language::en ); + m_GilShopItemDat = setupDatAccess( "GilShopItem", xiv::exd::Language::none ); + m_GimmickAccessorDat = setupDatAccess( "GimmickAccessor", xiv::exd::Language::none ); + m_GimmickJumpDat = setupDatAccess( "GimmickJump", xiv::exd::Language::none ); + m_GimmickRectDat = setupDatAccess( "GimmickRect", xiv::exd::Language::none ); + m_GoldSaucerArcadeMachineDat = setupDatAccess( "GoldSaucerArcadeMachine", xiv::exd::Language::en ); + m_GoldSaucerTextDataDat = setupDatAccess( "GoldSaucerTextData", xiv::exd::Language::en ); + m_GrandCompanyDat = setupDatAccess( "GrandCompany", xiv::exd::Language::en ); + m_GrandCompanyRankDat = setupDatAccess( "GrandCompanyRank", xiv::exd::Language::none ); + m_GroupPoseFrameDat = setupDatAccess( "GroupPoseFrame", xiv::exd::Language::en ); + m_GroupPoseStampDat = setupDatAccess( "GroupPoseStamp", xiv::exd::Language::en ); + m_GroupPoseStampCategoryDat = setupDatAccess( "GroupPoseStampCategory", xiv::exd::Language::en ); + m_GuardianDeityDat = setupDatAccess( "GuardianDeity", xiv::exd::Language::en ); + m_GuideDat = setupDatAccess( "Guide", xiv::exd::Language::none ); + m_GuidePageDat = setupDatAccess( "GuidePage", xiv::exd::Language::none ); + m_GuidePageStringDat = setupDatAccess( "GuidePageString", xiv::exd::Language::en ); + m_GuideTitleDat = setupDatAccess( "GuideTitle", xiv::exd::Language::en ); + m_GuildleveAssignmentDat = setupDatAccess( "GuildleveAssignment", xiv::exd::Language::en ); + m_GuildleveAssignmentCategoryDat = setupDatAccess( "GuildleveAssignmentCategory", xiv::exd::Language::none ); + m_GuildOrderDat = setupDatAccess( "GuildOrder", xiv::exd::Language::en ); + m_GuildOrderGuideDat = setupDatAccess( "GuildOrderGuide", xiv::exd::Language::none ); + m_GuildOrderOfficerDat = setupDatAccess( "GuildOrderOfficer", xiv::exd::Language::none ); + m_HairMakeTypeDat = setupDatAccess( "HairMakeType", xiv::exd::Language::none ); + m_HouseRetainerPoseDat = setupDatAccess( "HouseRetainerPose", xiv::exd::Language::none ); + m_HousingAethernetDat = setupDatAccess( "HousingAethernet", xiv::exd::Language::none ); + m_HousingAppealDat = setupDatAccess( "HousingAppeal", xiv::exd::Language::en ); + m_HousingEmploymentNpcListDat = setupDatAccess( "HousingEmploymentNpcList", xiv::exd::Language::none ); + m_HousingEmploymentNpcRaceDat = setupDatAccess( "HousingEmploymentNpcRace", xiv::exd::Language::en ); + m_HousingExteriorDat = setupDatAccess( "HousingExterior", xiv::exd::Language::none ); + m_HousingFurnitureDat = setupDatAccess( "HousingFurniture", xiv::exd::Language::none ); + m_HousingLandSetDat = setupDatAccess( "HousingLandSet", xiv::exd::Language::none ); + m_HousingMapMarkerInfoDat = setupDatAccess( "HousingMapMarkerInfo", xiv::exd::Language::none ); + m_HousingMerchantPoseDat = setupDatAccess( "HousingMerchantPose", xiv::exd::Language::en ); + m_HousingPlacementDat = setupDatAccess( "HousingPlacement", xiv::exd::Language::en ); + m_HousingPresetDat = setupDatAccess( "HousingPreset", xiv::exd::Language::en ); + m_HousingUnitedExteriorDat = setupDatAccess( "HousingUnitedExterior", xiv::exd::Language::none ); + m_HousingYardObjectDat = setupDatAccess( "HousingYardObject", xiv::exd::Language::none ); + m_HowToDat = setupDatAccess( "HowTo", xiv::exd::Language::en ); + m_HowToCategoryDat = setupDatAccess( "HowToCategory", xiv::exd::Language::en ); + m_HowToPageDat = setupDatAccess( "HowToPage", xiv::exd::Language::en ); + m_HugeCraftworksNpcDat = setupDatAccess( "HugeCraftworksNpc", xiv::exd::Language::en ); + m_HugeCraftworksRankDat = setupDatAccess( "HugeCraftworksRank", xiv::exd::Language::none ); + m_HWDAnnounceDat = setupDatAccess( "HWDAnnounce", xiv::exd::Language::en ); + m_HWDCrafterSupplyDat = setupDatAccess( "HWDCrafterSupply", xiv::exd::Language::none ); + m_HWDCrafterSupplyRewardDat = setupDatAccess( "HWDCrafterSupplyReward", xiv::exd::Language::none ); + m_HWDDevLayerControlDat = setupDatAccess( "HWDDevLayerControl", xiv::exd::Language::none ); + m_HWDDevLevelUIDat = setupDatAccess( "HWDDevLevelUI", xiv::exd::Language::none ); + m_HWDDevLivelyDat = setupDatAccess( "HWDDevLively", xiv::exd::Language::none ); + m_HWDDevProgressDat = setupDatAccess( "HWDDevProgress", xiv::exd::Language::none ); + m_HWDGathereInspectTermDat = setupDatAccess( "HWDGathereInspectTerm", xiv::exd::Language::en ); + m_HWDGathererInspectionDat = setupDatAccess( "HWDGathererInspection", xiv::exd::Language::none ); + m_HWDGathererInspectionRewardDat = setupDatAccess( "HWDGathererInspectionReward", xiv::exd::Language::none ); + m_HWDInfoBoardArticleDat = setupDatAccess( "HWDInfoBoardArticle", xiv::exd::Language::en ); + m_HWDInfoBoardArticleTransientDat = setupDatAccess( "HWDInfoBoardArticleTransient", xiv::exd::Language::en ); + m_HWDInfoBoardArticleTypeDat = setupDatAccess( "HWDInfoBoardArticleType", xiv::exd::Language::en ); + m_HWDLevelChangeDeceptionDat = setupDatAccess( "HWDLevelChangeDeception", xiv::exd::Language::none ); + m_HWDSharedGroupDat = setupDatAccess( "HWDSharedGroup", xiv::exd::Language::none ); + m_HWDSharedGroupControlParamDat = setupDatAccess( "HWDSharedGroupControlParam", xiv::exd::Language::none ); + m_IKDContentBonusDat = setupDatAccess( "IKDContentBonus", xiv::exd::Language::en ); + m_IKDFishParamDat = setupDatAccess( "IKDFishParam", xiv::exd::Language::none ); + m_IKDRouteDat = setupDatAccess( "IKDRoute", xiv::exd::Language::en ); + m_IKDRouteTableDat = setupDatAccess( "IKDRouteTable", xiv::exd::Language::none ); + m_IKDSpotDat = setupDatAccess( "IKDSpot", xiv::exd::Language::none ); + m_InclusionShopDat = setupDatAccess( "InclusionShop", xiv::exd::Language::en ); + m_InclusionShopCategoryDat = setupDatAccess( "InclusionShopCategory", xiv::exd::Language::en ); + m_InclusionShopSeriesDat = setupDatAccess( "InclusionShopSeries", xiv::exd::Language::none ); + m_IndividualWeatherDat = setupDatAccess( "IndividualWeather", xiv::exd::Language::none ); + m_InstanceContentDat = setupDatAccess( "InstanceContent", xiv::exd::Language::none ); + m_InstanceContentBuffDat = setupDatAccess( "InstanceContentBuff", xiv::exd::Language::none ); + m_InstanceContentCSBonusDat = setupDatAccess( "InstanceContentCSBonus", xiv::exd::Language::none ); + m_InstanceContentGuideDat = setupDatAccess( "InstanceContentGuide", xiv::exd::Language::none ); + m_InstanceContentTextDataDat = setupDatAccess( "InstanceContentTextData", xiv::exd::Language::en ); + m_ItemDat = setupDatAccess( "Item", xiv::exd::Language::en ); + m_ItemActionDat = setupDatAccess( "ItemAction", xiv::exd::Language::none ); + m_ItemActionTelepoDat = setupDatAccess( "ItemActionTelepo", xiv::exd::Language::none ); + m_ItemBarterCheckDat = setupDatAccess( "ItemBarterCheck", xiv::exd::Language::none ); + m_ItemFoodDat = setupDatAccess( "ItemFood", xiv::exd::Language::none ); + m_ItemLevelDat = setupDatAccess( "ItemLevel", xiv::exd::Language::none ); + m_ItemSearchCategoryDat = setupDatAccess( "ItemSearchCategory", xiv::exd::Language::en ); + m_ItemSeriesDat = setupDatAccess( "ItemSeries", xiv::exd::Language::en ); + m_ItemSortCategoryDat = setupDatAccess( "ItemSortCategory", xiv::exd::Language::none ); + m_ItemSpecialBonusDat = setupDatAccess( "ItemSpecialBonus", xiv::exd::Language::en ); + m_ItemUICategoryDat = setupDatAccess( "ItemUICategory", xiv::exd::Language::en ); + m_JobHudManualDat = setupDatAccess( "JobHudManual", xiv::exd::Language::none ); + m_JobHudManualPriorityDat = setupDatAccess( "JobHudManualPriority", xiv::exd::Language::none ); + m_JournalCategoryDat = setupDatAccess( "JournalCategory", xiv::exd::Language::en ); + m_JournalGenreDat = setupDatAccess( "JournalGenre", xiv::exd::Language::en ); + m_JournalSectionDat = setupDatAccess( "JournalSection", xiv::exd::Language::en ); + m_KnockbackDat = setupDatAccess( "Knockback", xiv::exd::Language::none ); + m_LegacyQuestDat = setupDatAccess( "LegacyQuest", xiv::exd::Language::en ); + m_LeveDat = setupDatAccess( "Leve", xiv::exd::Language::en ); + m_LeveAssignmentTypeDat = setupDatAccess( "LeveAssignmentType", xiv::exd::Language::en ); + m_LeveClientDat = setupDatAccess( "LeveClient", xiv::exd::Language::en ); + m_LevelDat = setupDatAccess( "Level", xiv::exd::Language::none ); + m_LeveRewardItemDat = setupDatAccess( "LeveRewardItem", xiv::exd::Language::none ); + m_LeveRewardItemGroupDat = setupDatAccess( "LeveRewardItemGroup", xiv::exd::Language::none ); + m_LeveStringDat = setupDatAccess( "LeveString", xiv::exd::Language::en ); + m_LeveVfxDat = setupDatAccess( "LeveVfx", xiv::exd::Language::none ); + m_LobbyDat = setupDatAccess( "Lobby", xiv::exd::Language::en ); + m_LogFilterDat = setupDatAccess( "LogFilter", xiv::exd::Language::en ); + m_LogKindDat = setupDatAccess( "LogKind", xiv::exd::Language::en ); + m_LogMessageDat = setupDatAccess( "LogMessage", xiv::exd::Language::en ); + m_LotteryExchangeShopDat = setupDatAccess( "LotteryExchangeShop", xiv::exd::Language::en ); + m_MacroIconDat = setupDatAccess( "MacroIcon", xiv::exd::Language::none ); + m_MacroIconRedirectOldDat = setupDatAccess( "MacroIconRedirectOld", xiv::exd::Language::none ); + m_MainCommandDat = setupDatAccess( "MainCommand", xiv::exd::Language::en ); + m_MainCommandCategoryDat = setupDatAccess( "MainCommandCategory", xiv::exd::Language::en ); + m_ManeuversArmorDat = setupDatAccess( "ManeuversArmor", xiv::exd::Language::en ); + m_MapDat = setupDatAccess( "Map", xiv::exd::Language::none ); + m_MapMarkerDat = setupDatAccess( "MapMarker", xiv::exd::Language::none ); + m_MapMarkerRegionDat = setupDatAccess( "MapMarkerRegion", xiv::exd::Language::none ); + m_MapSymbolDat = setupDatAccess( "MapSymbol", xiv::exd::Language::none ); + m_MarkerDat = setupDatAccess( "Marker", xiv::exd::Language::en ); + m_MasterpieceSupplyDutyDat = setupDatAccess( "MasterpieceSupplyDuty", xiv::exd::Language::none ); + m_MasterpieceSupplyMultiplierDat = setupDatAccess( "MasterpieceSupplyMultiplier", xiv::exd::Language::none ); + m_MateriaDat = setupDatAccess( "Materia", xiv::exd::Language::none ); + m_MateriaJoinRateDat = setupDatAccess( "MateriaJoinRate", xiv::exd::Language::none ); + m_MateriaJoinRateGatherCraftDat = setupDatAccess( "MateriaJoinRateGatherCraft", xiv::exd::Language::none ); + m_MateriaTomestoneRateDat = setupDatAccess( "MateriaTomestoneRate", xiv::exd::Language::none ); + m_MiniGameRADat = setupDatAccess( "MiniGameRA", xiv::exd::Language::none ); + m_MinionRaceDat = setupDatAccess( "MinionRace", xiv::exd::Language::en ); + m_MinionRulesDat = setupDatAccess( "MinionRules", xiv::exd::Language::en ); + m_MinionSkillTypeDat = setupDatAccess( "MinionSkillType", xiv::exd::Language::en ); + m_MobHuntOrderDat = setupDatAccess( "MobHuntOrder", xiv::exd::Language::none ); + m_MobHuntOrderTypeDat = setupDatAccess( "MobHuntOrderType", xiv::exd::Language::none ); + m_MobHuntRewardDat = setupDatAccess( "MobHuntReward", xiv::exd::Language::none ); + m_MobHuntRewardCapDat = setupDatAccess( "MobHuntRewardCap", xiv::exd::Language::none ); + m_MobHuntTargetDat = setupDatAccess( "MobHuntTarget", xiv::exd::Language::none ); + m_ModelCharaDat = setupDatAccess( "ModelChara", xiv::exd::Language::none ); + m_ModelSkeletonDat = setupDatAccess( "ModelSkeleton", xiv::exd::Language::none ); + m_ModelStateDat = setupDatAccess( "ModelState", xiv::exd::Language::none ); + m_MonsterNoteDat = setupDatAccess( "MonsterNote", xiv::exd::Language::en ); + m_MonsterNoteTargetDat = setupDatAccess( "MonsterNoteTarget", xiv::exd::Language::none ); + m_MotionTimelineDat = setupDatAccess( "MotionTimeline", xiv::exd::Language::none ); + m_MotionTimelineBlendTableDat = setupDatAccess( "MotionTimelineBlendTable", xiv::exd::Language::none ); + m_MountDat = setupDatAccess( "Mount", xiv::exd::Language::en ); + m_MountActionDat = setupDatAccess( "MountAction", xiv::exd::Language::none ); + m_MountCustomizeDat = setupDatAccess( "MountCustomize", xiv::exd::Language::none ); + m_MountFlyingConditionDat = setupDatAccess( "MountFlyingCondition", xiv::exd::Language::none ); + m_MountSpeedDat = setupDatAccess( "MountSpeed", xiv::exd::Language::none ); + m_MountTransientDat = setupDatAccess( "MountTransient", xiv::exd::Language::en ); + m_MoveTimelineDat = setupDatAccess( "MoveTimeline", xiv::exd::Language::none ); + m_MoveVfxDat = setupDatAccess( "MoveVfx", xiv::exd::Language::none ); + m_MovieSubtitleDat = setupDatAccess( "MovieSubtitle", xiv::exd::Language::en ); + m_MovieSubtitle500Dat = setupDatAccess( "MovieSubtitle500", xiv::exd::Language::en ); + m_MovieSubtitleVoyageDat = setupDatAccess( "MovieSubtitleVoyage", xiv::exd::Language::en ); + m_MYCTemporaryItemDat = setupDatAccess( "MYCTemporaryItem", xiv::exd::Language::none ); + m_MYCTemporaryItemUICategoryDat = setupDatAccess( "MYCTemporaryItemUICategory", xiv::exd::Language::en ); + m_MYCWarResultNotebookDat = setupDatAccess( "MYCWarResultNotebook", xiv::exd::Language::en ); + m_NotebookDivisionDat = setupDatAccess( "NotebookDivision", xiv::exd::Language::en ); + m_NotebookDivisionCategoryDat = setupDatAccess( "NotebookDivisionCategory", xiv::exd::Language::en ); + m_NotoriousMonsterDat = setupDatAccess( "NotoriousMonster", xiv::exd::Language::none ); + m_NpcEquipDat = setupDatAccess( "NpcEquip", xiv::exd::Language::none ); + m_NpcYellDat = setupDatAccess( "NpcYell", xiv::exd::Language::en ); + m_OmenDat = setupDatAccess( "Omen", xiv::exd::Language::none ); + m_OnlineStatusDat = setupDatAccess( "OnlineStatus", xiv::exd::Language::en ); + m_OpenContentDat = setupDatAccess( "OpenContent", xiv::exd::Language::none ); + m_OpenContentCandidateNameDat = setupDatAccess( "OpenContentCandidateName", xiv::exd::Language::en ); + m_OpeningDat = setupDatAccess( "Opening", xiv::exd::Language::none ); + m_OrchestrionDat = setupDatAccess( "Orchestrion", xiv::exd::Language::en ); + m_OrchestrionCategoryDat = setupDatAccess( "OrchestrionCategory", xiv::exd::Language::en ); + m_OrchestrionPathDat = setupDatAccess( "OrchestrionPath", xiv::exd::Language::none ); + m_OrchestrionUiparamDat = setupDatAccess( "OrchestrionUiparam", xiv::exd::Language::none ); + m_OrnamentDat = setupDatAccess( "Ornament", xiv::exd::Language::en ); + m_ParamGrowDat = setupDatAccess( "ParamGrow", xiv::exd::Language::none ); + m_PartyContentDat = setupDatAccess( "PartyContent", xiv::exd::Language::none ); + m_PartyContentCutsceneDat = setupDatAccess( "PartyContentCutscene", xiv::exd::Language::none ); + m_PartyContentTextDataDat = setupDatAccess( "PartyContentTextData", xiv::exd::Language::en ); + m_PatchMarkDat = setupDatAccess( "PatchMark", xiv::exd::Language::none ); + m_PerformDat = setupDatAccess( "Perform", xiv::exd::Language::en ); + m_PerformTransientDat = setupDatAccess( "PerformTransient", xiv::exd::Language::en ); + m_PetDat = setupDatAccess( "Pet", xiv::exd::Language::en ); + m_PetActionDat = setupDatAccess( "PetAction", xiv::exd::Language::en ); + m_PhysicsGroupDat = setupDatAccess( "PhysicsGroup", xiv::exd::Language::none ); + m_PhysicsWindDat = setupDatAccess( "PhysicsWind", xiv::exd::Language::none ); + m_PictureDat = setupDatAccess( "Picture", xiv::exd::Language::none ); + m_PlaceNameDat = setupDatAccess( "PlaceName", xiv::exd::Language::en ); + m_PlantPotFlowerSeedDat = setupDatAccess( "PlantPotFlowerSeed", xiv::exd::Language::none ); + m_PreHandlerDat = setupDatAccess( "PreHandler", xiv::exd::Language::en ); + m_PresetCameraDat = setupDatAccess( "PresetCamera", xiv::exd::Language::none ); + m_PresetCameraAdjustDat = setupDatAccess( "PresetCameraAdjust", xiv::exd::Language::none ); + m_PublicContentDat = setupDatAccess( "PublicContent", xiv::exd::Language::en ); + m_PublicContentCutsceneDat = setupDatAccess( "PublicContentCutscene", xiv::exd::Language::none ); + m_PublicContentTextDataDat = setupDatAccess( "PublicContentTextData", xiv::exd::Language::en ); + m_PurifyDat = setupDatAccess( "Purify", xiv::exd::Language::none ); + m_PvPActionDat = setupDatAccess( "PvPAction", xiv::exd::Language::none ); + m_PvPActionSortDat = setupDatAccess( "PvPActionSort", xiv::exd::Language::none ); + m_PvPRankDat = setupDatAccess( "PvPRank", xiv::exd::Language::none ); + m_PvPSelectTraitDat = setupDatAccess( "PvPSelectTrait", xiv::exd::Language::en ); + m_PvPTraitDat = setupDatAccess( "PvPTrait", xiv::exd::Language::none ); + m_QuestDat = setupDatAccess( "Quest", xiv::exd::Language::en ); + m_QuestBattleDat = setupDatAccess( "QuestBattle", xiv::exd::Language::none ); + m_QuestChapterDat = setupDatAccess( "QuestChapter", xiv::exd::Language::none ); + m_QuestClassJobRewardDat = setupDatAccess( "QuestClassJobReward", xiv::exd::Language::none ); + m_QuestClassJobSupplyDat = setupDatAccess( "QuestClassJobSupply", xiv::exd::Language::none ); + m_QuestDerivedClassDat = setupDatAccess( "QuestDerivedClass", xiv::exd::Language::none ); + m_QuestRedoDat = setupDatAccess( "QuestRedo", xiv::exd::Language::none ); + m_QuestRedoChapterUIDat = setupDatAccess( "QuestRedoChapterUI", xiv::exd::Language::en ); + m_QuestRedoChapterUICategoryDat = setupDatAccess( "QuestRedoChapterUICategory", xiv::exd::Language::en ); + m_QuestRedoChapterUITabDat = setupDatAccess( "QuestRedoChapterUITab", xiv::exd::Language::en ); + m_QuestRedoIncompChapterDat = setupDatAccess( "QuestRedoIncompChapter", xiv::exd::Language::none ); + m_QuestRepeatFlagDat = setupDatAccess( "QuestRepeatFlag", xiv::exd::Language::none ); + m_QuestRewardOtherDat = setupDatAccess( "QuestRewardOther", xiv::exd::Language::en ); + m_QuickChatDat = setupDatAccess( "QuickChat", xiv::exd::Language::en ); + m_QuickChatTransientDat = setupDatAccess( "QuickChatTransient", xiv::exd::Language::en ); + m_RaceDat = setupDatAccess( "Race", xiv::exd::Language::en ); + m_RacingChocoboItemDat = setupDatAccess( "RacingChocoboItem", xiv::exd::Language::none ); + m_RacingChocoboNameDat = setupDatAccess( "RacingChocoboName", xiv::exd::Language::en ); + m_RacingChocoboNameCategoryDat = setupDatAccess( "RacingChocoboNameCategory", xiv::exd::Language::en ); + m_RacingChocoboNameInfoDat = setupDatAccess( "RacingChocoboNameInfo", xiv::exd::Language::none ); + m_RacingChocoboParamDat = setupDatAccess( "RacingChocoboParam", xiv::exd::Language::en ); + m_RecastNavimeshDat = setupDatAccess( "RecastNavimesh", xiv::exd::Language::none ); + m_RecipeDat = setupDatAccess( "Recipe", xiv::exd::Language::none ); + m_RecipeLevelTableDat = setupDatAccess( "RecipeLevelTable", xiv::exd::Language::none ); + m_RecipeLookupDat = setupDatAccess( "RecipeLookup", xiv::exd::Language::none ); + m_RecipeNotebookListDat = setupDatAccess( "RecipeNotebookList", xiv::exd::Language::none ); + m_RecommendContentsDat = setupDatAccess( "RecommendContents", xiv::exd::Language::none ); + m_RelicDat = setupDatAccess( "Relic", xiv::exd::Language::none ); + m_Relic3Dat = setupDatAccess( "Relic3", xiv::exd::Language::none ); + m_RelicItemDat = setupDatAccess( "RelicItem", xiv::exd::Language::none ); + m_RelicNoteDat = setupDatAccess( "RelicNote", xiv::exd::Language::none ); + m_RelicNoteCategoryDat = setupDatAccess( "RelicNoteCategory", xiv::exd::Language::en ); + m_ResidentDat = setupDatAccess( "Resident", xiv::exd::Language::none ); + m_RetainerTaskDat = setupDatAccess( "RetainerTask", xiv::exd::Language::none ); + m_RetainerTaskLvRangeDat = setupDatAccess( "RetainerTaskLvRange", xiv::exd::Language::none ); + m_RetainerTaskNormalDat = setupDatAccess( "RetainerTaskNormal", xiv::exd::Language::none ); + m_RetainerTaskParameterDat = setupDatAccess( "RetainerTaskParameter", xiv::exd::Language::none ); + m_RetainerTaskRandomDat = setupDatAccess( "RetainerTaskRandom", xiv::exd::Language::en ); + m_RideShootingDat = setupDatAccess( "RideShooting", xiv::exd::Language::none ); + m_RideShootingTextDataDat = setupDatAccess( "RideShootingTextData", xiv::exd::Language::en ); + m_RPParameterDat = setupDatAccess( "RPParameter", xiv::exd::Language::none ); + m_SatisfactionArbitrationDat = setupDatAccess( "SatisfactionArbitration", xiv::exd::Language::none ); + m_SatisfactionNpcDat = setupDatAccess( "SatisfactionNpc", xiv::exd::Language::none ); + m_SatisfactionSupplyDat = setupDatAccess( "SatisfactionSupply", xiv::exd::Language::none ); + m_SatisfactionSupplyRewardDat = setupDatAccess( "SatisfactionSupplyReward", xiv::exd::Language::none ); + m_ScenarioTreeDat = setupDatAccess( "ScenarioTree", xiv::exd::Language::none ); + m_ScenarioTreeTipsDat = setupDatAccess( "ScenarioTreeTips", xiv::exd::Language::none ); + m_ScenarioTreeTipsClassQuestDat = setupDatAccess( "ScenarioTreeTipsClassQuest", xiv::exd::Language::none ); + m_ScenarioTypeDat = setupDatAccess( "ScenarioType", xiv::exd::Language::en ); + m_ScreenImageDat = setupDatAccess( "ScreenImage", xiv::exd::Language::none ); + m_SecretRecipeBookDat = setupDatAccess( "SecretRecipeBook", xiv::exd::Language::en ); + m_SkyIsland2MissionDat = setupDatAccess( "SkyIsland2Mission", xiv::exd::Language::en ); + m_SkyIsland2MissionDetailDat = setupDatAccess( "SkyIsland2MissionDetail", xiv::exd::Language::en ); + m_SkyIsland2MissionTypeDat = setupDatAccess( "SkyIsland2MissionType", xiv::exd::Language::none ); + m_SkyIsland2RangeTypeDat = setupDatAccess( "SkyIsland2RangeType", xiv::exd::Language::none ); + m_SnipeTalkDat = setupDatAccess( "SnipeTalk", xiv::exd::Language::en ); + m_SnipeTalkNameDat = setupDatAccess( "SnipeTalkName", xiv::exd::Language::en ); + m_SpearfishingItemDat = setupDatAccess( "SpearfishingItem", xiv::exd::Language::en ); + m_SpearfishingNotebookDat = setupDatAccess( "SpearfishingNotebook", xiv::exd::Language::none ); + m_SpearfishingRecordPageDat = setupDatAccess( "SpearfishingRecordPage", xiv::exd::Language::none ); + m_SpecialShopDat = setupDatAccess( "SpecialShop", xiv::exd::Language::en ); + m_SpecialShopItemCategoryDat = setupDatAccess( "SpecialShopItemCategory", xiv::exd::Language::en ); + m_StainDat = setupDatAccess( "Stain", xiv::exd::Language::en ); + m_StainTransientDat = setupDatAccess( "StainTransient", xiv::exd::Language::none ); + m_StatusDat = setupDatAccess( "Status", xiv::exd::Language::en ); + m_StatusHitEffectDat = setupDatAccess( "StatusHitEffect", xiv::exd::Language::none ); + m_StatusLoopVFXDat = setupDatAccess( "StatusLoopVFX", xiv::exd::Language::none ); + m_StoryDat = setupDatAccess( "Story", xiv::exd::Language::none ); + m_SubmarineExplorationDat = setupDatAccess( "SubmarineExploration", xiv::exd::Language::en ); + m_SubmarineMapDat = setupDatAccess( "SubmarineMap", xiv::exd::Language::en ); + m_SubmarinePartDat = setupDatAccess( "SubmarinePart", xiv::exd::Language::none ); + m_SubmarineRankDat = setupDatAccess( "SubmarineRank", xiv::exd::Language::none ); + m_SwitchTalkDat = setupDatAccess( "SwitchTalk", xiv::exd::Language::none ); + m_SwitchTalkVariationDat = setupDatAccess( "SwitchTalkVariation", xiv::exd::Language::none ); + m_TerritoryTypeDat = setupDatAccess( "TerritoryType", xiv::exd::Language::none ); + m_TerritoryTypeTransientDat = setupDatAccess( "TerritoryTypeTransient", xiv::exd::Language::none ); + m_TextCommandDat = setupDatAccess( "TextCommand", xiv::exd::Language::en ); + m_TitleDat = setupDatAccess( "Title", xiv::exd::Language::en ); + m_TomestonesDat = setupDatAccess( "Tomestones", xiv::exd::Language::none ); + m_TomestonesItemDat = setupDatAccess( "TomestonesItem", xiv::exd::Language::none ); + m_TopicSelectDat = setupDatAccess( "TopicSelect", xiv::exd::Language::en ); + m_TownDat = setupDatAccess( "Town", xiv::exd::Language::en ); + m_TraitDat = setupDatAccess( "Trait", xiv::exd::Language::en ); + m_TraitRecastDat = setupDatAccess( "TraitRecast", xiv::exd::Language::none ); + m_TraitTransientDat = setupDatAccess( "TraitTransient", xiv::exd::Language::en ); + m_TransformationDat = setupDatAccess( "Transformation", xiv::exd::Language::none ); + m_TreasureDat = setupDatAccess( "Treasure", xiv::exd::Language::en ); + m_TreasureHuntRankDat = setupDatAccess( "TreasureHuntRank", xiv::exd::Language::none ); + m_TreasureModelDat = setupDatAccess( "TreasureModel", xiv::exd::Language::none ); + m_TreasureSpotDat = setupDatAccess( "TreasureSpot", xiv::exd::Language::none ); + m_TribeDat = setupDatAccess( "Tribe", xiv::exd::Language::en ); + m_TripleTriadDat = setupDatAccess( "TripleTriad", xiv::exd::Language::none ); + m_TripleTriadCardDat = setupDatAccess( "TripleTriadCard", xiv::exd::Language::en ); + m_TripleTriadCardRarityDat = setupDatAccess( "TripleTriadCardRarity", xiv::exd::Language::none ); + m_TripleTriadCardResidentDat = setupDatAccess( "TripleTriadCardResident", xiv::exd::Language::none ); + m_TripleTriadCardTypeDat = setupDatAccess( "TripleTriadCardType", xiv::exd::Language::en ); + m_TripleTriadCompetitionDat = setupDatAccess( "TripleTriadCompetition", xiv::exd::Language::en ); + m_TripleTriadRuleDat = setupDatAccess( "TripleTriadRule", xiv::exd::Language::en ); + m_TutorialDat = setupDatAccess( "Tutorial", xiv::exd::Language::none ); + m_TutorialDPSDat = setupDatAccess( "TutorialDPS", xiv::exd::Language::none ); + m_TutorialHealerDat = setupDatAccess( "TutorialHealer", xiv::exd::Language::none ); + m_TutorialTankDat = setupDatAccess( "TutorialTank", xiv::exd::Language::none ); + m_UIColorDat = setupDatAccess( "UIColor", xiv::exd::Language::none ); + m_VaseFlowerDat = setupDatAccess( "VaseFlower", xiv::exd::Language::none ); + m_VFXDat = setupDatAccess( "VFX", xiv::exd::Language::none ); + m_WarpDat = setupDatAccess( "Warp", xiv::exd::Language::en ); + m_WarpConditionDat = setupDatAccess( "WarpCondition", xiv::exd::Language::none ); + m_WarpLogicDat = setupDatAccess( "WarpLogic", xiv::exd::Language::en ); + m_WeaponTimelineDat = setupDatAccess( "WeaponTimeline", xiv::exd::Language::none ); + m_WeatherDat = setupDatAccess( "Weather", xiv::exd::Language::en ); + m_WeatherGroupDat = setupDatAccess( "WeatherGroup", xiv::exd::Language::none ); + m_WeatherRateDat = setupDatAccess( "WeatherRate", xiv::exd::Language::none ); + m_WeatherReportReplaceDat = setupDatAccess( "WeatherReportReplace", xiv::exd::Language::none ); + m_WeddingBGMDat = setupDatAccess( "WeddingBGM", xiv::exd::Language::en ); + m_WeeklyBingoOrderDataDat = setupDatAccess( "WeeklyBingoOrderData", xiv::exd::Language::none ); + m_WeeklyBingoRewardDataDat = setupDatAccess( "WeeklyBingoRewardData", xiv::exd::Language::none ); + m_WeeklyBingoTextDat = setupDatAccess( "WeeklyBingoText", xiv::exd::Language::en ); + m_WeeklyLotBonusDat = setupDatAccess( "WeeklyLotBonus", xiv::exd::Language::none ); + m_WorldDat = setupDatAccess( "World", xiv::exd::Language::none ); + m_WorldDCGroupTypeDat = setupDatAccess( "WorldDCGroupType", xiv::exd::Language::none ); + m_YardCatalogCategoryDat = setupDatAccess( "YardCatalogCategory", xiv::exd::Language::en ); + m_YardCatalogItemListDat = setupDatAccess( "YardCatalogItemList", xiv::exd::Language::none ); + m_YKWDat = setupDatAccess( "YKW", xiv::exd::Language::en ); + m_ZoneSharedGroupDat = setupDatAccess( "ZoneSharedGroup", xiv::exd::Language::none ); - } - catch( std::runtime_error ) - { - return false; - } + } + catch( std::runtime_error ) + { + return false; + } - return true; + return true; } /////////////////////////////////////////////////////////////// diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index 525c3bd3..78eaa037 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -13,13 +13,18 @@ #include #include -namespace Sapphire { -namespace Data { +#if _WIN32 +#undef near +#undef far +#endif + +namespace Sapphire::Data { class ExdDataGenerated; struct Achievement; struct AchievementCategory; +struct AchievementHideCondition; struct AchievementKind; struct Action; struct ActionCastTimeline; @@ -38,7 +43,6 @@ struct ActivityFeedCaptions; struct ActivityFeedGroupCaptions; struct ActivityFeedImages; struct Addon; -struct AddonHud; struct Adventure; struct AdventureExPhase; struct AetherCurrent; @@ -51,6 +55,7 @@ struct AirshipExplorationLog; struct AirshipExplorationParamType; struct AirshipExplorationPart; struct AirshipExplorationPoint; +struct AnimationLOD; struct AnimaWeapon5; struct AnimaWeapon5Param; struct AnimaWeapon5PatternGroup; @@ -72,15 +77,21 @@ struct AquariumWater; struct ArrayEventHandler; struct AttackType; struct BacklightColor; +struct Ballista; struct Balloon; struct BaseParam; struct BattleLeve; +struct BattleLeveRule; struct BeastRankBonus; struct BeastReputationRank; struct BeastTribe; struct Behavior; +struct BehaviorPath; +struct BenchmarkOverrideEquipment; struct BGM; struct BGMFade; +struct BGMFadeType; +struct BGMScene; struct BGMSituation; struct BGMSwitch; struct BGMSystemDefine; @@ -89,6 +100,7 @@ struct BNpcBase; struct BNpcCustomize; struct BNpcName; struct BNpcParts; +struct BNpcState; struct Buddy; struct BuddyAction; struct BuddyEquip; @@ -98,7 +110,11 @@ struct BuddySkill; struct Cabinet; struct CabinetCategory; struct Calendar; +struct Carry; +struct Channeling; +struct CharaMakeClassEquip; struct CharaMakeCustomize; +struct CharaMakeName; struct CharaMakeType; struct ChocoboRace; struct ChocoboRaceAbility; @@ -111,8 +127,15 @@ struct ChocoboRaceTutorial; struct ChocoboRaceWeather; struct ChocoboTaxi; struct ChocoboTaxiStand; +struct CircleActivity; struct ClassJob; struct ClassJobCategory; +struct CollectablesShop; +struct CollectablesShopItem; +struct CollectablesShopItemGroup; +struct CollectablesShopRefine; +struct CollectablesShopRewardItem; +struct CollectablesShopRewardScrip; struct Companion; struct CompanionMove; struct CompanionTransient; @@ -125,8 +148,12 @@ struct CompanyCraftProcess; struct CompanyCraftSequence; struct CompanyCraftSupplyItem; struct CompanyCraftType; +struct CompanyLeve; +struct CompanyLeveRule; struct CompleteJournal; struct CompleteJournalCategory; +struct Condition; +struct ConfigKey; struct ContentCloseCycle; struct ContentExAction; struct ContentFinderCondition; @@ -135,6 +162,7 @@ struct ContentGauge; struct ContentGaugeColor; struct ContentMemberType; struct ContentNpcTalk; +struct ContentRandomSelect; struct ContentRoulette; struct ContentRouletteOpenRule; struct ContentRouletteRoleBonus; @@ -144,17 +172,28 @@ struct ContentTalkParam; struct ContentType; struct CraftAction; struct CraftLeve; +struct CraftLevelDifference; struct CraftType; struct Credit; struct CreditBackImage; struct CreditCast; +struct CreditList; +struct CreditListText; struct Currency; struct CustomTalk; struct CustomTalkDynamicIcon; struct CustomTalkNestHandlers; struct Cutscene; +struct CutsceneMotion; +struct CutsceneWorkIndex; struct CutScreenImage; +struct CycleTime; struct DailySupplyItem; +struct DawnContent; +struct DawnGrowMember; +struct DawnMemberUIParam; +struct DawnQuestAnnounce; +struct DawnQuestMember; struct DeepDungeon; struct DeepDungeonBan; struct DeepDungeonDanger; @@ -169,7 +208,9 @@ struct DeepDungeonStatus; struct DefaultTalk; struct DefaultTalkLipSyncType; struct DeliveryQuest; +struct Description; struct DescriptionPage; +struct DescriptionSection; struct DescriptionString; struct DisposalShop; struct DisposalShopFilterType; @@ -177,10 +218,15 @@ struct DisposalShopItem; struct DpsChallenge; struct DpsChallengeOfficer; struct DpsChallengeTransient; +struct DynamicEvent; +struct DynamicEventEnemyType; +struct DynamicEventSingleBattle; +struct DynamicEventType; struct EmjAddon; struct EmjDani; struct Emote; struct EmoteCategory; +struct EmoteMode; struct ENpcBase; struct ENpcDressUp; struct ENpcDressUpDress; @@ -204,17 +250,24 @@ struct EventItem; struct EventItemCastTimeline; struct EventItemHelp; struct EventItemTimeline; +struct EventSystemDefine; struct ExportedSG; struct ExVersion; struct Fate; +struct FateEvent; +struct FateMode; +struct FateProgressUI; +struct FateTokenType; struct FCActivity; struct FCActivityCategory; struct FCAuthority; struct FCAuthorityCategory; struct FCChestName; +struct FCCrestSymbol; struct FccShop; struct FCHierarchy; struct FCProfile; +struct FCRank; struct FCReputation; struct FCRights; struct Festival; @@ -225,6 +278,8 @@ struct FishingSpot; struct FishParameter; struct Frontline03; struct Frontline04; +struct FurnitureCatalogCategory; +struct FurnitureCatalogItemList; struct GardeningSeed; struct GatheringCondition; struct GatheringExp; @@ -233,12 +288,15 @@ struct GatheringItemLevelConvertTable; struct GatheringItemPoint; struct GatheringLeve; struct GatheringLeveRoute; +struct GatheringLeveRule; struct GatheringNotebookList; struct GatheringPoint; struct GatheringPointBase; struct GatheringPointBonus; struct GatheringPointBonusType; struct GatheringPointName; +struct GatheringPointTransient; +struct GatheringRarePopTimeTable; struct GatheringSubCategory; struct GatheringType; struct GcArmyCaptureTactics; @@ -267,13 +325,24 @@ struct GFateClimbing2TotemType; struct GFateRideShooting; struct GilShop; struct GilShopItem; +struct GimmickAccessor; +struct GimmickJump; +struct GimmickRect; struct GoldSaucerArcadeMachine; struct GoldSaucerTextData; struct GrandCompany; struct GrandCompanyRank; +struct GroupPoseFrame; +struct GroupPoseStamp; +struct GroupPoseStampCategory; struct GuardianDeity; +struct Guide; +struct GuidePage; +struct GuidePageString; +struct GuideTitle; struct GuildleveAssignment; struct GuildleveAssignmentCategory; +struct GuildOrder; struct GuildOrderGuide; struct GuildOrderOfficer; struct HairMakeType; @@ -294,6 +363,33 @@ struct HousingYardObject; struct HowTo; struct HowToCategory; struct HowToPage; +struct HugeCraftworksNpc; +struct HugeCraftworksRank; +struct HWDAnnounce; +struct HWDCrafterSupply; +struct HWDCrafterSupplyReward; +struct HWDDevLayerControl; +struct HWDDevLevelUI; +struct HWDDevLively; +struct HWDDevProgress; +struct HWDGathereInspectTerm; +struct HWDGathererInspection; +struct HWDGathererInspectionReward; +struct HWDInfoBoardArticle; +struct HWDInfoBoardArticleTransient; +struct HWDInfoBoardArticleType; +struct HWDLevelChangeDeception; +struct HWDSharedGroup; +struct HWDSharedGroupControlParam; +struct IKDContentBonus; +struct IKDFishParam; +struct IKDRoute; +struct IKDRouteTable; +struct IKDSpot; +struct InclusionShop; +struct InclusionShopCategory; +struct InclusionShopSeries; +struct IndividualWeather; struct InstanceContent; struct InstanceContentBuff; struct InstanceContentCSBonus; @@ -301,25 +397,33 @@ struct InstanceContentGuide; struct InstanceContentTextData; struct Item; struct ItemAction; +struct ItemActionTelepo; +struct ItemBarterCheck; struct ItemFood; struct ItemLevel; struct ItemSearchCategory; struct ItemSeries; +struct ItemSortCategory; struct ItemSpecialBonus; struct ItemUICategory; +struct JobHudManual; +struct JobHudManualPriority; struct JournalCategory; struct JournalGenre; struct JournalSection; +struct Knockback; +struct LegacyQuest; struct Leve; struct LeveAssignmentType; struct LeveClient; struct Level; struct LeveRewardItem; struct LeveRewardItemGroup; +struct LeveString; struct LeveVfx; +struct Lobby; struct LogFilter; struct LogKind; -struct LogKindCategoryText; struct LogMessage; struct LotteryExchangeShop; struct MacroIcon; @@ -335,16 +439,25 @@ struct Marker; struct MasterpieceSupplyDuty; struct MasterpieceSupplyMultiplier; struct Materia; +struct MateriaJoinRate; +struct MateriaJoinRateGatherCraft; +struct MateriaTomestoneRate; struct MiniGameRA; struct MinionRace; struct MinionRules; struct MinionSkillType; +struct MobHuntOrder; struct MobHuntOrderType; +struct MobHuntReward; +struct MobHuntRewardCap; struct MobHuntTarget; struct ModelChara; +struct ModelSkeleton; struct ModelState; struct MonsterNote; struct MonsterNoteTarget; +struct MotionTimeline; +struct MotionTimelineBlendTable; struct Mount; struct MountAction; struct MountCustomize; @@ -353,30 +466,48 @@ struct MountSpeed; struct MountTransient; struct MoveTimeline; struct MoveVfx; +struct MovieSubtitle; +struct MovieSubtitle500; +struct MovieSubtitleVoyage; +struct MYCTemporaryItem; +struct MYCTemporaryItemUICategory; +struct MYCWarResultNotebook; +struct NotebookDivision; +struct NotebookDivisionCategory; +struct NotoriousMonster; struct NpcEquip; struct NpcYell; struct Omen; struct OnlineStatus; +struct OpenContent; +struct OpenContentCandidateName; struct Opening; struct Orchestrion; struct OrchestrionCategory; struct OrchestrionPath; struct OrchestrionUiparam; +struct Ornament; struct ParamGrow; struct PartyContent; struct PartyContentCutscene; struct PartyContentTextData; +struct PatchMark; struct Perform; struct PerformTransient; struct Pet; struct PetAction; +struct PhysicsGroup; +struct PhysicsWind; struct Picture; struct PlaceName; struct PlantPotFlowerSeed; struct PreHandler; +struct PresetCamera; +struct PresetCameraAdjust; struct PublicContent; struct PublicContentCutscene; struct PublicContentTextData; +struct Purify; struct PvPAction; struct PvPActionSort; struct PvPRank; @@ -384,8 +515,15 @@ struct PvPSelectTrait; struct PvPTrait; struct Quest; struct QuestBattle; +struct QuestChapter; struct QuestClassJobReward; struct QuestClassJobSupply; +struct QuestDerivedClass; +struct QuestRedo; +struct QuestRedoChapterUI; +struct QuestRedoChapterUICategory; +struct QuestRedoChapterUITab; +struct QuestRedoIncompChapter; struct QuestRepeatFlag; struct QuestRewardOther; struct QuickChat; @@ -398,8 +536,8 @@ struct RacingChocoboNameInfo; struct RacingChocoboParam; struct RecastNavimesh; struct Recipe; -struct RecipeElement; struct RecipeLevelTable; +struct RecipeLookup; struct RecipeNotebookList; struct RecommendContents; struct Relic; @@ -413,15 +551,16 @@ struct RetainerTaskLvRange; struct RetainerTaskNormal; struct RetainerTaskParameter; struct RetainerTaskRandom; +struct RideShooting; +struct RideShootingTextData; struct RPParameter; -struct Salvage; +struct SatisfactionArbitration; struct SatisfactionNpc; struct SatisfactionSupply; struct SatisfactionSupplyReward; struct ScenarioTree; struct ScenarioTreeTips; struct ScenarioTreeTipsClassQuest; -struct ScenarioTreeTipsQuest; struct ScenarioType; struct ScreenImage; struct SecretRecipeBook; @@ -429,6 +568,8 @@ struct SkyIsland2Mission; struct SkyIsland2MissionDetail; struct SkyIsland2MissionType; struct SkyIsland2RangeType; +struct SnipeTalk; +struct SnipeTalkName; struct SpearfishingItem; struct SpearfishingNotebook; struct SpearfishingRecordPage; @@ -441,10 +582,13 @@ struct StatusHitEffect; struct StatusLoopVFX; struct Story; struct SubmarineExploration; +struct SubmarineMap; struct SubmarinePart; struct SubmarineRank; struct SwitchTalk; +struct SwitchTalkVariation; struct TerritoryType; +struct TerritoryTypeTransient; struct TextCommand; struct Title; struct Tomestones; @@ -457,6 +601,8 @@ struct TraitTransient; struct Transformation; struct Treasure; struct TreasureHuntRank; +struct TreasureModel; +struct TreasureSpot; struct Tribe; struct TripleTriad; struct TripleTriadCard; @@ -475,6 +621,7 @@ struct VFX; struct Warp; struct WarpCondition; struct WarpLogic; +struct WeaponTimeline; struct Weather; struct WeatherGroup; struct WeatherRate; @@ -486,2758 +633,3717 @@ struct WeeklyBingoText; struct WeeklyLotBonus; struct World; struct WorldDCGroupType; +struct YardCatalogCategory; +struct YardCatalogItemList; struct YKW; struct ZoneSharedGroup; struct Achievement { - uint8_t achievementCategory; - std::string name; - std::string description; - uint8_t points; - uint16_t title; - uint32_t item; - uint16_t icon; - uint8_t type; - int32_t key; - std::vector< int32_t > data; - uint16_t order; - bool initialHide; + uint8_t achievementCategory; + std::string name; + std::string description; + uint8_t points; + uint16_t title; + uint32_t item; + uint16_t icon; + uint8_t type; + int32_t key; + std::vector< int32_t > data; + uint16_t order; + uint8_t achievementHideCondition; - Achievement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Achievement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AchievementCategory { - std::string name; - uint8_t achievementKind; - bool hideCategory; + std::string name; + uint8_t achievementKind; + bool showComplete; + bool hideCategory; + uint8_t order; - AchievementCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AchievementCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct AchievementHideCondition +{ + bool hideAchievement; + bool hideName; + bool hideConditions; + + AchievementHideCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AchievementKind { - std::string name; + std::string name; + uint8_t order; - AchievementKind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AchievementKind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Action { - std::string name; - uint16_t icon; - uint8_t actionCategory; - uint8_t animationStart; - uint8_t vFX; - int16_t animationEnd; - uint16_t actionTimelineHit; - int8_t classJob; - uint8_t classJobLevel; - bool isRoleAction; - int8_t range; - bool canTargetSelf; - bool canTargetParty; - bool canTargetFriendly; - bool canTargetHostile; - bool targetArea; - bool canTargetDead; - uint8_t castType; - uint8_t effectRange; - uint8_t xAxisModifier; - uint8_t costType; - uint16_t cost; - uint16_t actionCombo; - bool preservesCombo; - uint16_t cast100ms; - uint16_t recast100ms; - uint8_t cooldownGroup; - int8_t attackType; - uint8_t aspect; - uint8_t actionProcStatus; - uint16_t statusGainSelf; - uint32_t unlockLink; - uint8_t classJobCategory; - bool affectsPosition; - uint8_t omen; - bool isPvP; - bool isPlayerAction; + std::string name; + uint16_t icon; + uint8_t actionCategory; + uint8_t animationStart; + uint8_t vFX; + int16_t animationEnd; + uint16_t actionTimelineHit; + int8_t classJob; + uint8_t behaviourType; + uint8_t classJobLevel; + bool isRoleAction; + int8_t range; + bool canTargetSelf; + bool canTargetParty; + bool canTargetFriendly; + bool canTargetHostile; + bool targetArea; + bool canTargetDead; + uint8_t castType; + uint8_t effectRange; + uint8_t xAxisModifier; + uint8_t primaryCostType; + uint16_t primaryCostValue; + uint8_t secondaryCostType; + uint16_t secondaryCostValue; + uint16_t actionCombo; + bool preservesCombo; + uint16_t cast100ms; + uint16_t recast100ms; + uint8_t cooldownGroup; + uint8_t maxCharges; + int8_t attackType; + uint8_t aspect; + uint8_t actionProcStatus; + uint16_t statusGainSelf; + uint32_t unlockLink; + uint8_t classJobCategory; + bool affectsPosition; + uint16_t omen; + bool isPvP; + bool isPlayerAction; - Action( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Action( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionCastTimeline { - uint16_t name; - uint16_t vFX; + uint16_t name; + uint16_t vFX; - ActionCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionCastVFX { - uint16_t vFX; + uint16_t vFX; - ActionCastVFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionCastVFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionCategory { - std::string name; + std::string name; - ActionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionComboRoute { - std::string name; - std::vector< uint16_t > action; + std::string name; + std::vector< uint16_t > action; - ActionComboRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionComboRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionIndirection { - int32_t name; + int32_t name; - ActionIndirection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionIndirection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionParam { - int16_t name; + int16_t name; - ActionParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionProcStatus { - uint16_t status; + uint16_t status; - ActionProcStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionProcStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionTimeline { - std::string key; + uint8_t type; + uint8_t priority; + bool pause; + uint8_t stance; + uint8_t slot; + uint8_t lookAtMode; + std::string key; + uint8_t actionTimelineIDMode; + uint8_t weaponTimeline; + uint8_t loadType; + uint8_t startAttach; + uint8_t residentPap; + bool resident; + uint16_t killUpper; + bool isMotionCanceledByMoving; + uint8_t isLoop; - ActionTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionTimelineMove { - ActionTimelineMove( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionTimelineMove( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionTimelineReplace { - uint16_t old; - uint16_t New; + uint16_t old; + uint16_t _new; - ActionTimelineReplace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionTimelineReplace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActionTransient { - std::string description; + std::string description; - ActionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActivityFeedButtons { - std::string bannerURL; - std::string description; - std::string language; - std::string pictureURL; + std::string bannerURL; + std::string description; + std::string language; + std::string pictureURL; - ActivityFeedButtons( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActivityFeedButtons( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActivityFeedCaptions { - std::string jA; - std::string eN; - std::string dE; - std::string fR; + std::string jA; + std::string eN; + std::string dE; + std::string fR; - ActivityFeedCaptions( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActivityFeedCaptions( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActivityFeedGroupCaptions { - std::string jA; - std::string eN; - std::string dE; - std::string fR; + std::string jA; + std::string eN; + std::string dE; + std::string fR; - ActivityFeedGroupCaptions( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActivityFeedGroupCaptions( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ActivityFeedImages { - std::string expansionImage; - std::string activityFeedJA; - std::string activityFeedEN; - std::string activityFeedDE; - std::string activityFeedFR; + std::string expansionImage; + std::string activityFeedJA; + std::string activityFeedEN; + std::string activityFeedDE; + std::string activityFeedFR; - ActivityFeedImages( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ActivityFeedImages( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Addon { - std::string text; + std::string text; - Addon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); -}; - -struct AddonHud -{ - std::string _long; - std::string _short; - std::string _function; - - AddonHud( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Addon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Adventure { - int32_t level; - uint16_t emote; - uint16_t minTime; - uint16_t maxTime; - int32_t placeName; - int32_t iconList; - int32_t iconDiscovered; - std::string name; - std::string impression; - std::string description; - int32_t iconUndiscovered; - bool isInitial; + int32_t level; + int32_t minLevel; + uint8_t maxLevel; + uint16_t emote; + uint16_t minTime; + uint16_t maxTime; + int32_t placeName; + int32_t iconList; + int32_t iconDiscovered; + std::string name; + std::string impression; + std::string description; + int32_t iconUndiscovered; + bool isInitial; - Adventure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Adventure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AdventureExPhase { - uint32_t quest; - uint32_t adventureBegin; - uint32_t adventureEnd; + uint32_t quest; + uint32_t adventureBegin; + uint32_t adventureEnd; - AdventureExPhase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AdventureExPhase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AetherCurrent { - uint32_t quest; + uint32_t quest; - AetherCurrent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AetherCurrent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AetherCurrentCompFlgSet { - int32_t territory; - std::vector< int32_t > aetherCurrent; + int32_t territory; + std::vector< int32_t > aetherCurrent; - AetherCurrentCompFlgSet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AetherCurrentCompFlgSet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AetherialWheel { - int32_t itemUnprimed; - int32_t itemPrimed; - uint8_t grade; - uint8_t hoursRequired; + int32_t itemUnprimed; + int32_t itemPrimed; + uint8_t grade; + uint8_t hoursRequired; - AetherialWheel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AetherialWheel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Aetheryte { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - uint16_t placeName; - uint16_t aethernetName; - uint16_t territory; - std::vector< uint32_t > level; - bool isAetheryte; - uint8_t aethernetGroup; - uint32_t requiredQuest; - uint16_t map; - int16_t aetherstreamX; - int16_t aetherstreamY; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + uint16_t placeName; + uint16_t aethernetName; + uint16_t territory; + std::vector< uint32_t > level; + bool isAetheryte; + uint8_t aethernetGroup; + uint32_t requiredQuest; + uint16_t map; + int16_t aetherstreamX; + int16_t aetherstreamY; - Aetheryte( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Aetheryte( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AetheryteSystemDefine { - std::string text; + std::string text; + uint32_t defineValue; - AetheryteSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AetheryteSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AirshipExplorationLevel { - uint32_t expToNext; + uint16_t capacity; + uint32_t expToNext; - AirshipExplorationLevel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AirshipExplorationLevel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AirshipExplorationLog { - std::string text; + std::string text; - AirshipExplorationLog( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AirshipExplorationLog( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AirshipExplorationParamType { - std::string name; + std::string name; - AirshipExplorationParamType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AirshipExplorationParamType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AirshipExplorationPart { - uint8_t rank; - uint8_t components; - int16_t surveillance; - int16_t retrieval; - int16_t speed; - int16_t range; - int16_t favor; - uint8_t repairMaterials; + uint8_t rank; + uint8_t components; + int16_t surveillance; + int16_t retrieval; + int16_t speed; + int16_t range; + int16_t favor; + uint8_t repairMaterials; - AirshipExplorationPart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AirshipExplorationPart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AirshipExplorationPoint { - std::string name; - std::string nameShort; - uint8_t requiredLevel; - uint16_t requiredFuel; - uint16_t durationmin; - uint8_t requiredSurveillance; - uint32_t expReward; + std::string name; + std::string nameShort; + uint8_t requiredLevel; + uint16_t requiredFuel; + uint16_t durationmin; + uint8_t requiredSurveillance; + uint32_t expReward; - AirshipExplorationPoint( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AirshipExplorationPoint( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct AnimationLOD +{ + float cameraDistance; + float sampleInterval; + int8_t boneLOD; + std::vector< bool > animationEnable; + + AnimationLOD( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeapon5 { - int32_t item; - uint8_t secondaryStatTotal; - std::vector< uint8_t > parameter; + int32_t item; + uint8_t secondaryStatTotal; + std::vector< uint8_t > parameter; - AnimaWeapon5( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeapon5( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeapon5Param { - uint8_t baseParam; - std::string name; + uint8_t baseParam; + std::string name; - AnimaWeapon5Param( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeapon5Param( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeapon5PatternGroup { - std::string name; + std::string name; - AnimaWeapon5PatternGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeapon5PatternGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeapon5SpiritTalk { - int32_t dialogue; + int32_t dialogue; - AnimaWeapon5SpiritTalk( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeapon5SpiritTalk( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeapon5SpiritTalkParam { - std::string prologue; - std::string epilogue; + std::string prologue; + std::string epilogue; - AnimaWeapon5SpiritTalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeapon5SpiritTalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeapon5TradeItem { - uint32_t crystalSand; - uint8_t qty; - uint8_t category; + uint32_t crystalSand; + uint8_t qty; + uint8_t category; - AnimaWeapon5TradeItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeapon5TradeItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeaponFUITalk { - int32_t dialogue; + int32_t dialogue; - AnimaWeaponFUITalk( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeaponFUITalk( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeaponFUITalkParam { - std::string prologue; - std::string epilogue; + std::string prologue; + std::string epilogue; - AnimaWeaponFUITalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeaponFUITalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeaponIcon { - int32_t hyperconductive; - int32_t reborn; - int32_t sharpened; - int32_t zodiac; - int32_t zodiacLux; + int32_t hyperconductive; + int32_t reborn; + int32_t sharpened; + int32_t zodiac; + int32_t zodiacLux; - AnimaWeaponIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeaponIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AnimaWeaponItem { - std::vector< uint32_t > item; + std::vector< uint32_t > item; - AnimaWeaponItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AnimaWeaponItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AozAction { - uint32_t action; + uint32_t action; - AozAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AozAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AozActionTransient { - uint32_t icon; - std::string stats; - std::string description; - uint16_t location; - uint32_t startQuest; - uint32_t nextQuest; + uint8_t number; + uint32_t icon; + std::string stats; + std::string description; + uint16_t location; + uint32_t startQuest; + uint32_t nextQuest; - AozActionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AozActionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AOZArrangement { - uint16_t aOZContentBriefingBNpc; + uint16_t aOZContentBriefingBNpc; - AOZArrangement( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + AOZArrangement( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AOZBoss { - uint16_t boss; + uint16_t boss; - AOZBoss( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AOZBoss( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AOZContent { - uint16_t standardFinishTime; - uint16_t idealFinishTime; - uint8_t act1FightType; - uint16_t act1; - uint8_t arenaType1; - uint8_t act2FightType; - uint16_t act2; - uint8_t arenaType2; - uint8_t act3FightType; - uint16_t act3; - uint8_t arenaType3; - uint32_t contentEntry; - uint8_t order; - uint16_t gilReward; - uint16_t alliedSealsReward; - uint16_t tomestonesReward; + uint16_t standardFinishTime; + uint16_t idealFinishTime; + uint8_t act1FightType; + uint16_t act1; + uint8_t arenaType1; + uint8_t act2FightType; + uint16_t act2; + uint8_t arenaType2; + uint8_t act3FightType; + uint16_t act3; + uint8_t arenaType3; + uint32_t contentEntry; + uint8_t order; + uint16_t gilReward; + uint16_t alliedSealsReward; + uint16_t tomestonesReward; - AOZContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AOZContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AOZContentBriefingBNpc { - uint32_t bNpcName; - uint32_t targetSmall; - uint32_t targetLarge; - uint8_t endurance; - uint8_t fire; - uint8_t ice; - uint8_t wind; - uint8_t earth; - uint8_t thunder; - uint8_t water; - uint8_t slashing; - uint8_t piercing; - uint8_t blunt; - uint8_t magic; - bool slowResistance; - bool petrificationResistance; - bool paralysisResistance; - bool silenceResistance; - bool blindResistance; - bool stunResistance; - bool sleepResistance; - bool bindResistance; - bool heavyResistance; - bool instaDeathResistance; + uint32_t bNpcName; + uint32_t targetSmall; + uint32_t targetLarge; + uint8_t endurance; + uint8_t fire; + uint8_t ice; + uint8_t wind; + uint8_t earth; + uint8_t thunder; + uint8_t water; + uint8_t slashing; + uint8_t piercing; + uint8_t blunt; + uint8_t magic; + bool slowResistance; + bool petrificationResistance; + bool paralysisResistance; + bool silenceResistance; + bool blindResistance; + bool stunResistance; + bool sleepResistance; + bool bindResistance; + bool heavyResistance; + bool instaDeathResistance; - AOZContentBriefingBNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AOZContentBriefingBNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AquariumFish { - uint8_t aquariumWater; - uint8_t size; - uint32_t item; + uint8_t aquariumWater; + uint8_t size; + uint32_t item; - AquariumFish( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AquariumFish( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AquariumWater { - std::string name; + std::string name; - AquariumWater( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AquariumWater( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ArrayEventHandler { - std::vector< uint32_t > data; + std::vector< uint32_t > data; - ArrayEventHandler( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ArrayEventHandler( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct AttackType { - std::string name; + std::string name; - AttackType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + AttackType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BacklightColor { - uint32_t color; + uint32_t color; - BacklightColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BacklightColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Ballista +{ + uint16_t bNPC; + int8_t near; + int8_t far; + uint16_t angle; + uint8_t bullet; + uint16_t action0; + uint16_t action1; + uint16_t action2; + uint16_t action3; + + Ballista( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Balloon { - std::string dialogue; + bool slowly; + std::string dialogue; - Balloon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Balloon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BaseParam { - int8_t order; - std::string name; - std::string description; - uint8_t oneHWpn; - uint8_t oH; - uint8_t head; - uint8_t chest; - uint8_t hands; - uint8_t waist; - uint8_t legs; - uint8_t feet; - uint8_t earring; - uint8_t necklace; - uint8_t bracelet; - uint8_t ring; - uint8_t twoHWpn; - uint8_t chestHead; - uint8_t chestHeadLegsFeet; - uint8_t legsFeet; - uint8_t headChestHandsLegsFeet; - uint8_t chestLegsGloves; - uint8_t chestLegsFeet; + int8_t packetIndex; + std::string name; + std::string description; + uint8_t orderPriority; + uint8_t oneHWpn; + uint8_t oH; + uint8_t head; + uint8_t chest; + uint8_t hands; + uint8_t waist; + uint8_t legs; + uint8_t feet; + uint8_t earring; + uint8_t necklace; + uint8_t bracelet; + uint8_t ring; + uint8_t twoHWpn; + uint8_t underArmor; + uint8_t chestHead; + uint8_t chestHeadLegsFeet; + uint8_t legsFeet; + uint8_t headChestHandsLegsFeet; + uint8_t chestLegsGloves; + uint8_t chestLegsFeet; + std::vector< uint8_t > meldParam; - BaseParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BaseParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BattleLeve { - std::vector< uint16_t > enemyLevel; - std::vector< uint32_t > bNpcName; - std::vector< int32_t > itemsInvolved; - std::vector< uint8_t > itemsInvolvedQty; - std::vector< uint8_t > itemDropRate; + std::vector< uint16_t > time; + std::vector< int32_t > baseID; + std::vector< uint16_t > enemyLevel; + std::vector< uint32_t > bNpcName; + std::vector< int32_t > itemsInvolved; + std::vector< uint8_t > itemsInvolvedQty; + std::vector< uint8_t > itemDropRate; + std::vector< uint32_t > toDoNumberInvolved; + std::vector< uint8_t > toDoSequence; + int32_t rule; + uint8_t varient; + uint16_t objective0; + uint16_t objective1; + uint16_t objective2; + uint16_t help0; + uint16_t help1; - BattleLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BattleLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct BattleLeveRule +{ + std::string rule; + + BattleLeveRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BeastRankBonus { - uint32_t item; - std::vector< uint8_t > itemQuantity; + uint16_t neutral; + uint16_t recognized; + uint16_t friendly; + uint16_t trusted; + uint16_t respected; + uint16_t honored; + uint16_t sworn; + uint16_t alliedBloodsworn; + uint32_t item; + std::vector< uint8_t > itemQuantity; - BeastRankBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BeastRankBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BeastReputationRank { - uint16_t requiredReputation; - std::string name; + uint16_t requiredReputation; + std::string name; + std::string alliedNames; + uint32_t color; - BeastReputationRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BeastReputationRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BeastTribe { - uint8_t minLevel; - uint8_t maxLevel; - uint8_t beastRankBonus; - uint32_t iconReputation; - uint32_t icon; - uint8_t maxRank; - uint32_t alliedBeastTribeQuest; - uint8_t expansion; - uint32_t currencyItem; - uint8_t displayOrder; - std::string name; - std::string nameRelation; + uint8_t minLevel; + uint8_t beastRankBonus; + uint32_t iconReputation; + uint32_t icon; + uint8_t maxRank; + uint8_t expansion; + uint32_t currencyItem; + uint8_t displayOrder; + std::string name; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + int8_t dEF; + std::string nameRelation; - BeastTribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BeastTribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Behavior { - uint16_t balloon; + uint8_t condition0Target; + uint8_t condition0Type; + int32_t balloon; + uint8_t condition1Target; + uint8_t condition1Type; + uint32_t contentArgument0; + uint8_t contentArgument1; - Behavior( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + Behavior( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct BehaviorPath +{ + bool isTurnTransition; + bool isFadeOut; + bool isFadeIn; + bool isWalking; + float speed; + + BehaviorPath( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct BenchmarkOverrideEquipment +{ + uint64_t modelMainHand; + uint8_t dyeMainHand; + uint64_t modelOffHand; + uint8_t dyeOffHand; + uint32_t modelHead; + uint8_t dyeHead; + uint32_t modelBody; + uint8_t dyeBody; + uint32_t modelHands; + uint8_t dyeHands; + uint32_t modelLegs; + uint8_t dyeLegs; + uint32_t modelFeet; + uint8_t dyeFeet; + uint32_t modelEars; + uint8_t dyeEars; + uint32_t modelNeck; + uint8_t dyeNeck; + uint32_t modelWrists; + uint8_t dyeWrists; + uint32_t modelLeftRing; + uint8_t dyeLeftRing; + uint32_t modelRightRing; + uint8_t dyeRightRing; + + BenchmarkOverrideEquipment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BGM { - std::string file; + std::string file; + uint8_t priority; + bool disableRestartTimeOut; + bool disableRestart; + bool passEnd; + float disableRestartResetTime; + uint8_t specialMode; - BGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BGMFade { - int32_t bGMFadeType; + int32_t sceneOut; + int32_t sceneIn; + int32_t bGMFadeType; - BGMFade( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BGMFade( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct BGMFadeType +{ + float fadeOutTime; + float fadeInTime; + float fadeInStartTime; + float resumeFadeInTime; + + BGMFadeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct BGMScene +{ + bool enableDisableRestart; + bool resume; + bool enablePassEnd; + bool forceAutoReset; + bool ignoreBattle; + + BGMScene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BGMSituation { - uint16_t bGMDay; - uint16_t bGMNight; - uint16_t bGMBattle; - uint16_t bGMField; + uint16_t daytimeID; + uint16_t nightID; + uint16_t battleID; + uint16_t daybreakID; + uint16_t twilightID; - BGMSituation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BGMSituation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BGMSwitch { - uint8_t bGMSystemDefine; - uint32_t quest; + uint8_t bGMSystemDefine; + uint32_t quest; + uint16_t bGM; - BGMSwitch( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + BGMSwitch( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BGMSystemDefine { - float define; + float define; - BGMSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BGMSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BNpcAnnounceIcon { - uint32_t icon; + uint32_t icon; - BNpcAnnounceIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BNpcAnnounceIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BNpcBase { - uint16_t behavior; - uint8_t actionTimelineMove; - float scale; - uint16_t modelChara; - uint16_t bNpcCustomize; - uint16_t npcEquip; - int32_t arrayEventHandler; - uint8_t bNpcParts; + uint16_t behavior; + uint8_t battalion; + uint8_t linkRace; + uint8_t rank; + float scale; + uint16_t modelChara; + uint16_t bNpcCustomize; + uint16_t npcEquip; + uint16_t special; + uint8_t sEPack; + int32_t arrayEventHandler; + uint8_t bNpcParts; + bool isTargetLine; + bool isDisplayLevel; - BNpcBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BNpcBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BNpcCustomize { - uint8_t race; - uint8_t gender; - uint8_t bodyType; - uint8_t height; - uint8_t tribe; - uint8_t face; - uint8_t hairStyle; - uint8_t hairHighlight; - uint8_t skinColor; - uint8_t eyeHeterochromia; - uint8_t hairColor; - uint8_t hairHighlightColor; - uint8_t facialFeature; - uint8_t facialFeatureColor; - uint8_t eyebrows; - uint8_t eyeColor; - uint8_t eyeShape; - uint8_t nose; - uint8_t jaw; - uint8_t mouth; - uint8_t lipColor; - uint8_t bustOrTone1; - uint8_t extraFeature1; - uint8_t extraFeature2OrBust; - uint8_t facePaint; - uint8_t facePaintColor; + uint8_t race; + uint8_t gender; + uint8_t bodyType; + uint8_t height; + uint8_t tribe; + uint8_t face; + uint8_t hairStyle; + uint8_t hairHighlight; + uint8_t skinColor; + uint8_t eyeHeterochromia; + uint8_t hairColor; + uint8_t hairHighlightColor; + uint8_t facialFeature; + uint8_t facialFeatureColor; + uint8_t eyebrows; + uint8_t eyeColor; + uint8_t eyeShape; + uint8_t nose; + uint8_t jaw; + uint8_t mouth; + uint8_t lipColor; + uint8_t bustOrTone1; + uint8_t extraFeature1; + uint8_t extraFeature2OrBust; + uint8_t facePaint; + uint8_t facePaintColor; - BNpcCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BNpcCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BNpcName { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; - BNpcName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BNpcName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BNpcParts { - uint16_t bNpcBase1; - uint8_t partSlot1; - float x1; - float y1; - float z1; - float scale1; - uint16_t bNpcBase2; - uint8_t partSlot2; - float x2; - float y2; - float z2; - float scale2; - uint16_t bNpcBase3; - uint8_t partSlot3; - float x3; - float y3; - float z3; - int16_t scale3; - uint16_t bNpcBase4; - uint8_t partSlot4; - float x4; - float y4; - float z4; - float scale4; - uint16_t bNpcBase5; - uint8_t partSlot5; - float x5; - float y5; - float z5; - float scale5; + uint16_t bNpcBase1; + uint8_t partSlot1; + float x1; + float y1; + float z1; + float scale1; + uint16_t bNpcBase2; + uint8_t partSlot2; + float x2; + float y2; + float z2; + float scale2; + uint16_t bNpcBase3; + uint8_t partSlot3; + float x3; + float y3; + float z3; + int16_t scale3; + uint16_t bNpcBase4; + uint8_t partSlot4; + float x4; + float y4; + float z4; + float scale4; + uint16_t bNpcBase5; + uint8_t partSlot5; + float x5; + float y5; + float z5; + float scale5; - BNpcParts( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BNpcParts( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct BNpcState +{ + uint8_t slot; + int8_t overRay; + uint16_t idle; + uint8_t attribute0; + bool attributeFlag0; + uint8_t attribute1; + bool attributeFlag1; + uint8_t attribute2; + bool attributeFlag2; + float scale; + int32_t loopTimeline; + + BNpcState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Buddy { - int32_t questRequirement2; - int32_t questRequirement1; - std::string soundEffect4; - std::string soundEffect3; - std::string soundEffect2; - std::string soundEffect1; + uint8_t base; + int32_t questRequirement2; + int32_t questRequirement1; + int32_t baseEquip; + std::string soundEffect4; + std::string soundEffect3; + std::string soundEffect2; + std::string soundEffect1; - Buddy( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Buddy( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BuddyAction { - std::string name; - std::string description; - int32_t icon; - int32_t iconStatus; + std::string name; + std::string description; + int32_t icon; + int32_t iconStatus; + uint16_t reward; + uint8_t sort; - BuddyAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BuddyAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BuddyEquip { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string name; - int32_t modelTop; - int32_t modelBody; - int32_t modelLegs; - uint8_t grandCompany; - uint16_t iconHead; - uint16_t iconBody; - uint16_t iconLegs; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string name; + int32_t modelTop; + int32_t modelBody; + int32_t modelLegs; + uint8_t grandCompany; + uint16_t iconHead; + uint16_t iconBody; + uint16_t iconLegs; - BuddyEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BuddyEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BuddyItem { - uint16_t item; + uint16_t item; + bool useField; + bool useTraining; + uint8_t status; - BuddyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BuddyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BuddyRank { - uint32_t expRequired; + uint32_t expRequired; - BuddyRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BuddyRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct BuddySkill { - uint8_t buddyLevel; - bool isActive; - uint16_t defender; - uint16_t attacker; - uint16_t healer; + uint8_t buddyLevel; + bool isActive; + uint16_t defender; + uint16_t attacker; + uint16_t healer; - BuddySkill( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + BuddySkill( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Cabinet { - int32_t item; - uint16_t order; - uint8_t category; + int32_t item; + uint16_t order; + uint8_t category; - Cabinet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Cabinet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CabinetCategory { - uint8_t menuOrder; - int32_t icon; - int32_t category; + uint8_t menuOrder; + int32_t icon; + int32_t category; - CabinetCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CabinetCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Calendar { - std::vector< uint8_t > month; - std::vector< uint8_t > day; + std::vector< uint8_t > month; + std::vector< uint8_t > day; - Calendar( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Calendar( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Carry +{ + uint64_t model; + uint8_t timeline; + + Carry( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Channeling +{ + std::string file; + uint8_t widthScale; + bool addedIn53; + + Channeling( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CharaMakeClassEquip +{ + uint64_t helmet; + uint64_t top; + uint64_t glove; + uint64_t down; + uint64_t shoes; + uint64_t weapon; + uint64_t subWeapon; + int32_t _class; + + CharaMakeClassEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CharaMakeCustomize { - uint32_t icon; - uint16_t data; - bool isPurchasable; + uint8_t featureID; + uint32_t icon; + uint16_t data; + bool isPurchasable; + uint32_t hint; + uint32_t hintItem; - CharaMakeCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CharaMakeCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CharaMakeName +{ + std::string hyurMidlanderMale; + std::string hyurMidlanderFemale; + std::string hyurMidlanderLastName; + std::string hyurHighlanderMale; + std::string hyurHighlanderFemale; + std::string hyurHighlanderLastName; + std::string elezenMale; + std::string elezenFemale; + std::string elezenWildwoodLastName; + std::string elezenDuskwightLastName; + std::string miqoteSunMale; + std::string miqoteSunFemale; + std::string miqoteSunMaleLastName; + std::string miqoteSunFemaleLastName; + std::string miqoteMoonMale; + std::string miqoteMoonFemale; + std::string miqoteMoonLastname; + std::string lalafellPlainsfolkFirstNameStart; + std::string lalafellPlainsfolkLastNameStart; + std::string lalafellPlainsfolkEndOfNames; + std::string lalafellDunesfolkMale; + std::string lalafellDunesfolkMaleLastName; + std::string lalafellDunesfolkFemale; + std::string lalafellDunesfolkFemaleLastName; + std::string roegadynSeaWolfMale; + std::string roegadynSeaWolfMaleLastName; + std::string roegadynSeaWolfFemale; + std::string roegadynSeaWolfFemaleLastName; + std::string roegadynHellsguardFirstName; + std::string roegadynHellsguardMaleLastName; + std::string roegadynHellsguardFemaleLastName; + std::string auRaRaenMale; + std::string auRaRaenFemale; + std::string auRaRaenLastName; + std::string auRaXaelaMale; + std::string auRaXaelaFemale; + std::string auRaXaelaLastName; + std::string hrothgarHellionsFirstName; + std::string hrothgarHellionsLastName; + std::string hrothgarLostFirstName; + std::string hrothgarLostLastName; + std::string vieraFirstName; + std::string vieraRavaLastName; + std::string vieraVeenaLastName; + + CharaMakeName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CharaMakeType { - int32_t race; - int32_t tribe; - int8_t gender; - std::vector< int32_t > facialFeatureIcon; + int32_t race; + int32_t tribe; + int8_t gender; + std::vector< uint32_t > menu; + std::vector< uint8_t > initVal; + std::vector< uint8_t > subMenuType; + std::vector< uint8_t > subMenuNum; + std::vector< uint8_t > lookAt; + std::vector< uint32_t > subMenuMask; + std::vector< uint32_t > customize; + std::vector< uint8_t > voiceStruct; - CharaMakeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CharaMakeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRace { - uint8_t chocoboRaceRank; - uint8_t chocoboRaceTerritory; + uint8_t chocoboRaceRank; + uint8_t chocoboRaceTerritory; - ChocoboRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceAbility { - std::string name; - std::string description; - uint32_t icon; - int8_t chocoboRaceAbilityType; - uint8_t value; + std::string name; + std::string description; + uint32_t icon; + int8_t chocoboRaceAbilityType; + uint8_t value; - ChocoboRaceAbility( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceAbility( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceAbilityType { - bool isActive; + bool isActive; - ChocoboRaceAbilityType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceAbilityType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceItem { - std::string name; - std::string description; - uint32_t icon; + std::string name; + std::string description; + uint32_t icon; - ChocoboRaceItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceRank { - uint16_t ratingMin; - uint16_t ratingMax; - uint16_t name; - uint16_t fee; - int32_t icon; + uint16_t ratingMin; + uint16_t ratingMax; + uint16_t name; + uint16_t fee; + int32_t icon; - ChocoboRaceRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceStatus { - int32_t status; + int32_t status; - ChocoboRaceStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceTerritory { - uint16_t name; - int32_t icon; + uint16_t name; + int32_t icon; - ChocoboRaceTerritory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceTerritory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceTutorial { - std::vector< int32_t > npcYell; + std::vector< int32_t > npcYell; - ChocoboRaceTutorial( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceTutorial( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboRaceWeather { - int32_t weatherType1; - int32_t weatherType2; + int32_t weatherType1; + int32_t weatherType2; - ChocoboRaceWeather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboRaceWeather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboTaxi { - uint32_t location; + uint32_t location; + uint8_t fare; + uint16_t timeRequired; - ChocoboTaxi( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboTaxi( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ChocoboTaxiStand { - std::string placeName; + std::vector< uint16_t > targetLocations; + std::string placeName; - ChocoboTaxiStand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ChocoboTaxiStand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CircleActivity +{ + std::string name; + int32_t icon; + uint16_t order; + + CircleActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ClassJob { - std::string name; - std::string abbreviation; - uint8_t classJobCategory; - int8_t expArrayIndex; - uint16_t modifierHitPoints; - uint16_t modifierManaPoints; - uint16_t modifierStrength; - uint16_t modifierVitality; - uint16_t modifierDexterity; - uint16_t modifierIntelligence; - uint16_t modifierMind; - uint16_t modifierPiety; - uint8_t classJobParent; - std::string nameEnglish; - int32_t itemStartingWeapon; - uint16_t limitBreak1; - uint16_t limitBreak2; - uint16_t limitBreak3; - uint32_t itemSoulCrystal; - uint32_t unlockQuest; - uint32_t relicQuest; - uint32_t prerequisite; - uint8_t startingLevel; + std::string name; + std::string abbreviation; + uint8_t classJobCategory; + int8_t expArrayIndex; + int8_t battleClassIndex; + uint8_t jobIndex; + uint16_t modifierHitPoints; + uint16_t modifierManaPoints; + uint16_t modifierStrength; + uint16_t modifierVitality; + uint16_t modifierDexterity; + uint16_t modifierIntelligence; + uint16_t modifierMind; + uint16_t modifierPiety; + uint8_t classJobParent; + std::string nameEnglish; + int32_t itemStartingWeapon; + uint8_t role; + uint8_t startingTown; + int8_t monsterNote; + uint8_t primaryStat; + uint16_t limitBreak1; + uint16_t limitBreak2; + uint16_t limitBreak3; + uint8_t uIPriority; + uint32_t itemSoulCrystal; + uint32_t unlockQuest; + uint32_t relicQuest; + uint32_t prerequisite; + uint8_t startingLevel; + uint8_t partyBonus; + bool isLimitedJob; + bool canQueueForDuty; - ClassJob( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ClassJob( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ClassJobCategory { - std::string name; - bool aDV; - bool gLA; - bool pGL; - bool mRD; - bool lNC; - bool aRC; - bool cNJ; - bool tHM; - bool cRP; - bool bSM; - bool aRM; - bool gSM; - bool lTW; - bool wVR; - bool aLC; - bool cUL; - bool mIN; - bool bTN; - bool fSH; - bool pLD; - bool mNK; - bool wAR; - bool dRG; - bool bRD; - bool wHM; - bool bLM; - bool aCN; - bool sMN; - bool sCH; - bool rOG; - bool nIN; - bool mCH; - bool dRK; - bool aST; - bool sAM; - bool rDM; + std::string name; + bool aDV; + bool gLA; + bool pGL; + bool mRD; + bool lNC; + bool aRC; + bool cNJ; + bool tHM; + bool cRP; + bool bSM; + bool aRM; + bool gSM; + bool lTW; + bool wVR; + bool aLC; + bool cUL; + bool mIN; + bool bTN; + bool fSH; + bool pLD; + bool mNK; + bool wAR; + bool dRG; + bool bRD; + bool wHM; + bool bLM; + bool aCN; + bool sMN; + bool sCH; + bool rOG; + bool nIN; + bool mCH; + bool dRK; + bool aST; + bool sAM; + bool rDM; + bool bLU; + bool gNB; + bool dNC; - ClassJobCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ClassJobCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CollectablesShop +{ + std::string name; + uint32_t quest; + std::vector< uint16_t > shopItems; + + CollectablesShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CollectablesShopItem +{ + uint32_t item; + uint8_t collectablesShopItemGroup; + uint16_t levelMin; + uint16_t levelMax; + uint16_t collectablesShopRefine; + uint16_t collectablesShopRewardScrip; + + CollectablesShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CollectablesShopItemGroup +{ + std::string name; + + CollectablesShopItemGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CollectablesShopRefine +{ + uint16_t lowCollectability; + uint16_t midCollectability; + uint16_t highCollectability; + + CollectablesShopRefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CollectablesShopRewardItem +{ + uint32_t item; + + CollectablesShopRewardItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CollectablesShopRewardScrip +{ + uint16_t currency; + uint16_t lowReward; + uint16_t midReward; + uint16_t highReward; + uint16_t expRatioLow; + uint16_t expRatioMid; + uint16_t expRatioHigh; + + CollectablesShopRewardScrip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Companion { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - uint16_t model; - uint8_t behavior; - uint16_t icon; - uint8_t cost; - uint16_t hP; - uint16_t skillAngle; - uint8_t skillCost; - uint8_t minionRace; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + uint16_t model; + uint8_t scale; + uint8_t inactiveIdle0; + uint8_t inactiveIdle1; + uint8_t inactiveBattle; + uint8_t inactiveWandering; + uint8_t behavior; + uint8_t special; + uint8_t wanderingWait; + uint16_t priority; + bool roulette; + bool battle; + bool lookAt; + bool poke; + uint16_t enemy; + bool stroke; + bool clapping; + uint16_t icon; + uint16_t order; + uint8_t cost; + uint16_t hP; + uint16_t skillAngle; + uint8_t skillCost; + uint8_t minionRace; - Companion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Companion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanionMove { - std::string name; + std::string name; - CompanionMove( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanionMove( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanionTransient { - std::string description; - std::string descriptionEnhanced; - std::string tooltip; - std::string specialActionName; - std::string specialActionDescription; - uint8_t attack; - uint8_t defense; - uint8_t speed; - bool hasAreaAttack; - bool strengthGate; - bool strengthEye; - bool strengthShield; - bool strengthArcana; - uint8_t minionSkillType; + std::string description; + std::string descriptionEnhanced; + std::string tooltip; + std::string specialActionName; + std::string specialActionDescription; + uint8_t attack; + uint8_t defense; + uint8_t speed; + bool hasAreaAttack; + bool strengthGate; + bool strengthEye; + bool strengthShield; + bool strengthArcana; + uint8_t minionSkillType; - CompanionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyAction { - std::string name; - std::string description; - int32_t icon; - uint8_t fCRank; - uint32_t cost; - uint8_t order; - bool purchasable; + std::string name; + std::string description; + int32_t icon; + uint8_t fCRank; + uint32_t cost; + uint8_t order; + bool purchasable; - CompanyAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftDraft { - std::string name; - uint8_t companyCraftDraftCategory; - uint32_t order; + std::string name; + uint8_t companyCraftDraftCategory; + uint32_t order; - CompanyCraftDraft( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftDraft( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftDraftCategory { - std::string name; + std::string name; - CompanyCraftDraftCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftDraftCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftManufactoryState { - std::string name; + std::string name; - CompanyCraftManufactoryState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftManufactoryState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftPart { - uint8_t companyCraftType; - std::vector< uint16_t > companyCraftProcess; + uint8_t companyCraftType; + std::vector< uint16_t > companyCraftProcess; - CompanyCraftPart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftPart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftProcess { - CompanyCraftProcess( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftProcess( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftSequence { - int32_t resultItem; - int32_t companyCraftDraftCategory; - int32_t companyCraftType; - int32_t companyCraftDraft; - std::vector< uint16_t > companyCraftPart; + int32_t resultItem; + int32_t category; + int32_t companyCraftDraftCategory; + int32_t companyCraftType; + int32_t companyCraftDraft; + std::vector< uint16_t > companyCraftPart; + uint32_t order; - CompanyCraftSequence( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftSequence( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftSupplyItem { - uint32_t item; + uint32_t item; - CompanyCraftSupplyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftSupplyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompanyCraftType { - std::string name; + std::string name; - CompanyCraftType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompanyCraftType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CompanyLeve +{ + std::vector< uint16_t > routePointTime; + std::vector< int32_t > baseID; + std::vector< uint16_t > enemyLevel; + std::vector< uint32_t > bNpcName; + std::vector< int32_t > itemsInvolved; + std::vector< uint8_t > itemsInvolvedQty; + std::vector< uint8_t > itemDropRate; + std::vector< uint8_t > toDoSequence; + int32_t rule; + uint8_t ruleParam; + + CompanyLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CompanyLeveRule +{ + std::string type; + uint16_t objective; + uint16_t help; + + CompanyLeveRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompleteJournal { - uint16_t requiredLevel; - int32_t icon; - std::string name; - std::vector< int32_t > cutscene; + uint16_t requiredLevel; + int32_t icon; + std::string name; + std::vector< int32_t > cutscene; - CompleteJournal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompleteJournal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CompleteJournalCategory { - uint32_t firstQuest; - uint32_t lastQuest; + uint32_t firstQuest; + uint32_t lastQuest; - CompleteJournalCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CompleteJournalCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Condition +{ + uint32_t logMessage; + + Condition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct ConfigKey +{ + std::string label; + uint8_t param; + uint8_t platform; + bool required; + uint8_t category; + std::string text; + + ConfigKey( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentCloseCycle { - uint32_t unixtime; - uint32_t timeSeconds; + uint32_t unixtime; + uint32_t timeSeconds; - ContentCloseCycle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentCloseCycle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentExAction { - uint32_t name; - uint8_t charges; + uint32_t name; + uint8_t charges; - ContentExAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentExAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentFinderCondition { - uint16_t territoryType; - uint8_t contentLinkType; - uint16_t content; - uint8_t contentMemberType; - uint8_t classJobLevelRequired; - uint8_t classJobLevelSync; - uint16_t itemLevelRequired; - uint16_t itemLevelSync; - bool allowReplacement; - bool highEndDuty; - bool dutyRecorderAllowed; - std::string name; - uint8_t contentType; - uint8_t transient; - uint32_t image; + std::string shortCode; + uint16_t territoryType; + uint8_t contentLinkType; + uint16_t content; + bool pvP; + uint8_t acceptClassJobCategory; + uint8_t contentMemberType; + uint32_t unlockQuest; + uint8_t classJobLevelRequired; + uint8_t classJobLevelSync; + uint16_t itemLevelRequired; + uint16_t itemLevelSync; + bool addedIn53; + bool allowUndersized; + bool allowReplacement; + bool highEndDuty; + bool dutyRecorderAllowed; + std::string name; + uint8_t contentType; + uint8_t transientKey; + uint32_t transient; + uint16_t sortKey; + uint32_t image; + uint32_t icon; + bool levelingRoulette; + bool level5060Roulette; + bool mSQRoulette; + bool guildHestRoulette; + bool expertRoulette; + bool trialRoulette; + bool dailyFrontlineChallenge; + bool level70Roulette; + bool mentorRoulette; + bool allianceRoulette; + bool normalRaidRoulette; - ContentFinderCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentFinderCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentFinderConditionTransient { - std::string description; + std::string description; - ContentFinderConditionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentFinderConditionTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentGauge { - std::string name; - uint8_t color; - std::string textString; + std::string name; + uint8_t color; + std::string textString; - ContentGauge( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentGauge( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentGaugeColor { - uint32_t androidColor1; - uint32_t androidColor2; - uint32_t androidColor3; + uint32_t androidColor1; + uint32_t androidColor2; + uint32_t androidColor3; - ContentGaugeColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentGaugeColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentMemberType { - uint8_t tanksPerParty; - uint8_t healersPerParty; - uint8_t meleesPerParty; - uint8_t rangedPerParty; + uint8_t tanksPerParty; + uint8_t healersPerParty; + uint8_t meleesPerParty; + uint8_t rangedPerParty; - ContentMemberType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentMemberType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentNpcTalk { - std::vector< uint32_t > contentTalk; + int32_t type; + std::vector< uint32_t > contentTalk; - ContentNpcTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentNpcTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct ContentRandomSelect +{ + uint16_t name; + + ContentRandomSelect( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentRoulette { - std::string name; - std::string description; - std::string dutyType; - bool isInDutyFinder; - uint8_t openRule; - uint8_t requiredLevel; - uint16_t itemLevelRequired; - uint32_t icon; - uint8_t contentRouletteRoleBonus; - uint16_t rewardTomeA; - uint16_t rewardTomeB; - uint16_t rewardTomeC; - uint8_t sortKey; - uint8_t contentMemberType; - bool requireAllDuties; - uint8_t contentRouletteOpenRule; - uint16_t instanceContent; + std::string name; + std::string description; + std::string dutyType; + bool isInDutyFinder; + bool openRule; + bool requiredLevel; + uint8_t itemLevelRequired; + uint16_t icon; + uint32_t contentRouletteRoleBonus; + uint8_t rewardTomeA; + uint16_t rewardTomeB; + uint16_t rewardTomeC; + uint16_t sortKey; + uint8_t contentMemberType; + bool requireAllDuties; + bool contentRouletteOpenRule; + uint8_t instanceContent; - ContentRoulette( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentRoulette( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentRouletteOpenRule { - uint32_t type; + uint32_t type; - ContentRouletteOpenRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentRouletteOpenRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentRouletteRoleBonus { - uint32_t itemRewardType; - uint8_t rewardAmount; + uint32_t itemRewardType; + uint8_t rewardAmount; - ContentRouletteRoleBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentRouletteRoleBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentsNote { - uint8_t contentType; - uint8_t menuOrder; - int32_t requiredAmount; - int32_t expMultiplier; - int32_t gilRward; - uint16_t levelUnlock; - uint16_t howTo; - std::string name; - std::string description; - int32_t expCap; + uint8_t contentType; + int32_t icon; + uint8_t menuOrder; + int32_t requiredAmount; + uint8_t reward0; + int32_t expMultiplier; + uint8_t reward1; + int32_t gilRward; + uint16_t levelUnlock; + uint16_t howTo; + uint32_t reqUnlock; + std::string name; + std::string description; + int32_t expCap; - ContentsNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentsNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentTalk { - uint8_t contentTalkParam; - std::string text; + uint8_t contentTalkParam; + std::string text; - ContentTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentTalkParam { - bool param; - uint32_t testAction; + bool param; + uint32_t testAction; - ContentTalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentTalkParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ContentType { - std::string name; - uint32_t icon; - uint32_t iconDutyFinder; + std::string name; + uint32_t icon; + uint32_t iconDutyFinder; - ContentType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ContentType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CraftAction { - std::string name; - std::string description; - uint16_t animationStart; - uint16_t animationEnd; - uint16_t icon; - int8_t classJob; - uint8_t classJobCategory; - uint8_t classJobLevel; - uint32_t questRequirement; - bool specialist; - uint8_t cost; - int32_t cRP; - int32_t bSM; - int32_t aRM; - int32_t gSM; - int32_t lTW; - int32_t wVR; - int32_t aLC; - int32_t cUL; + std::string name; + std::string description; + uint16_t animationStart; + uint16_t animationEnd; + uint16_t icon; + int8_t classJob; + uint8_t classJobCategory; + uint8_t classJobLevel; + uint32_t questRequirement; + bool specialist; + uint8_t cost; + int32_t cRP; + int32_t bSM; + int32_t aRM; + int32_t gSM; + int32_t lTW; + int32_t wVR; + int32_t aLC; + int32_t cUL; - CraftAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CraftAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CraftLeve { - int32_t leve; - int32_t craftLeveTalk; - uint8_t repeats; + int32_t leve; + int32_t craftLeveTalk; + uint8_t repeats; - CraftLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CraftLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CraftLevelDifference +{ + int16_t difference; + int16_t progressFactor; + int16_t qualityFactor; + + CraftLevelDifference( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CraftType { - std::string name; + uint8_t mainPhysical; + uint8_t subPhysical; + std::string name; - CraftType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CraftType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Credit { - uint16_t roles1; - uint16_t japaneseCast1; - uint16_t englishCast1; - uint16_t frenchCast1; - uint16_t germanCast1; - uint16_t roles2; - uint16_t japaneseCast2; - uint16_t englishCast2; - uint16_t frenchCast2; - uint16_t germanCast2; + uint16_t roles1; + uint16_t japaneseCast1; + uint16_t englishCast1; + uint16_t frenchCast1; + uint16_t germanCast1; + uint16_t roles2; + uint16_t japaneseCast2; + uint16_t englishCast2; + uint16_t frenchCast2; + uint16_t germanCast2; - Credit( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + Credit( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CreditBackImage { - uint32_t backImage; + uint32_t backImage; - CreditBackImage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + CreditBackImage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CreditCast { - std::string name; + std::string name; - CreditCast( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CreditCast( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CreditList +{ + uint16_t scale; + uint32_t icon; + uint32_t font; + uint32_t cast; + + CreditList( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CreditListText +{ + std::string name; + + CreditListText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Currency { - uint32_t item; - uint32_t limit; + uint32_t item; + uint32_t limit; - Currency( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Currency( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CustomTalk { - uint32_t iconActor; - uint32_t iconMap; - std::string name; - std::vector< std::string > scriptInstruction; - std::vector< uint32_t > scriptArg; - bool text; + uint32_t iconActor; + uint32_t iconMap; + std::string name; + std::vector< std::string > scriptInstruction; + std::vector< uint32_t > scriptArg; + bool text; - CustomTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CustomTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CustomTalkDynamicIcon { - uint32_t smallIcon; - uint32_t largeIcon; + uint32_t smallIcon; + uint32_t largeIcon; - CustomTalkDynamicIcon( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + CustomTalkDynamicIcon( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CustomTalkNestHandlers { - uint32_t nestHandler; + uint32_t nestHandler; - CustomTalkNestHandlers( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + CustomTalkNestHandlers( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Cutscene { - std::string path; + std::string path; - Cutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Cutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CutsceneMotion +{ + float wALK_LOOP_SPEED; + float rUN_LOOP_SPEED; + float sLOWWALK_LOOP_SPEED; + float sLOWRUN_LOOP_SPEED; + float bATTLEWALK_LOOP_SPEED; + float bATTLERUN_LOOP_SPEED; + float dASH_LOOP_SPEED; + uint8_t tURN_CW90_FRAME; + uint8_t tURN_CCW90_FRAME; + uint8_t tURN_CW180_FRAME; + uint8_t tURN_CCW180_FRAME; + + CutsceneMotion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CutsceneWorkIndex +{ + uint16_t workIndex; + + CutsceneWorkIndex( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct CutScreenImage { - int32_t image; + int16_t type; + int32_t image; - CutScreenImage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + CutScreenImage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct CycleTime +{ + uint32_t firstCycle; + uint32_t cycle; + + CycleTime( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DailySupplyItem { - DailySupplyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DailySupplyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnContent +{ + uint32_t content; + uint32_t exp; + + DawnContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnGrowMember +{ + uint32_t member; + uint32_t imageName; + uint32_t bigImageOld; + uint32_t bigImageNew; + uint32_t smallImageOld; + uint32_t smallImageNew; + uint8_t _class; + + DawnGrowMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnMemberUIParam +{ + std::string classSingular; + uint32_t voiceLine; + std::string classPlural; + + DawnMemberUIParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnQuestAnnounce +{ + uint32_t quest; + uint8_t content; + std::vector< uint32_t > eNPC; + + DawnQuestAnnounce( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnQuestMember +{ + uint32_t member; + uint32_t imageName; + uint32_t bigImageOld; + uint32_t bigImageNew; + uint8_t _class; + + DawnQuestMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeon { - std::string name; + uint8_t aetherpoolArm; + uint8_t aetherpoolArmor; + std::vector< uint8_t > pomanderSlot; + std::vector< uint8_t > magiciteSlot; + std::string name; + uint16_t contentFinderConditionStart; - DeepDungeon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonBan { - uint16_t screenImage; - uint16_t logMessage; - uint16_t name; + uint16_t screenImage; + uint16_t logMessage; + uint16_t name; - DeepDungeonBan( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonBan( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonDanger { - uint16_t screenImage; - uint16_t logMessage; - uint16_t name; + uint16_t screenImage; + uint16_t logMessage; + uint16_t name; - DeepDungeonDanger( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonDanger( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonEquipment { - uint32_t icon; - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string name; - std::string description; + uint32_t icon; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string name; + std::string description; - DeepDungeonEquipment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonEquipment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonFloorEffectUI { - uint32_t icon; - std::string name; - std::string description; + uint32_t icon; + std::string name; + std::string description; - DeepDungeonFloorEffectUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonFloorEffectUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonItem { - uint32_t icon; - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string name; - std::string tooltip; - uint32_t action; + uint32_t icon; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string name; + std::string tooltip; + uint32_t action; - DeepDungeonItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonLayer { - uint8_t deepDungeon; + uint8_t deepDungeon; + uint8_t floorSet; + uint16_t roomA; + uint16_t roomB; + uint16_t roomC; + uint8_t wepMinLv; + uint8_t armourMinLv; - DeepDungeonLayer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonLayer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonMagicStone { - uint32_t icon; - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string name; - std::string tooltip; + uint32_t icon; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string name; + std::string tooltip; - DeepDungeonMagicStone( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonMagicStone( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonMap5X { - std::vector< uint16_t > deepDungeonRoom; + std::vector< uint16_t > deepDungeonRoom; - DeepDungeonMap5X( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonMap5X( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonRoom { - std::vector< uint32_t > level; + std::vector< uint32_t > level; - DeepDungeonRoom( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonRoom( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeepDungeonStatus { - uint16_t screenImage; - uint16_t logMessage; - uint16_t name; + uint16_t screenImage; + uint16_t logMessage; + uint16_t name; - DeepDungeonStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeepDungeonStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DefaultTalk { - std::vector< uint16_t > actionTimelinePose; - std::vector< std::string > text; + std::vector< uint16_t > actionTimelinePose; + std::vector< std::string > text; - DefaultTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DefaultTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DefaultTalkLipSyncType { - int32_t actionTimeline; + int32_t actionTimeline; - DefaultTalkLipSyncType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DefaultTalkLipSyncType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DeliveryQuest { - int32_t quest; + int32_t quest; - DeliveryQuest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DeliveryQuest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Description +{ + uint32_t quest; + std::string textLong; + std::string textShort; + std::string textCommentary; + uint32_t section; + + Description( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DescriptionPage { - uint32_t text1; - uint32_t image1; - uint32_t text2; - uint32_t image2; - uint32_t text3; - uint32_t image3; - uint32_t text4; - uint32_t image4; - uint32_t text5; - uint32_t image5; - uint32_t text6; - uint32_t image6; - uint32_t text7; - uint32_t image7; - uint32_t text8; - uint32_t image8; - uint32_t text9; - uint32_t image9; + uint32_t quest; + uint16_t text1; + uint32_t image1; + uint16_t text2; + uint32_t image2; + uint16_t text3; + uint32_t image3; + uint16_t text4; + uint32_t image4; + uint16_t text5; + uint32_t image5; + uint16_t text6; + uint32_t image6; + uint16_t text7; + uint32_t image7; + uint16_t text8; + uint32_t image8; + uint16_t text9; + uint32_t image9; - DescriptionPage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + DescriptionPage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DescriptionSection +{ + uint16_t string; + uint16_t page; + + DescriptionSection( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DescriptionString { - std::string text; + std::string text; - DescriptionString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DescriptionString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DisposalShop { - std::string shopName; + std::string shopName; - DisposalShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DisposalShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DisposalShopFilterType { - std::string category; + std::string category; - DisposalShopFilterType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DisposalShopFilterType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DisposalShopItem { - int32_t itemDisposed; - int32_t itemReceived; - uint32_t quantityReceived; + int32_t itemDisposed; + int32_t itemReceived; + uint32_t quantityReceived; - DisposalShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + DisposalShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DpsChallenge { - uint16_t playerLevel; - uint16_t placeName; - uint32_t icon; - uint16_t order; - std::string name; - std::string description; + uint16_t playerLevel; + uint16_t placeName; + uint32_t icon; + uint16_t order; + std::string name; + std::string description; - DpsChallenge( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DpsChallenge( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DpsChallengeOfficer { - uint32_t unlockQuest; - std::vector< uint16_t > challengeName; + uint32_t unlockQuest; + std::vector< uint16_t > challengeName; - DpsChallengeOfficer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DpsChallengeOfficer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct DpsChallengeTransient { - uint16_t instanceContent; + uint16_t instanceContent; - DpsChallengeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + DpsChallengeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DynamicEvent +{ + uint8_t eventType; + uint8_t enemyType; + uint32_t lGBEventObject; + uint32_t lGBMapRange; + uint32_t quest; + uint8_t singleBattle; + uint32_t announce; + std::string name; + std::string description; + + DynamicEvent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DynamicEventEnemyType +{ + std::string name; + + DynamicEventEnemyType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DynamicEventSingleBattle +{ + int32_t actionIcon; + uint32_t icon; + std::string text; + + DynamicEventSingleBattle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DynamicEventType +{ + uint32_t iconObjective0; + uint32_t iconObjective1; + + DynamicEventType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EmjAddon { - std::string text; + std::string text; - EmjAddon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EmjAddon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EmjDani { - uint32_t icon; + uint32_t icon; - EmjDani( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EmjDani( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Emote { - std::string name; - std::vector< uint16_t > actionTimeline; - uint8_t emoteCategory; - uint8_t emoteMode; - bool hasCancelEmote; - bool drawsWeapon; - int32_t textCommand; - uint16_t icon; - uint16_t logMessageTargeted; - uint16_t logMessageUntargeted; - uint32_t unlockLink; + std::string name; + std::vector< uint16_t > actionTimeline; + uint8_t emoteCategory; + uint8_t emoteMode; + bool hasCancelEmote; + bool drawsWeapon; + int32_t textCommand; + uint16_t icon; + uint16_t logMessageTargeted; + uint16_t logMessageUntargeted; + uint32_t unlockLink; - Emote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Emote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EmoteCategory { - std::string name; + std::string name; - EmoteCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EmoteCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct EmoteMode +{ + uint16_t startEmote; + uint16_t endEmote; + bool move; + bool camera; + bool endOnRotate; + bool endOnEmote; + uint8_t conditionMode; + + EmoteMode( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ENpcBase { - std::vector< uint32_t > eNpcData; - uint8_t race; - uint8_t gender; - uint8_t bodyType; - uint8_t height; - uint8_t tribe; - uint8_t face; - uint8_t hairStyle; - uint8_t hairHighlight; - uint8_t skinColor; - uint8_t eyeHeterochromia; - uint8_t hairColor; - uint8_t hairHighlightColor; - uint8_t facialFeature; - uint8_t facialFeatureColor; - uint8_t eyebrows; - uint8_t eyeColor; - uint8_t eyeShape; - uint8_t nose; - uint8_t jaw; - uint8_t mouth; - uint8_t lipColor; - uint8_t bustOrTone1; - uint8_t extraFeature1; - uint8_t extraFeature2OrBust; - uint8_t facePaint; - uint8_t facePaintColor; - uint16_t npcEquip; - uint16_t behavior; - uint64_t modelMainHand; - uint8_t dyeMainHand; - uint64_t modelOffHand; - uint8_t dyeOffHand; - uint32_t modelHead; - uint8_t dyeHead; - bool visor; - uint32_t modelBody; - uint8_t dyeBody; - uint32_t modelHands; - uint8_t dyeHands; - uint32_t modelLegs; - uint8_t dyeLegs; - uint32_t modelFeet; - uint8_t dyeFeet; - uint32_t modelEars; - uint8_t dyeEars; - uint32_t modelNeck; - uint8_t dyeNeck; - uint32_t modelWrists; - uint8_t dyeWrists; - uint32_t modelLeftRing; - uint8_t dyeLeftRing; - uint32_t modelRightRing; - uint8_t dyeRightRing; - uint16_t balloon; + uint16_t eventHandler; + bool important; + std::vector< uint32_t > eNpcData; + float scale; + uint16_t modelChara; + uint8_t race; + uint8_t gender; + uint8_t bodyType; + uint8_t height; + uint8_t tribe; + uint8_t face; + uint8_t hairStyle; + uint8_t hairHighlight; + uint8_t skinColor; + uint8_t eyeHeterochromia; + uint8_t hairColor; + uint8_t hairHighlightColor; + uint8_t facialFeature; + uint8_t facialFeatureColor; + uint8_t eyebrows; + uint8_t eyeColor; + uint8_t eyeShape; + uint8_t nose; + uint8_t jaw; + uint8_t mouth; + uint8_t lipColor; + uint8_t bustOrTone1; + uint8_t extraFeature1; + uint8_t extraFeature2OrBust; + uint8_t facePaint; + uint8_t facePaintColor; + uint16_t npcEquip; + uint16_t behavior; + uint64_t modelMainHand; + uint8_t dyeMainHand; + uint64_t modelOffHand; + uint8_t dyeOffHand; + uint32_t modelHead; + uint8_t dyeHead; + bool visor; + uint32_t modelBody; + uint8_t dyeBody; + uint32_t modelHands; + uint8_t dyeHands; + uint32_t modelLegs; + uint8_t dyeLegs; + uint32_t modelFeet; + uint8_t dyeFeet; + uint32_t modelEars; + uint8_t dyeEars; + uint32_t modelNeck; + uint8_t dyeNeck; + uint32_t modelWrists; + uint8_t dyeWrists; + uint32_t modelLeftRing; + uint8_t dyeLeftRing; + uint32_t modelRightRing; + uint8_t dyeRightRing; + uint8_t invisibility; + uint16_t balloon; + bool notRewriteHeight; + uint8_t defaultBalloon; - ENpcBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ENpcBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ENpcDressUp { - uint8_t eNpcDressUpDress; + uint8_t eNpcDressUpDress; - ENpcDressUp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ENpcDressUp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ENpcDressUpDress { - uint32_t eNpc; + bool addedIn530; + uint32_t eNpc; + uint16_t addedIn531; + uint16_t behavior; + uint8_t addedIn532; + uint64_t modelMainHand; + uint8_t dyeMainHand; + uint64_t modelOffHand; + uint8_t dyeOffHand; + uint32_t modelHead; + uint8_t dyeHead; + uint32_t modelBody; + uint8_t dyeBody; + uint32_t modelHands; + uint8_t dyeHands; + uint32_t modelLegs; + uint8_t dyeLegs; + uint32_t modelFeet; + uint8_t dyeFeet; - ENpcDressUpDress( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + ENpcDressUpDress( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ENpcResident { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string title; - uint8_t map; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string title; + uint8_t map; - ENpcResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ENpcResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EObj { - uint32_t data; - uint16_t sgbPath; + uint8_t popType; + uint32_t data; + uint8_t invisibility; + uint16_t sgbPath; + bool eyeCollision; + bool directorControl; + bool target; + uint8_t eventHighAddition; + bool addedIn53; - EObj( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EObj( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EObjName { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; - EObjName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EObjName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EquipRaceCategory { - bool hyur; - bool elezen; - bool lalafell; - bool miqote; - bool roegadyn; - bool auRa; - bool male; - bool female; + bool hyur; + bool elezen; + bool lalafell; + bool miqote; + bool roegadyn; + bool auRa; + bool male; + bool female; - EquipRaceCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EquipRaceCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EquipSlotCategory { - int8_t mainHand; - int8_t offHand; - int8_t head; - int8_t body; - int8_t gloves; - int8_t waist; - int8_t legs; - int8_t feet; - int8_t ears; - int8_t neck; - int8_t wrists; - int8_t fingerL; - int8_t fingerR; - int8_t soulCrystal; + int8_t mainHand; + int8_t offHand; + int8_t head; + int8_t body; + int8_t gloves; + int8_t waist; + int8_t legs; + int8_t feet; + int8_t ears; + int8_t neck; + int8_t wrists; + int8_t fingerL; + int8_t fingerR; + int8_t soulCrystal; - EquipSlotCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EquipSlotCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaAetherItem { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string name; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string name; - EurekaAetherItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaAetherItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaAethernet { - uint16_t location; + uint16_t location; - EurekaAethernet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaAethernet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaGrowData { - uint16_t baseResistance; + uint16_t baseResistance; - EurekaGrowData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaGrowData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaLogosMixerProbability { - uint8_t probability; + uint8_t probability; - EurekaLogosMixerProbability( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaLogosMixerProbability( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaMagiaAction { - uint32_t action; - uint8_t maxUses; + uint32_t action; + uint8_t maxUses; - EurekaMagiaAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaMagiaAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaMagiciteItem { - uint8_t eurekaMagiciteItemType; - uint8_t classJobCategory; - uint32_t item; + uint8_t eurekaMagiciteItemType; + uint8_t classJobCategory; + uint32_t item; - EurekaMagiciteItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaMagiciteItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaMagiciteItemType { - std::string type; + std::string type; - EurekaMagiciteItemType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaMagiciteItemType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EurekaSphereElementAdjust { - uint16_t powerModifier; + uint16_t powerModifier; - EurekaSphereElementAdjust( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EurekaSphereElementAdjust( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EventAction { - std::string name; - uint16_t icon; - uint8_t castTime; - std::vector< uint16_t > animation; + std::string name; + uint16_t icon; + uint8_t castTime; + std::vector< uint16_t > animation; - EventAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EventAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EventIconPriority { - std::vector< uint32_t > icon; + std::vector< uint32_t > icon; - EventIconPriority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EventIconPriority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EventIconType { - uint32_t npcIconAvailable; - uint32_t mapIconAvailable; - uint32_t npcIconInvalid; - uint32_t mapIconInvalid; - uint8_t iconRange; + uint32_t npcIconAvailable; + uint32_t mapIconAvailable; + uint32_t npcIconInvalid; + uint32_t mapIconInvalid; + uint8_t iconRange; - EventIconType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EventIconType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EventItem { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string name; - uint16_t icon; - uint16_t action; - uint8_t stackSize; - uint32_t quest; - uint8_t castTime; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string name; + uint16_t icon; + uint16_t action; + uint8_t stackSize; + uint32_t quest; + uint8_t castTime; + uint8_t castTimeline; + uint8_t timeline; - EventItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EventItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EventItemCastTimeline { - uint32_t actionTimeline; + uint32_t actionTimeline; - EventItemCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EventItemCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EventItemHelp { - std::string description; + std::string description; - EventItemHelp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EventItemHelp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct EventItemTimeline { - uint32_t actionTimeline; + uint32_t actionTimeline; - EventItemTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + EventItemTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct EventSystemDefine +{ + std::string text; + uint32_t defineValue; + + EventSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ExportedSG { - std::string sgbPath; + std::string sgbPath; - ExportedSG( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ExportedSG( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ExVersion { - std::string name; + std::string name; + uint16_t acceptJingle; + uint16_t completeJingle; - ExVersion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ExVersion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Fate { - uint8_t eurekaFate; - uint32_t location; - uint8_t classJobLevel; - uint8_t classJobLevelMax; - uint32_t eventItem; - uint32_t iconObjective; - uint32_t iconMap; - int32_t music; - bool hasWorldMapIcon; - std::string name; - std::string description; - std::string objective; - std::vector< std::string > statusText; - uint32_t arrayIndex; + uint8_t eurekaFate; + uint8_t rule; + uint16_t fateRuleEx; + uint32_t location; + uint8_t classJobLevel; + uint8_t classJobLevelMax; + uint32_t eventItem; + std::vector< uint8_t > typeToDoValue; + uint32_t iconObjective; + uint32_t iconMap; + uint32_t iconInactiveMap; + int32_t music; + uint32_t lGBGuardNPCLocation; + uint16_t screenImageAccept; + uint16_t screenImageComplete; + uint16_t screenImageFailed; + bool specialFate; + uint16_t givenStatus; + bool adventEvent; + bool moonFaireEvent; + uint32_t fATEChain; + std::string name; + std::string description; + std::string objective; + std::vector< std::string > statusText; + uint32_t arrayIndex; + uint32_t reqEventItem; + uint32_t turnInEventItem; + std::vector< uint16_t > objectiveIcon; - Fate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Fate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FateEvent +{ + std::vector< uint8_t > turn; + std::vector< uint32_t > gesture; + std::vector< int32_t > lipSync; + std::vector< int32_t > facial; + std::vector< int32_t > shape; + std::vector< bool > isAutoShake; + std::vector< uint8_t > widgetType; + std::vector< std::string > text; + + FateEvent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FateMode +{ + uint32_t motivationIcon; + uint32_t motivationMapMarker; + uint32_t objectiveIcon; + uint32_t objectiveMapMarker; + + FateMode( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FateProgressUI +{ + int32_t location; + int32_t achievement; + uint8_t reqFatesToRank2; + uint8_t reqFatesToRank3; + uint8_t displayOrder; + + FateProgressUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FateTokenType +{ + uint32_t currency; + + FateTokenType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCActivity { - std::string text; - uint8_t fCActivityCategory; + std::string text; + uint8_t selfKind; + uint8_t targetKind; + uint8_t numParam; + uint8_t fCActivityCategory; + int8_t iconType; - FCActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCActivityCategory { - std::string name; + uint8_t priority; + std::string name; - FCActivityCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCActivityCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCAuthority { - std::string name; - int32_t fCAuthorityCategory; + std::string name; + int32_t fCAuthorityCategory; - FCAuthority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCAuthority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCAuthorityCategory { - std::string name; + std::string name; - FCAuthorityCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCAuthorityCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCChestName { - std::string name; + std::string name; - FCChestName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCChestName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FCCrestSymbol +{ + uint8_t colorNum; + uint8_t fCRight; + + FCCrestSymbol( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FccShop { - std::string name; + std::string name; - FccShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FccShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCHierarchy { - std::string name; + std::string name; - FCHierarchy( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCHierarchy( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCProfile { - std::string name; + uint8_t priority; + std::string name; - FCProfile( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCProfile( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FCRank +{ + uint32_t nextPoint; + uint32_t currentPoint; + uint16_t rights; + uint8_t fCActionActiveNum; + uint8_t fCActionStockNum; + + FCRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCReputation { - uint32_t pointsToNext; - uint32_t requiredPoints; - std::string name; + uint32_t pointsToNext; + uint32_t requiredPoints; + uint8_t discountRate; + uint32_t color; + std::string name; - FCReputation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCReputation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FCRights { - std::string name; - std::string description; - uint16_t icon; - uint8_t fCRank; + std::string name; + std::string description; + uint16_t icon; + uint8_t fCRank; - FCRights( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FCRights( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Festival { - std::string name; + std::string name; - Festival( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Festival( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FieldMarker { - int32_t vFX; - uint16_t icon; + int32_t vFX; + uint16_t icon; - FieldMarker( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FieldMarker( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FishingRecordType { - int32_t addon; + int32_t addon; + uint16_t rankBRequirement; + uint16_t rankARequirement; + uint16_t rankAARequirement; + uint16_t rankAAARequirement; - FishingRecordType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FishingRecordType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FishingRecordTypeTransient { - int32_t image; + int32_t image; - FishingRecordTypeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FishingRecordTypeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FishingSpot { - uint8_t gatheringLevel; - std::string bigFishOnReach; - std::string bigFishOnEnd; - uint8_t fishingSpotCategory; - uint16_t territoryType; - int16_t x; - int16_t z; - uint16_t radius; - std::vector< int32_t > item; - uint16_t placeName; + uint8_t gatheringLevel; + std::string bigFishOnReach; + std::string bigFishOnEnd; + uint8_t fishingSpotCategory; + bool rare; + uint16_t territoryType; + uint16_t placeNameMain; + uint16_t placeNameSub; + int16_t x; + int16_t z; + uint16_t radius; + std::vector< int32_t > item; + uint16_t placeName; + uint8_t order; - FishingSpot( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FishingSpot( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct FishParameter { - std::string text; - int32_t item; - uint16_t gatheringItemLevel; - bool isHidden; - uint8_t fishingRecordType; - int32_t territoryType; - bool isInLog; - bool timeRestricted; - bool weatherRestricted; - uint16_t gatheringSubCategory; + std::string text; + int32_t item; + uint16_t gatheringItemLevel; + bool isHidden; + uint8_t fishingRecordType; + int32_t territoryType; + uint16_t gatheringSubCategory; + bool isInLog; + bool timeRestricted; + bool weatherRestricted; - FishParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + FishParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Frontline03 { - std::vector< uint32_t > emptyIcon; - std::vector< uint32_t > maelstromIcon; - std::vector< uint32_t > twinAdderIcon; - std::vector< uint32_t > immortalFlamesIcon; + std::vector< uint32_t > emptyIcon; + std::vector< uint32_t > maelstromIcon; + std::vector< uint32_t > twinAdderIcon; + std::vector< uint32_t > immortalFlamesIcon; - Frontline03( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Frontline03( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Frontline04 { - int32_t level1; - int32_t level2; - int32_t level3; - std::vector< int32_t > unknownLevel; + int32_t level1; + int32_t level2; + int32_t level3; + std::vector< int32_t > unknownLevel; - Frontline04( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Frontline04( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FurnitureCatalogCategory +{ + std::string category; + + FurnitureCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FurnitureCatalogItemList +{ + uint16_t category; + int32_t item; + uint16_t patch; + + FurnitureCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GardeningSeed { - uint32_t item; - uint32_t icon; + uint32_t item; + uint16_t modelID; + uint32_t icon; + bool sE; - GardeningSeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GardeningSeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringCondition { - std::string text; + std::string text; - GatheringCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringExp { - uint16_t exp; + int32_t exp; - GatheringExp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringExp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringItem { - int32_t item; - uint16_t gatheringItemLevel; - bool isHidden; + int32_t item; + uint16_t gatheringItemLevel; + uint32_t isHidden; - GatheringItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringItemLevelConvertTable { - uint8_t gatheringItemLevel; - uint8_t stars; + uint8_t gatheringItemLevel; + uint8_t stars; - GatheringItemLevelConvertTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringItemLevelConvertTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringItemPoint { - uint32_t gatheringPoint; + uint32_t gatheringPoint; - GatheringItemPoint( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringItemPoint( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringLeve { - int32_t requiredItem1; - uint8_t leveLevel; - int32_t requiredItem2; + std::vector< int32_t > route; + int32_t requiredItem0; + uint8_t requiredItemQty0; + int32_t requiredItem1; + uint8_t requiredItemQty1; + int32_t requiredItem2; + uint8_t requiredItemQty2; + int32_t requiredItem3; + uint8_t requiredItemQty3; + uint8_t itemNumber; + int32_t rule; + uint8_t varient; + uint16_t objective0; + uint16_t objective1; + int32_t bNpcEntry; + bool useSecondaryTool; - GatheringLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringLeveRoute { - GatheringLeveRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringLeveRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GatheringLeveRule +{ + std::string rule; + + GatheringLeveRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringNotebookList { - std::vector< int32_t > gatheringItem; + std::vector< int32_t > gatheringItem; - GatheringNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringPoint { - int32_t gatheringPointBase; - std::vector< uint16_t > gatheringPointBonus; - uint16_t territoryType; - uint16_t placeName; - uint16_t gatheringSubCategory; + uint8_t type; + int32_t gatheringPointBase; + uint8_t count; + std::vector< uint16_t > gatheringPointBonus; + uint16_t territoryType; + uint16_t placeName; + uint16_t gatheringSubCategory; - GatheringPoint( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringPoint( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringPointBase { - int32_t gatheringType; - uint8_t gatheringLevel; - std::vector< int32_t > item; - bool isLimited; + int32_t gatheringType; + uint8_t gatheringLevel; + std::vector< int32_t > item; + bool isLimited; - GatheringPointBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringPointBase( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringPointBonus { - uint8_t condition; - uint16_t conditionValue; - uint8_t bonusType; - uint16_t bonusValue; + uint8_t condition; + uint32_t conditionValue; + uint8_t bonusType; + uint16_t bonusValue; + bool addedIn53; - GatheringPointBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringPointBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringPointBonusType { - std::string text; + std::string text; - GatheringPointBonusType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringPointBonusType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringPointName { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; - GatheringPointName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringPointName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GatheringPointTransient +{ + uint16_t ephemeralStartTime; + uint16_t ephemeralEndTime; + int32_t gatheringRarePopTimeTable; + + GatheringPointTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GatheringRarePopTimeTable +{ + + GatheringRarePopTimeTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringSubCategory { - int32_t item; - std::string folkloreBook; + uint8_t gatheringType; + uint8_t classJob; + uint16_t division; + int32_t item; + std::string folkloreBook; - GatheringSubCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringSubCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GatheringType { - std::string name; - int32_t iconMain; - int32_t iconOff; + std::string name; + int32_t iconMain; + int32_t iconOff; - GatheringType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GatheringType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GcArmyCaptureTactics { - int32_t name; - uint8_t hP; - uint8_t damageDealt; - uint8_t damageReceived; - uint32_t tactic; - uint32_t icon; + int32_t name; + uint8_t hP; + uint8_t damageDealt; + uint8_t damageReceived; + uint32_t tactic; + uint32_t icon; - GcArmyCaptureTactics( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GcArmyCaptureTactics( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GcArmyExpedition { - uint8_t requiredFlag; - uint8_t unlockFlag; - uint8_t requiredLevel; - uint16_t requiredSeals; - uint32_t rewardExperience; - uint8_t percentBase; - uint8_t gcArmyExpeditionType; - std::string name; - std::string description; + uint8_t requiredFlag; + uint8_t unlockFlag; + uint8_t requiredLevel; + uint16_t requiredSeals; + uint32_t rewardExperience; + uint8_t percentBase; + uint8_t gcArmyExpeditionType; + std::string name; + std::string description; - GcArmyExpedition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GcArmyExpedition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GcArmyExpeditionMemberBonus { - uint8_t race; - uint8_t classJob; + uint8_t race; + uint8_t classJob; - GcArmyExpeditionMemberBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GcArmyExpeditionMemberBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GcArmyExpeditionType { - std::string name; + std::string name; - GcArmyExpeditionType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GcArmyExpeditionType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GcArmyMemberGrow { - uint8_t classJob; - int32_t classBook; + uint8_t classJob; + int32_t classBook; - GcArmyMemberGrow( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GcArmyMemberGrow( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GcArmyTraining { - int8_t physicalBonus; - int8_t mentalBonus; - int8_t tacticalBonus; - uint32_t experience; - std::string name; - std::string description; + int8_t physicalBonus; + int8_t mentalBonus; + int8_t tacticalBonus; + uint32_t experience; + std::string name; + std::string description; - GcArmyTraining( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GcArmyTraining( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCRankGridaniaFemaleText { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string nameRank; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string nameRank; - GCRankGridaniaFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCRankGridaniaFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCRankGridaniaMaleText { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string nameRank; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string nameRank; - GCRankGridaniaMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCRankGridaniaMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCRankLimsaFemaleText { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string nameRank; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string nameRank; - GCRankLimsaFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCRankLimsaFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCRankLimsaMaleText { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string nameRank; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string nameRank; - GCRankLimsaMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCRankLimsaMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCRankUldahFemaleText { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string nameRank; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string nameRank; - GCRankUldahFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCRankUldahFemaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCRankUldahMaleText { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string nameRank; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string nameRank; - GCRankUldahMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCRankUldahMaleText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCScripShopCategory { - int8_t grandCompany; - int8_t tier; - int8_t subCategory; + int8_t grandCompany; + int8_t tier; + int8_t subCategory; - GCScripShopCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCScripShopCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCScripShopItem { - int32_t item; - int32_t requiredGrandCompanyRank; - uint32_t costGCSeals; - uint8_t sortKey; + int32_t item; + int32_t requiredGrandCompanyRank; + uint32_t costGCSeals; + uint8_t sortKey; - GCScripShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + GCScripShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCShop { - int8_t grandCompany; + int8_t grandCompany; - GCShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCShopItemCategory { - std::string name; + std::string name; - GCShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCSupplyDuty { - GCSupplyDuty( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCSupplyDuty( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GCSupplyDutyReward { - uint32_t experienceSupply; - uint32_t experienceProvisioning; - uint32_t sealsExpertDelivery; - uint32_t sealsSupply; - uint32_t sealsProvisioning; + uint32_t experienceSupply; + uint32_t experienceProvisioning; + uint32_t sealsExpertDelivery; + uint32_t sealsSupply; + uint32_t sealsProvisioning; - GCSupplyDutyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GCSupplyDutyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GeneralAction { - std::string name; - std::string description; - uint16_t action; - uint16_t unlockLink; - int32_t icon; + std::string name; + std::string description; + uint16_t action; + uint16_t unlockLink; + uint8_t recast; + uint8_t uIPriority; + int32_t icon; - GeneralAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GeneralAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GFATE { - std::vector< uint32_t > icon; + std::vector< uint32_t > icon; - GFATE( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GFATE( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GFateClimbing2 { - uint32_t contentEntry; + uint32_t contentEntry; - GFateClimbing2( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GFateClimbing2( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GFateClimbing2Content { - uint32_t publicContentTextData; + uint32_t publicContentTextData; - GFateClimbing2Content( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GFateClimbing2Content( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GFateClimbing2TotemType { - uint32_t publicContentTextData; + uint32_t publicContentTextData; - GFateClimbing2TotemType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GFateClimbing2TotemType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GFateRideShooting { - uint32_t contentEntry; + uint32_t contentEntry; - GFateRideShooting( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GFateRideShooting( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GilShop { - std::string name; - uint32_t icon; - std::vector< uint32_t > questRequired; - int32_t acceptTalk; - int32_t failTalk; + std::string name; + uint32_t icon; + uint32_t quest; + int32_t acceptTalk; + int32_t failTalk; - GilShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GilShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GilShopItem { - int32_t item; - std::vector< int32_t > rowRequired; - uint16_t stateRequired; - uint16_t patch; + int32_t item; + std::vector< int32_t > rowRequired; + uint16_t stateRequired; + uint16_t patch; - GilShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + GilShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GimmickAccessor +{ + int32_t param0; + uint32_t param1; + uint32_t param2; + uint32_t type; + + GimmickAccessor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GimmickJump +{ + uint16_t fallDamage; + int8_t height; + uint32_t loopMotion; + uint32_t endMotion; + bool startClient; + + GimmickJump( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GimmickRect +{ + uint32_t layoutID; + uint8_t triggerIn; + uint32_t param0; + uint8_t triggerOut; + uint32_t param1; + + GimmickRect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GoldSaucerArcadeMachine { - uint32_t failImage; - uint32_t poor; - uint32_t good; - uint32_t great; - uint32_t excellent; + uint32_t failImage; + uint32_t poor; + uint32_t good; + uint32_t great; + uint32_t excellent; - GoldSaucerArcadeMachine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GoldSaucerArcadeMachine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GoldSaucerTextData { - std::string text; + std::string text; - GoldSaucerTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GoldSaucerTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GrandCompany { - std::string name; + std::string name; - GrandCompany( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GrandCompany( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GrandCompanyRank { - uint8_t tier; - uint8_t order; - uint32_t maxSeals; - uint32_t requiredSeals; - int32_t iconMaelstrom; - int32_t iconSerpents; - int32_t iconFlames; - int32_t questMaelstrom; - int32_t questSerpents; - int32_t questFlames; + uint8_t tier; + uint8_t order; + uint32_t maxSeals; + uint32_t requiredSeals; + int32_t iconMaelstrom; + int32_t iconSerpents; + int32_t iconFlames; + int32_t questMaelstrom; + int32_t questSerpents; + int32_t questFlames; - GrandCompanyRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GrandCompanyRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GroupPoseFrame +{ + int32_t image; + std::string gridText; + std::string text; + + GroupPoseFrame( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GroupPoseStamp +{ + int32_t stampIcon; + int32_t category; + std::string name; + + GroupPoseStamp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GroupPoseStampCategory +{ + std::string name; + + GroupPoseStampCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GuardianDeity { - std::string name; - std::string description; - uint16_t icon; + std::string name; + std::string description; + uint16_t icon; - GuardianDeity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GuardianDeity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Guide +{ + uint16_t guideTitle; + uint16_t guidePage; + + Guide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GuidePage +{ + uint8_t key; + uint32_t output; + + GuidePage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GuidePageString +{ + std::string string; + + GuidePageString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GuideTitle +{ + std::string title; + + GuideTitle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GuildleveAssignment { - uint32_t assignmentTalk; - std::vector< uint32_t > quest; + uint8_t addedIn53; + uint32_t assignmentTalk; + std::vector< uint32_t > quest; - GuildleveAssignment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GuildleveAssignment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GuildleveAssignmentCategory { - std::vector< int32_t > category; + std::vector< int32_t > category; - GuildleveAssignmentCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GuildleveAssignmentCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GuildOrder +{ + uint32_t eNpcName; + std::string objective; + std::string description1; + std::string description2; + std::string description3; + uint32_t completionBonusExp; + uint32_t rewardExp; + uint32_t completionBonusGil; + uint32_t rewardGil; + + GuildOrder( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GuildOrderGuide { - GuildOrderGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GuildOrderGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct GuildOrderOfficer { - GuildOrderOfficer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + GuildOrderOfficer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HairMakeType { - int32_t race; - int32_t tribe; - int8_t gender; + int32_t race; + int32_t tribe; + int8_t gender; - HairMakeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HairMakeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HouseRetainerPose { - uint16_t actionTimeline; + uint16_t actionTimeline; - HouseRetainerPose( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HouseRetainerPose( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingAethernet { - uint32_t level; - uint16_t territoryType; - uint16_t placeName; - uint8_t order; + uint32_t level; + uint16_t territoryType; + uint16_t placeName; + uint8_t order; - HousingAethernet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingAethernet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingAppeal { - std::string tag; - uint32_t icon; - uint8_t order; + std::string tag; + uint32_t icon; + uint8_t order; - HousingAppeal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingAppeal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingEmploymentNpcList { - uint8_t race; - std::vector< uint32_t > eNpcBase; + uint8_t race; + std::vector< uint32_t > eNpcBase; - HousingEmploymentNpcList( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + HousingEmploymentNpcList( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingEmploymentNpcRace { - std::string race; + std::string race; - HousingEmploymentNpcRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingEmploymentNpcRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingExterior { - uint16_t placeName; - uint8_t housingSize; - std::string model; + uint16_t placeName; + uint8_t housingSize; + std::string model; - HousingExterior( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingExterior( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingFurniture { - uint16_t modelKey; - uint8_t housingItemCategory; - uint8_t usageType; - uint32_t usageParameter; - uint8_t housingLayoutLimit; - uint8_t aquariumTier; - uint32_t customTalk; - uint32_t item; - bool destroyOnRemoval; - bool tooltip; + uint16_t modelKey; + uint8_t housingItemCategory; + uint8_t usageType; + uint32_t usageParameter; + uint8_t aquariumTier; + uint32_t customTalk; + uint32_t item; + bool destroyOnRemoval; + bool tooltip; - HousingFurniture( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingFurniture( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingLandSet @@ -3246,2213 +4352,3182 @@ struct HousingLandSet std::vector< uint32_t > minPrice; std::vector< uint32_t > initialPrice; - HousingLandSet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingLandSet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingMapMarkerInfo { - uint16_t map; - float x; - float y; - float z; - float plotNumberDistance; + float x; + float y; + float z; + uint16_t map; - HousingMapMarkerInfo( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + HousingMapMarkerInfo( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingMerchantPose { - uint16_t actionTimeline; - std::string pose; + uint16_t actionTimeline; + std::string pose; - HousingMerchantPose( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingMerchantPose( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingPlacement { - std::string text; + std::string text; - HousingPlacement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingPlacement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingPreset { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - uint16_t placeName; - uint8_t housingSize; - int32_t exteriorRoof; - int32_t exteriorWall; - int32_t exteriorWindow; - int32_t exteriorDoor; - int32_t interiorWall; - int32_t interiorFlooring; - int32_t interiorLighting; - int32_t otherFloorWall; - int32_t otherFloorFlooring; - int32_t otherFloorLighting; - int32_t basementWall; - int32_t basementFlooring; - int32_t basementLighting; - int32_t mansionLighting; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + uint16_t placeName; + uint8_t housingSize; + int32_t exteriorRoof; + int32_t exteriorWall; + int32_t exteriorWindow; + int32_t exteriorDoor; + int32_t interiorWall; + int32_t interiorFlooring; + int32_t interiorLighting; + int32_t otherFloorWall; + int32_t otherFloorFlooring; + int32_t otherFloorLighting; + int32_t basementWall; + int32_t basementFlooring; + int32_t basementLighting; + int32_t mansionLighting; - HousingPreset( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingPreset( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingUnitedExterior { - std::vector< uint32_t > item; + std::vector< uint32_t > item; - HousingUnitedExterior( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingUnitedExterior( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HousingYardObject { - uint8_t modelKey; - uint8_t housingItemCategory; - uint8_t usageType; - uint32_t usageParameter; - uint8_t housingLayoutLimit; - uint32_t customTalk; - uint32_t item; - bool destroyOnRemoval; + uint8_t modelKey; + uint8_t housingItemCategory; + uint8_t usageType; + uint32_t usageParameter; + uint32_t customTalk; + uint32_t item; + bool destroyOnRemoval; - HousingYardObject( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HousingYardObject( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HowTo { - std::vector< int16_t > images; - int8_t category; + std::vector< int16_t > images; + int8_t category; - HowTo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HowTo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HowToCategory { - std::string category; + std::string category; - HowToCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HowToCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct HowToPage { - int32_t image; + int32_t image; - HowToPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + HowToPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HugeCraftworksNpc +{ + uint32_t eNpcResident; + uint16_t classJobCategory; + std::vector< uint32_t > itemRequested; + std::vector< uint8_t > qtyRequested; + std::vector< uint32_t > itemReward; + std::vector< uint8_t > qtyItemReward; + std::vector< uint32_t > itemUnkown; + std::vector< uint8_t > qtyItemUnkown; + std::string transient; + + HugeCraftworksNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HugeCraftworksRank +{ + uint8_t crafterLevel; + uint32_t expRewardPerItem; + + HugeCraftworksRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDAnnounce +{ + std::string name; + uint32_t eNPC; + + HWDAnnounce( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDCrafterSupply +{ + std::vector< uint32_t > itemTradeIn; + std::vector< uint8_t > level; + std::vector< uint8_t > levelMax; + std::vector< uint16_t > baseCollectableRating; + std::vector< uint16_t > midCollectableRating; + std::vector< uint16_t > highCollectableRating; + std::vector< uint16_t > baseCollectableReward; + std::vector< uint16_t > midCollectableReward; + std::vector< uint16_t > highCollectableReward; + std::vector< uint8_t > termName; + + HWDCrafterSupply( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDCrafterSupplyReward +{ + uint16_t scriptRewardAmount; + uint32_t expReward; + uint16_t Points; + + HWDCrafterSupplyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDDevLayerControl +{ + + HWDDevLayerControl( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDDevLevelUI +{ + + HWDDevLevelUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDDevLively +{ + uint32_t eNPC; + + HWDDevLively( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDDevProgress +{ + bool canGoNext; + + HWDDevProgress( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDGathereInspectTerm +{ + std::string name; + + HWDGathereInspectTerm( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDGathererInspection +{ + std::vector< uint32_t > itemRequired; + std::vector< uint32_t > fishParameter; + std::vector< uint8_t > amountRequired; + std::vector< uint32_t > itemReceived; + std::vector< uint16_t > reward1; + std::vector< uint16_t > reward2; + std::vector< uint8_t > phase; + + HWDGathererInspection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDGathererInspectionReward +{ + uint16_t scrips; + uint16_t points; + + HWDGathererInspectionReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDInfoBoardArticle +{ + uint8_t type; + std::string text; + + HWDInfoBoardArticle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDInfoBoardArticleTransient +{ + uint32_t image; + std::string text; + std::string npcName; + + HWDInfoBoardArticleTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDInfoBoardArticleType +{ + std::string type; + + HWDInfoBoardArticleType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDLevelChangeDeception +{ + int32_t image; + + HWDLevelChangeDeception( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDSharedGroup +{ + uint32_t lGB; + uint8_t param; + + HWDSharedGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HWDSharedGroupControlParam +{ + uint8_t paramValue; + + HWDSharedGroupControlParam( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct IKDContentBonus +{ + std::string objective; + std::string requirement; + uint32_t image; + uint8_t order; + + IKDContentBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct IKDFishParam +{ + uint32_t fish; + uint8_t iKDContentBonus; + + IKDFishParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct IKDRoute +{ + std::vector< uint32_t > spot; + uint8_t timeDefine; + uint32_t image; + uint32_t territoryType; + std::string name; + + IKDRoute( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct IKDRouteTable +{ + uint32_t route; + + IKDRouteTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct IKDSpot +{ + uint32_t spotMain; + uint32_t spotSub; + uint32_t placeName; + + IKDSpot( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct InclusionShop +{ + std::vector< uint16_t > category; + + InclusionShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct InclusionShopCategory +{ + std::string name; + uint8_t classJobCategory; + uint16_t inclusionShopSeries; + + InclusionShopCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct InclusionShopSeries +{ + uint32_t specialShop; + + InclusionShopSeries( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct IndividualWeather +{ + std::vector< uint8_t > weather; + uint8_t addedIn530; + uint8_t addedIn531; + std::vector< uint32_t > quest; + + IndividualWeather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct InstanceContent { - uint8_t instanceContentType; - uint8_t weekRestriction; - uint16_t timeLimitmin; - std::string name; - uint16_t bGM; - uint16_t winBGM; - uint32_t cutscene; - uint16_t order; - uint32_t instanceContentTextDataBossStart; - uint32_t instanceContentTextDataBossEnd; - uint32_t bNpcBaseBoss; - uint32_t instanceContentTextDataObjectiveStart; - uint32_t instanceContentTextDataObjectiveEnd; - uint16_t sortKey; - uint16_t newPlayerBonusA; - uint16_t newPlayerBonusB; - uint32_t finalBossExp; - uint16_t finalBossCurrencyA; - uint16_t finalBossCurrencyB; - uint16_t finalBossCurrencyC; - uint32_t instanceClearExp; - int32_t instanceContentBuff; - uint32_t reqInstance; - uint8_t partyCondition; + uint8_t instanceContentType; + uint8_t weekRestriction; + uint16_t timeLimitmin; + uint16_t bGM; + uint16_t winBGM; + uint32_t cutscene; + uint16_t order; + uint8_t colosseum; + uint32_t instanceContentTextDataBossStart; + uint32_t instanceContentTextDataBossEnd; + uint32_t bNpcBaseBoss; + uint32_t instanceContentTextDataObjectiveStart; + uint32_t instanceContentTextDataObjectiveEnd; + uint16_t sortKey; + uint32_t instanceClearExp; + uint16_t newPlayerBonusA; + uint16_t finalBossCurrencyC; + uint32_t finalBossCurrencyA; + uint16_t finalBossCurrencyB; + uint16_t newPlayerBonusB; + uint32_t instanceClearGil; + uint32_t instanceContentRewardItem; + uint8_t finalBossExp; + uint32_t instanceContentBuff; + int32_t reqInstance; + int16_t partyCondition; - InstanceContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + InstanceContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct InstanceContentBuff { - uint16_t echoStart; - uint16_t echoDeath; + uint16_t echoStart; + uint16_t echoDeath; - InstanceContentBuff( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + InstanceContentBuff( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct InstanceContentCSBonus { - uint16_t instance; - uint32_t item; + uint16_t instance; + uint32_t item; - InstanceContentCSBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + InstanceContentCSBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct InstanceContentGuide { - uint32_t instance; + uint32_t instance; - InstanceContentGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + InstanceContentGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct InstanceContentTextData { - std::string text; + std::string text; - InstanceContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + InstanceContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Item { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - std::string description; - std::string name; - uint16_t icon; - uint16_t levelItem; - uint8_t rarity; - uint8_t filterGroup; - uint32_t additionalData; - uint8_t itemUICategory; - uint8_t itemSearchCategory; - uint8_t equipSlotCategory; - uint32_t stackSize; - bool isUnique; - bool isUntradable; - bool isIndisposable; - bool isEquippable; - uint32_t priceMid; - uint32_t priceLow; - bool canBeHq; - bool isDyeable; - bool isCrestWorthy; - uint16_t itemAction; - uint16_t cooldowns; - uint8_t classJobRepair; - int32_t itemRepair; - int32_t itemGlamour; - uint16_t salvage; - bool isCollectable; - uint16_t aetherialReduce; - uint8_t levelEquip; - uint8_t equipRestriction; - uint8_t classJobCategory; - uint8_t grandCompany; - uint8_t itemSeries; - uint8_t baseParamModifier; - uint64_t modelMain; - uint64_t modelSub; - uint8_t classJobUse; - uint16_t damagePhys; - uint16_t damageMag; - uint16_t delayms; - uint16_t blockRate; - uint16_t block; - uint16_t defensePhys; - uint16_t defenseMag; - uint8_t itemSpecialBonus; - uint8_t itemSpecialBonusParam; - uint8_t materializeType; - uint8_t materiaSlotCount; - bool isAdvancedMeldingPermitted; - bool isPvP; - bool isGlamourous; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + std::string description; + std::string name; + uint16_t icon; + uint16_t levelItem; + uint8_t rarity; + uint8_t filterGroup; + uint32_t additionalData; + uint8_t itemUICategory; + uint8_t itemSearchCategory; + uint8_t equipSlotCategory; + uint8_t itemSortCategory; + uint32_t stackSize; + bool isUnique; + bool isUntradable; + bool isIndisposable; + bool isEquippable; + uint32_t priceMid; + uint32_t priceLow; + bool canBeHq; + bool isDyeable; + bool isCrestWorthy; + uint16_t itemAction; + uint16_t cooldowns; + uint8_t classJobRepair; + int32_t itemRepair; + int32_t itemGlamour; + uint16_t desynth; + bool isCollectable; + bool alwaysCollectable; + uint16_t aetherialReduce; + uint8_t levelEquip; + uint8_t equipRestriction; + uint8_t classJobCategory; + uint8_t grandCompany; + uint8_t itemSeries; + uint8_t baseParamModifier; + uint64_t modelMain; + uint64_t modelSub; + uint8_t classJobUse; + uint16_t damagePhys; + uint16_t damageMag; + uint16_t delayms; + uint16_t blockRate; + uint16_t block; + uint16_t defensePhys; + uint16_t defenseMag; + uint8_t itemSpecialBonus; + uint8_t itemSpecialBonusParam; + uint8_t materializeType; + uint8_t materiaSlotCount; + bool isAdvancedMeldingPermitted; + bool isPvP; + bool isGlamourous; - struct - { - uint8_t baseparam; - int16_t value; - } param[6]; + struct + { + uint8_t baseparam; + int16_t value; + } param[6]; - Item( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Item( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ItemAction { - uint16_t type; - std::vector< uint16_t > data; - std::vector< uint16_t > dataHQ; + uint8_t condLv; + bool condBattle; + bool condPVP; + bool condPVPOnly; + uint16_t type; + std::vector< uint16_t > data; + std::vector< uint16_t > dataHQ; - ItemAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ItemAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct ItemActionTelepo +{ + uint32_t requirement; + uint32_t denyMessage; + + ItemActionTelepo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct ItemBarterCheck +{ + uint16_t category; + uint32_t question; + uint32_t confirm; + + ItemBarterCheck( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ItemFood { + uint8_t eXPBonus; - ItemFood( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ItemFood( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ItemLevel { - uint16_t strength; - uint16_t dexterity; - uint16_t vitality; - uint16_t intelligence; - uint16_t mind; - uint16_t piety; - uint16_t hP; - uint16_t mP; - uint16_t tP; - uint16_t gP; - uint16_t cP; - uint16_t physicalDamage; - uint16_t magicalDamage; - uint16_t delay; - uint16_t additionalEffect; - uint16_t attackSpeed; - uint16_t blockRate; - uint16_t blockStrength; - uint16_t tenacity; - uint16_t attackPower; - uint16_t defense; - uint16_t directHitRate; - uint16_t evasion; - uint16_t magicDefense; - uint16_t criticalHitPower; - uint16_t criticalHitResilience; - uint16_t criticalHit; - uint16_t criticalHitEvasion; - uint16_t slashingResistance; - uint16_t piercingResistance; - uint16_t bluntResistance; - uint16_t projectileResistance; - uint16_t attackMagicPotency; - uint16_t healingMagicPotency; - uint16_t enhancementMagicPotency; - uint16_t enfeeblingMagicPotency; - uint16_t fireResistance; - uint16_t iceResistance; - uint16_t windResistance; - uint16_t earthResistance; - uint16_t lightningResistance; - uint16_t waterResistance; - uint16_t magicResistance; - uint16_t determination; - uint16_t skillSpeed; - uint16_t spellSpeed; - uint16_t haste; - uint16_t morale; - uint16_t enmity; - uint16_t enmityReduction; - uint16_t carefulDesynthesis; - uint16_t eXPBonus; - uint16_t regen; - uint16_t refresh; - uint16_t movementSpeed; - uint16_t spikes; - uint16_t slowResistance; - uint16_t petrificationResistance; - uint16_t paralysisResistance; - uint16_t silenceResistance; - uint16_t blindResistance; - uint16_t poisonResistance; - uint16_t stunResistance; - uint16_t sleepResistance; - uint16_t bindResistance; - uint16_t heavyResistance; - uint16_t doomResistance; - uint16_t reducedDurabilityLoss; - uint16_t increasedSpiritbondGain; - uint16_t craftsmanship; - uint16_t control; - uint16_t gathering; - uint16_t perception; + uint16_t strength; + uint16_t dexterity; + uint16_t vitality; + uint16_t intelligence; + uint16_t mind; + uint16_t piety; + uint16_t hP; + uint16_t mP; + uint16_t tP; + uint16_t gP; + uint16_t cP; + uint16_t physicalDamage; + uint16_t magicalDamage; + uint16_t delay; + uint16_t additionalEffect; + uint16_t attackSpeed; + uint16_t blockRate; + uint16_t blockStrength; + uint16_t tenacity; + uint16_t attackPower; + uint16_t defense; + uint16_t directHitRate; + uint16_t evasion; + uint16_t magicDefense; + uint16_t criticalHitPower; + uint16_t criticalHitResilience; + uint16_t criticalHit; + uint16_t criticalHitEvasion; + uint16_t slashingResistance; + uint16_t piercingResistance; + uint16_t bluntResistance; + uint16_t projectileResistance; + uint16_t attackMagicPotency; + uint16_t healingMagicPotency; + uint16_t enhancementMagicPotency; + uint16_t enfeeblingMagicPotency; + uint16_t fireResistance; + uint16_t iceResistance; + uint16_t windResistance; + uint16_t earthResistance; + uint16_t lightningResistance; + uint16_t waterResistance; + uint16_t magicResistance; + uint16_t determination; + uint16_t skillSpeed; + uint16_t spellSpeed; + uint16_t haste; + uint16_t morale; + uint16_t enmity; + uint16_t enmityReduction; + uint16_t carefulDesynthesis; + uint16_t eXPBonus; + uint16_t regen; + uint16_t refresh; + uint16_t movementSpeed; + uint16_t spikes; + uint16_t slowResistance; + uint16_t petrificationResistance; + uint16_t paralysisResistance; + uint16_t silenceResistance; + uint16_t blindResistance; + uint16_t poisonResistance; + uint16_t stunResistance; + uint16_t sleepResistance; + uint16_t bindResistance; + uint16_t heavyResistance; + uint16_t doomResistance; + uint16_t reducedDurabilityLoss; + uint16_t increasedSpiritbondGain; + uint16_t craftsmanship; + uint16_t control; + uint16_t gathering; + uint16_t perception; - ItemLevel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ItemLevel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ItemSearchCategory { - std::string name; - int32_t icon; - uint8_t category; - uint8_t order; - int8_t classJob; + std::string name; + int32_t icon; + uint8_t category; + uint8_t order; + int8_t classJob; - ItemSearchCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ItemSearchCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ItemSeries { - std::string name; + std::string name; - ItemSeries( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ItemSeries( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct ItemSortCategory +{ + uint8_t param; + + ItemSortCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ItemSpecialBonus { - std::string name; + std::string name; - ItemSpecialBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ItemSpecialBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ItemUICategory { - std::string name; - int32_t icon; - uint8_t orderMinor; - uint8_t orderMajor; + std::string name; + int32_t icon; + uint8_t orderMinor; + uint8_t orderMajor; - ItemUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ItemUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct JobHudManual +{ + uint32_t action; + uint16_t guide; + + JobHudManual( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct JobHudManualPriority +{ + std::vector< uint8_t > jobHudManual; + + JobHudManualPriority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct JournalCategory { - std::string name; - uint8_t journalSection; + std::string name; + uint8_t separateType; + uint8_t dataType; + uint8_t journalSection; - JournalCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + JournalCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct JournalGenre { - int32_t icon; - uint8_t journalCategory; - std::string name; + int32_t icon; + uint8_t journalCategory; + std::string name; - JournalGenre( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + JournalGenre( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct JournalSection { - std::string name; + std::string name; - JournalSection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + JournalSection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Knockback +{ + uint8_t distance; + uint8_t speed; + bool motion; + uint8_t nearDistance; + uint8_t direction; + uint8_t directionArg; + bool cancelMove; + + Knockback( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct LegacyQuest +{ + uint16_t legacyQuestID; + std::string text; + std::string string; + uint16_t sortKey; + uint8_t genre; + + LegacyQuest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Leve { - std::string name; - std::string description; - int32_t leveClient; - int32_t leveAssignmentType; - uint16_t classJobLevel; - uint8_t allowanceCost; - int32_t placeNameStart; - int32_t placeNameIssued; - uint8_t classJobCategory; - int32_t journalGenre; - int32_t placeNameStartZone; - int32_t iconCityState; - int32_t dataId; - uint32_t expReward; - uint32_t gilReward; - uint16_t leveRewardItem; - uint8_t leveVfx; - uint8_t leveVfxFrame; - uint32_t levelLevemete; - int32_t iconIssuer; - uint32_t levelStart; - uint16_t bGM; + std::string name; + std::string description; + int32_t leveClient; + uint8_t leveAssignmentType; + int32_t town; + uint16_t classJobLevel; + uint8_t timeLimit; + uint8_t allowanceCost; + int32_t evaluation; + int32_t placeNameStart; + int32_t placeNameIssued; + uint8_t classJobCategory; + int32_t journalGenre; + int32_t placeNameStartZone; + int32_t iconCityState; + int32_t dataId; + bool canCancel; + uint8_t maxDifficulty; + float expFactor; + uint32_t expReward; + uint32_t gilReward; + uint16_t leveRewardItem; + uint8_t leveVfx; + uint8_t leveVfxFrame; + uint32_t levelLevemete; + int32_t iconIssuer; + bool lockedLeve; + uint32_t levelStart; + uint16_t bGM; - Leve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Leve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LeveAssignmentType { - bool isFaction; - int32_t icon; - std::string name; + bool isFaction; + int32_t icon; + std::string name; - LeveAssignmentType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LeveAssignmentType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LeveClient { - std::string name; + std::string name; - LeveClient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LeveClient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Level { - float x; - float y; - float z; - float yaw; - float radius; - uint8_t type; - uint32_t object; - uint16_t map; - uint32_t eventId; - uint16_t territory; + float x; + float y; + float z; + float yaw; + float radius; + uint8_t type; + uint32_t object; + uint16_t map; + uint32_t eventId; + uint16_t territory; - Level( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Level( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LeveRewardItem { - LeveRewardItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LeveRewardItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LeveRewardItemGroup { - LeveRewardItemGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LeveRewardItemGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct LeveString +{ + std::string objective; + + LeveString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LeveVfx { - std::string effect; - int32_t icon; + std::string effect; + int32_t icon; - LeveVfx( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LeveVfx( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Lobby +{ + uint32_t tYPE; + uint32_t pARAM; + uint32_t lINK; + std::string text; + + Lobby( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LogFilter { - uint8_t logKind; - std::string name; - std::string example; + uint8_t logKind; + uint16_t caster; + uint16_t target; + uint8_t category; + uint8_t displayOrder; + uint8_t preset; + std::string name; + std::string example; - LogFilter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LogFilter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LogKind { - std::string format; - std::string name; - std::string example; - uint8_t logKindCategoryText; + std::string format; - LogKind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); -}; - -struct LogKindCategoryText -{ - std::string text; - - LogKindCategoryText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LogKind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LogMessage { - uint16_t logKind; - std::string text; + uint16_t logKind; + std::string text; - LogMessage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LogMessage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct LotteryExchangeShop { - std::vector< int32_t > itemAccepted; - std::vector< uint32_t > amountAccepted; + std::vector< int32_t > itemAccepted; + std::vector< uint32_t > amountAccepted; + std::string lua; + std::vector< uint32_t > logMessage; - LotteryExchangeShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + LotteryExchangeShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MacroIcon { - int32_t icon; + int32_t icon; - MacroIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MacroIcon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MacroIconRedirectOld { - uint32_t iconOld; - int32_t iconNew; + uint32_t iconOld; + int32_t iconNew; - MacroIconRedirectOld( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MacroIconRedirectOld( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MainCommand { - int32_t icon; - uint8_t mainCommandCategory; - std::string name; - std::string description; + int32_t icon; + uint8_t category; + uint8_t mainCommandCategory; + int8_t sortID; + std::string name; + std::string description; - MainCommand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MainCommand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MainCommandCategory { - std::string name; + std::string name; - MainCommandCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MainCommandCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ManeuversArmor { - std::vector< uint32_t > bNpcBase; - std::vector< uint32_t > icon; + std::vector< uint32_t > bNpcBase; + std::vector< uint32_t > icon; - ManeuversArmor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ManeuversArmor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Map { - int8_t mapIndex; - uint8_t hierarchy; - uint16_t mapMarkerRange; - std::string id; - uint16_t sizeFactor; - int16_t offsetX; - int16_t offsetY; - uint16_t placeNameRegion; - uint16_t placeName; - uint16_t placeNameSub; - int16_t discoveryIndex; - uint16_t territoryType; - bool discoveryArrayByte; + uint8_t mapCondition; + uint8_t priorityCategoryUI; + uint8_t priorityUI; + int8_t mapIndex; + uint8_t hierarchy; + uint16_t mapMarkerRange; + std::string id; + uint16_t sizeFactor; + int16_t offsetX; + int16_t offsetY; + uint16_t placeNameRegion; + uint16_t placeName; + uint16_t placeNameSub; + int16_t discoveryIndex; + uint32_t discoveryFlag; + uint16_t territoryType; + bool discoveryArrayByte; + bool isEvent; - Map( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Map( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MapMarker { - int16_t x; - int16_t y; - uint16_t icon; - uint16_t placeNameSubtext; - uint8_t subtextOrientation; - uint8_t mapMarkerRegion; - uint8_t type; - uint8_t dataType; - uint16_t dataKey; + int16_t x; + int16_t y; + uint16_t icon; + uint16_t placeNameSubtext; + uint8_t subtextOrientation; + uint8_t mapMarkerRegion; + uint8_t type; + uint8_t dataType; + uint16_t dataKey; - MapMarker( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + MapMarker( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MapMarkerRegion { - int16_t x; + int16_t x; - MapMarkerRegion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MapMarkerRegion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MapSymbol { - int32_t icon; - int32_t placeName; + int32_t icon; + int32_t placeName; + bool displayNavi; - MapSymbol( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MapSymbol( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Marker { - int32_t icon; - std::string name; + int32_t icon; + std::string name; - Marker( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Marker( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MasterpieceSupplyDuty { - uint8_t classJob; - uint8_t classJobLevel; - uint16_t rewardCurrency; + uint8_t classJob; + uint8_t classJobLevel; + uint16_t rewardCurrency; - MasterpieceSupplyDuty( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MasterpieceSupplyDuty( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MasterpieceSupplyMultiplier { - std::vector< uint16_t > xpMultiplier; - std::vector< uint16_t > currencyMultiplier; + std::vector< uint16_t > xpMultiplier; + std::vector< uint16_t > currencyMultiplier; - MasterpieceSupplyMultiplier( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MasterpieceSupplyMultiplier( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Materia { - std::vector< int32_t > item; - uint8_t baseParam; - std::vector< uint8_t > value; + std::vector< int32_t > item; + uint8_t baseParam; + std::vector< uint8_t > value; - Materia( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Materia( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MateriaJoinRate +{ + std::vector< float > NQOvermeldSlot; + std::vector< float > HQOvermeldSlot; + + MateriaJoinRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MateriaJoinRateGatherCraft +{ + std::vector< float > NQOvermeldSlot; + std::vector< float > HQOvermeldSlot; + + MateriaJoinRateGatherCraft( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MateriaTomestoneRate +{ + uint32_t rate; + + MateriaTomestoneRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MiniGameRA { - int32_t icon; - int32_t bGM; + int32_t icon; + int32_t bGM; - MiniGameRA( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MiniGameRA( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MinionRace { - std::string name; + std::string name; - MinionRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MinionRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MinionRules { - std::string rule; - std::string description; + std::string rule; + std::string description; - MinionRules( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MinionRules( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MinionSkillType { - std::string name; + std::string name; - MinionSkillType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MinionSkillType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MobHuntOrder +{ + uint16_t target; + uint8_t neededKills; + uint8_t type; + uint8_t rank; + uint8_t mobHuntReward; + + MobHuntOrder( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MobHuntOrderType { - uint32_t quest; - uint32_t eventItem; + uint8_t type; + uint32_t quest; + uint32_t eventItem; + uint16_t orderStart; + uint8_t orderAmount; - MobHuntOrderType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MobHuntOrderType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MobHuntReward +{ + uint32_t expReward; + uint16_t gilReward; + uint8_t expansion; + uint16_t currencyReward; + + MobHuntReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MobHuntRewardCap +{ + uint32_t expCap; + + MobHuntRewardCap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MobHuntTarget { - uint16_t name; - uint16_t fATE; - uint32_t icon; - uint16_t territoryType; - uint16_t placeName; + uint16_t name; + uint16_t fATE; + uint32_t icon; + uint16_t territoryType; + uint16_t placeName; - MobHuntTarget( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MobHuntTarget( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ModelChara { - uint8_t type; - uint16_t model; - uint8_t base; - uint8_t variant; + uint8_t type; + uint16_t model; + uint8_t base; + uint8_t variant; + uint16_t sEPack; + bool papVariation; - ModelChara( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ModelChara( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct ModelSkeleton +{ + float radius; + float height; + float vFXScale; + float floatHeight; + float floatDown; + uint16_t floatUp; + bool motionBlendType; + uint8_t loopFlySE; + + ModelSkeleton( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ModelState { - uint16_t start; - uint16_t end; + uint16_t start; - ModelState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ModelState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MonsterNote { - std::vector< uint16_t > monsterNoteTarget; - std::vector< uint8_t > count; - uint32_t reward; - std::string name; + std::vector< uint16_t > monsterNoteTarget; + std::vector< uint8_t > count; + uint32_t reward; + std::string name; - MonsterNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MonsterNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MonsterNoteTarget { - uint16_t bNpcName; - int32_t icon; + uint16_t bNpcName; + int32_t icon; + uint8_t town; - MonsterNoteTarget( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MonsterNoteTarget( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MotionTimeline +{ + std::string filename; + uint8_t blendGroup; + bool isLoop; + bool isBlinkEnable; + bool isLipEnable; + + MotionTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MotionTimelineBlendTable +{ + uint8_t destBlendGroup; + uint8_t srcBlendGroup; + uint8_t blendFrame_PC; + uint8_t blendFram_TypeA; + uint8_t blendFram_TypeB; + uint8_t blendFram_TypeC; + + MotionTimelineBlendTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Mount { - std::string singular; - int8_t adjective; - std::string plural; - int8_t possessivePronoun; - int8_t startsWithVowel; - int8_t pronoun; - int8_t article; - int32_t modelChara; - uint8_t flyingCondition; - uint8_t isFlying; - uint8_t mountCustomize; - uint16_t rideBGM; - int16_t order; - uint16_t icon; - uint8_t extraSeats; - uint16_t mountAction; - bool isAirborne; - bool useEP; - bool isImmobile; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + int32_t modelChara; + uint8_t flyingCondition; + uint8_t isFlying; + uint8_t mountCustomize; + uint16_t rideBGM; + uint8_t exitMoveDist; + uint8_t exitMoveSpeed; + bool isEmote; + int32_t equipHead; + int32_t equipBody; + int32_t equipLeg; + int32_t equipFoot; + int16_t order; + uint16_t icon; + uint8_t uIPriority; + uint8_t radiusRate; + uint8_t baseMotionSpeed_Run; + uint8_t baseMotionSpeed_Walk; + uint8_t extraSeats; + uint16_t mountAction; + bool isAirborne; + bool exHotbarEnableConfig; + bool useEP; + bool isImmobile; - Mount( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Mount( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MountAction { - std::vector< uint16_t > action; + std::vector< uint16_t > action; - MountAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MountAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MountCustomize { - float hyurMaleScale; - float hyurFemaleScale; - float elezenMaleScale; - float elezenFemaleScale; - float lalaMaleScale; - float lalaFemaleScale; - float miqoMaleScale; - float miqoFemaleScale; - float roeMaleScale; - float roeFemaleScale; - float auRaMaleScale; - float auRaFemaleScale; - uint8_t hyurMaleCameraHeight; - uint8_t hyurFemaleCameraHeight; - uint8_t elezenMaleCameraHeight; - uint8_t elezenFemaleCameraHeight; - uint8_t lalaMaleCameraHeight; - uint8_t lalaFemaleCameraHeight; - uint8_t miqoMaleCameraHeight; - uint8_t miqoFemaleCameraHeight; - uint8_t roeMaleCameraHeight; - uint8_t roeFemaleCameraHeight; - uint8_t auRaMaleCameraHeight; - uint8_t auRaFemaleCameraHeight; + uint16_t hyurMaleScale; + uint16_t hyurFemaleScale; + uint16_t elezenMaleScale; + uint16_t elezenFemaleScale; + uint16_t lalaMaleScale; + uint16_t lalaFemaleScale; + uint16_t miqoMaleScale; + uint16_t miqoFemaleScale; + uint16_t roeMaleScale; + uint16_t roeFemaleScale; + uint16_t auRaMaleScale; + uint16_t auRaFemaleScale; + uint16_t hrothgarMaleScale; + uint16_t hrothgarFemaleScale; + uint16_t vieraMaleScale; + uint16_t vieraFemaleScale; + uint8_t hyurMaleCameraHeight; + uint8_t hyurFemaleCameraHeight; + uint8_t elezenMaleCameraHeight; + uint8_t elezenFemaleCameraHeight; + uint8_t lalaMaleCameraHeight; + uint8_t lalaFemaleCameraHeight; + uint8_t miqoMaleCameraHeight; + uint8_t miqoFemaleCameraHeight; + uint8_t roeMaleCameraHeight; + uint8_t roeFemaleCameraHeight; + uint8_t auRaMaleCameraHeight; + uint8_t auRaFemaleCameraHeight; + uint8_t hrothgarMaleCameraHeight; + uint8_t hrothgarRoeFemaleCameraHeight; + uint8_t vieraMaleCameraHeight; + uint8_t vieraFemaleCameraHeight; - MountCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MountCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MountFlyingCondition { - uint32_t quest; + uint32_t quest; - MountFlyingCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MountFlyingCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MountSpeed { - uint32_t quest; + uint32_t quest; - MountSpeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MountSpeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MountTransient { - std::string description; - std::string descriptionEnhanced; - std::string tooltip; + std::string description; + std::string descriptionEnhanced; + std::string tooltip; - MountTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MountTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MoveTimeline { - uint16_t idle; - uint16_t moveForward; - uint16_t moveBack; - uint16_t moveLeft; - uint16_t moveRight; - uint16_t moveUp; - uint16_t moveDown; - uint16_t moveTurnLeft; - uint16_t moveTurnRight; - uint16_t extra; + uint16_t idle; + uint16_t moveForward; + uint16_t moveBack; + uint16_t moveLeft; + uint16_t moveRight; + uint16_t moveUp; + uint16_t moveDown; + uint16_t moveTurnLeft; + uint16_t moveTurnRight; + uint16_t extra; - MoveTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MoveTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct MoveVfx { - uint16_t vFXNormal; - uint16_t vFXWalking; + uint16_t vFXNormal; + uint16_t vFXWalking; - MoveVfx( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + MoveVfx( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MovieSubtitle +{ + float startTime; + float endTime; + + MovieSubtitle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MovieSubtitle500 +{ + float startTime; + float endTime; + + MovieSubtitle500( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MovieSubtitleVoyage +{ + float startTime; + float endTime; + + MovieSubtitleVoyage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MYCTemporaryItem +{ + uint8_t category; + uint8_t type; + uint32_t action; + uint8_t max; + uint8_t weight; + uint8_t order; + + MYCTemporaryItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MYCTemporaryItemUICategory +{ + std::string name; + + MYCTemporaryItemUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MYCWarResultNotebook +{ + uint8_t number; + int32_t icon; + int32_t image; + uint8_t rarity; + std::string nameJP; + std::string name; + std::string description; + + MYCWarResultNotebook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct NotebookDivision +{ + std::string name; + uint8_t notebookDivisionCategory; + uint8_t craftOpeningLevel; + uint8_t gatheringOpeningLevel; + uint32_t questUnlock; + bool cRPCraft; + bool bSMCraft; + bool aRMCraft; + bool gSMCraft; + bool lTWCraft; + bool wVRCraft; + bool aLCCraft; + bool cULCraft; + + NotebookDivision( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct NotebookDivisionCategory +{ + std::string name; + uint8_t index; + + NotebookDivisionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct NotoriousMonster +{ + int32_t bNpcBase; + uint8_t rank; + uint32_t bNpcName; + + NotoriousMonster( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct NpcEquip { - uint64_t modelMainHand; - uint8_t dyeMainHand; - uint64_t modelOffHand; - uint8_t dyeOffHand; - uint32_t modelHead; - uint8_t dyeHead; - bool visor; - uint32_t modelBody; - uint8_t dyeBody; - uint32_t modelHands; - uint8_t dyeHands; - uint32_t modelLegs; - uint8_t dyeLegs; - uint32_t modelFeet; - uint8_t dyeFeet; - uint32_t modelEars; - uint8_t dyeEars; - uint32_t modelNeck; - uint8_t dyeNeck; - uint32_t modelWrists; - uint8_t dyeWrists; - uint32_t modelLeftRing; - uint8_t dyeLeftRing; - uint32_t modelRightRing; - uint8_t dyeRightRing; + uint64_t modelMainHand; + uint8_t dyeMainHand; + uint64_t modelOffHand; + uint8_t dyeOffHand; + uint32_t modelHead; + uint8_t dyeHead; + bool visor; + uint32_t modelBody; + uint8_t dyeBody; + uint32_t modelHands; + uint8_t dyeHands; + uint32_t modelLegs; + uint8_t dyeLegs; + uint32_t modelFeet; + uint8_t dyeFeet; + uint32_t modelEars; + uint8_t dyeEars; + uint32_t modelNeck; + uint8_t dyeNeck; + uint32_t modelWrists; + uint8_t dyeWrists; + uint32_t modelLeftRing; + uint8_t dyeLeftRing; + uint32_t modelRightRing; + uint8_t dyeRightRing; - NpcEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + NpcEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct NpcYell { - std::string text; + uint8_t outputType; + float balloonTime; + bool isBalloonSlow; + bool battleTalkTime; + float text; - NpcYell( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + NpcYell( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Omen { - std::string fileName; + std::string path; + std::string pathAlly; + uint8_t type; + bool restrictYScale; + bool largeScale; - Omen( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Omen( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct OnlineStatus { - uint8_t priority; - std::string name; - uint32_t icon; + bool list; + uint8_t priority; + std::string name; + uint32_t icon; - OnlineStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + OnlineStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct OpenContent +{ + std::vector< uint16_t > content; + std::vector< uint32_t > candidateName; + + OpenContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct OpenContentCandidateName +{ + std::string name; + + OpenContentCandidateName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Opening { - std::string name; - uint32_t quest; + std::string name; + uint32_t quest; - Opening( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Opening( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Orchestrion { - std::string name; - std::string description; + std::string name; + std::string description; - Orchestrion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Orchestrion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct OrchestrionCategory { - std::string name; + std::string name; + uint8_t hideCategory; + uint8_t order; - OrchestrionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + OrchestrionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct OrchestrionPath { - std::string file; + std::string file; - OrchestrionPath( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + OrchestrionPath( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct OrchestrionUiparam { - uint8_t orchestrionCategory; - uint16_t order; + uint8_t orchestrionCategory; + uint16_t order; - OrchestrionUiparam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + OrchestrionUiparam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Ornament +{ + uint16_t model; + int16_t order; + uint16_t icon; + uint16_t transient; + std::string singular; + int8_t adjective; + std::string plural; + int8_t possessivePronoun; + int8_t startsWithVowel; + int8_t pronoun; + int8_t article; + + Ornament( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ParamGrow { - int32_t expToNext; - uint8_t additionalActions; - int32_t mpModifier; - int32_t baseSpeed; - int32_t levelModifier; - uint8_t questExpModifier; - uint16_t hpModifier; - int32_t huntingLogExpReward; + int32_t expToNext; + uint8_t additionalActions; + uint8_t applyAction; + uint16_t scaledQuestXP; + int32_t mpModifier; + int32_t baseSpeed; + int32_t levelModifier; + uint8_t questExpModifier; + uint16_t hpModifier; + int32_t huntingLogExpReward; + int32_t monsterNoteSeals; + uint16_t itemLevelSync; + uint16_t properDungeon; + uint16_t properGuildOrder; + uint16_t craftingLevel; - ParamGrow( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ParamGrow( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PartyContent { - uint8_t key; - uint16_t timeLimit; - std::string name; - uint32_t textDataStart; - uint32_t textDataEnd; - uint16_t contentFinderCondition; - uint32_t image; + uint8_t key; + uint16_t timeLimit; + bool name; + uint32_t textDataStart; + uint32_t textDataEnd; + uint16_t contentFinderCondition; + uint32_t image; - PartyContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PartyContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PartyContentCutscene { - uint32_t cutscene; + uint32_t cutscene; - PartyContentCutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PartyContentCutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PartyContentTextData { - std::string data; + std::string data; - PartyContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PartyContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct PatchMark +{ + int8_t category; + uint8_t subCategoryType; + uint16_t subCategory; + uint32_t markID; + uint8_t version; + + PatchMark( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Perform { - std::string name; - uint64_t modelKey; - uint16_t animationStart; - uint16_t animationEnd; - uint16_t animationIdle; - uint16_t animationPlay01; - uint16_t animationPlay02; - int32_t stopAnimation; - std::string instrument; - uint8_t transient; + std::string name; + uint64_t modelKey; + uint16_t animationStart; + uint16_t animationEnd; + uint16_t animationIdle; + uint16_t animationPlay01; + uint16_t animationPlay02; + int32_t stopAnimation; + std::string instrument; + uint8_t transient; - Perform( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Perform( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PerformTransient { - std::string text; + std::string text; - PerformTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PerformTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Pet { - std::string name; + std::string name; - Pet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Pet( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PetAction { - std::string name; - std::string description; - int32_t icon; - uint16_t action; - uint8_t pet; + std::string name; + std::string description; + int32_t icon; + uint16_t action; + uint8_t pet; + bool masterOrder; + bool disableOrder; - PetAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PetAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct PhysicsGroup +{ + std::vector< float > simulationTime; + std::vector< float > pS3SimulationTime; + bool resetByLookAt; + float rootFollowingGame; + float rootFollowingCutScene; + std::vector< int8_t > configSwitch; + bool forceAttractByPhysicsOff; + + PhysicsGroup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct PhysicsWind +{ + float threshold; + float amplitude; + float amplitudeFrequency; + float powerMin; + float powerMax; + float powerFrequency; + + PhysicsWind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Picture { - int32_t item; - int32_t image; - int32_t signature; + int32_t item; + int32_t image; - Picture( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Picture( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PlaceName { - std::string name; - std::string nameNoArticle; + std::string name; + std::string nameNoArticle; - PlaceName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PlaceName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PlantPotFlowerSeed { - std::vector< uint32_t > seedIcon; + std::vector< uint32_t > seedIcon; - PlantPotFlowerSeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PlantPotFlowerSeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PreHandler { - uint32_t gilShop; - uint16_t actionTimeline; + uint32_t image; + uint32_t target; + uint32_t unlockQuest; + uint32_t acceptMessage; + uint32_t denyMessage; - PreHandler( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PreHandler( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct PresetCamera +{ + uint16_t eID; + float posX; + float posY; + float posZ; + float elezen; + float lalafell; + float miqote; + float roe; + float hrothgar; + float viera; + float hyur_F; + float elezen_F; + float lalafell_F; + float miqote_F; + float roe_F; + float hrothgar_F; + float viera_F; + + PresetCamera( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct PresetCameraAdjust +{ + float hyur_M; + float hyur_F; + float elezen_M; + float elezen_F; + float lalafell_M; + float lalafell_F; + float miqote_M; + float miqote_F; + float roe_M; + float roe_F; + float hrothgar_M; + float hrothgar_F; + float viera_M; + float viera_F; + + PresetCameraAdjust( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PublicContent { - uint8_t type; - uint16_t timeLimit; - uint32_t mapIcon; - std::string name; - uint32_t textDataStart; - uint32_t textDataEnd; - uint16_t contentFinderCondition; - uint16_t additionalData; + uint8_t type; + uint16_t timeLimit; + uint32_t mapIcon; + std::string name; + uint32_t textDataStart; + uint32_t textDataEnd; + uint16_t contentFinderCondition; + uint16_t additionalData; - PublicContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PublicContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PublicContentCutscene { - uint32_t cutscene; - uint32_t cutscene2; + uint32_t cutscene; + uint32_t cutscene2; - PublicContentCutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PublicContentCutscene( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PublicContentTextData { - std::string textData; + std::string textData; - PublicContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PublicContentTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct Purify +{ + uint8_t _class; + uint8_t level; + + Purify( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PvPAction { - uint16_t action; + uint16_t action; + std::vector< bool > grandCompany; - PvPAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PvPAction( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PvPActionSort { - uint8_t name; - uint16_t action; + uint8_t name; + uint16_t action; - PvPActionSort( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + PvPActionSort( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PvPRank { - uint32_t expRequired; + uint32_t expRequired; - PvPRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PvPRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PvPSelectTrait { - std::string effect; - uint32_t icon; - int16_t value; + std::string effect; + uint32_t icon; + int16_t value; - PvPSelectTrait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PvPSelectTrait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct PvPTrait { - uint16_t trait1; - uint16_t trait2; - uint16_t trait3; + uint16_t trait1; + uint16_t trait2; + uint16_t trait3; - PvPTrait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + PvPTrait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Quest { - std::string name; - std::string id; - uint8_t expansion; - uint8_t classJobCategory0; - uint16_t classJobLevel0; - uint8_t questLevelOffset; - uint16_t levelMax; - uint8_t classJobCategory1; - uint16_t classJobLevel1; - uint8_t previousQuestJoin; - uint32_t previousQuest0; - uint32_t previousQuest1; - uint32_t previousQuest2; - uint8_t questLockJoin; - std::vector< uint32_t > questLock; - uint8_t classJobUnlock; - uint8_t grandCompany; - uint8_t grandCompanyRank; - uint8_t instanceContentJoin; - std::vector< uint32_t > instanceContent; - uint8_t festival; - uint16_t bellStart; - uint16_t bellEnd; - uint8_t beastTribe; - uint8_t beastReputationRank; - int32_t mountRequired; - bool isHouseRequired; - uint8_t deliveryQuest; - uint32_t issuerStart; - uint16_t behavior; - uint32_t targetEnd; - bool isRepeatable; - uint8_t repeatIntervalType; - uint8_t questRepeatFlag; - bool unlocksSystemContent; - uint8_t type; - uint16_t questClassJobSupply; - std::vector< std::string > scriptInstruction; - std::vector< uint32_t > scriptArg; - std::vector< uint8_t > actorSpawnSeq; - std::vector< uint8_t > actorDespawnSeq; - std::vector< uint32_t > actorSpawn; - std::vector< uint8_t > questUInt8A; - std::vector< uint8_t > questUInt8B; - std::vector< uint8_t > toDoCompleteSeq; - std::vector< uint8_t > toDoQty; - std::vector< uint32_t > toDoMainLocation; - uint8_t classJobRequired; - uint16_t expFactor; - uint32_t gilReward; - uint16_t gCSeals; - std::vector< uint8_t > itemCatalyst; - std::vector< uint8_t > itemCountCatalyst; - uint8_t itemRewardType; - std::vector< uint32_t > itemReward0; - std::vector< uint8_t > itemCountReward0; - std::vector< uint8_t > stainReward0; - std::vector< uint32_t > itemReward1; - std::vector< uint8_t > itemCountReward1; - std::vector< bool > isHQReward1; - std::vector< uint8_t > stainReward1; - uint8_t emoteReward; - uint16_t actionReward; - std::vector< uint8_t > generalActionReward; - uint8_t otherReward; - uint32_t instanceContentUnlock; - uint8_t tomestoneReward; - uint8_t tomestoneCountReward; - uint8_t reputationReward; - uint16_t placeName; - uint8_t journalGenre; - uint32_t icon; - uint32_t iconSpecial; - uint8_t eventIconType; - uint16_t sortKey; + std::string name; + std::string id; + uint8_t expansion; + uint8_t classJobCategory0; + uint16_t classJobLevel0; + uint8_t questLevelOffset; + uint8_t classJobCategory1; + uint16_t classJobLevel1; + uint8_t previousQuestJoin; + uint32_t previousQuest0; + uint32_t previousQuest1; + uint32_t previousQuest2; + uint8_t questLockJoin; + std::vector< uint32_t > questLock; + uint16_t header; + uint8_t classJobUnlock; + uint8_t grandCompany; + uint8_t grandCompanyRank; + uint8_t instanceContentJoin; + std::vector< uint32_t > instanceContent; + uint8_t festival; + uint8_t festivalBegin; + uint8_t festivalEnd; + uint16_t bellStart; + uint16_t bellEnd; + uint8_t beastTribe; + uint8_t beastReputationRank; + uint16_t beastReputationValue; + int32_t mountRequired; + bool isHouseRequired; + uint8_t deliveryQuest; + uint32_t issuerStart; + uint32_t issuerLocation; + uint16_t clientBehavior; + uint32_t targetEnd; + bool isRepeatable; + uint8_t repeatIntervalType; + uint8_t questRepeatFlag; + bool canCancel; + uint8_t type; + uint16_t questClassJobSupply; + std::vector< std::string > scriptInstruction; + std::vector< uint32_t > scriptArg; + std::vector< uint8_t > actorSpawnSeq; + std::vector< uint8_t > actorDespawnSeq; + std::vector< uint32_t > listener; + std::vector< uint8_t > questUInt8A; + std::vector< uint8_t > questUInt8B; + std::vector< uint8_t > conditionType; + std::vector< uint32_t > conditionValue; + std::vector< uint8_t > conditionOperator; + std::vector< uint16_t > behavior; + std::vector< bool > visibleBool; + std::vector< bool > conditionBool; + std::vector< bool > itemBool; + std::vector< bool > announceBool; + std::vector< bool > behaviorBool; + std::vector< bool > acceptBool; + std::vector< bool > qualifiedBool; + std::vector< bool > canTargetBool; + std::vector< uint8_t > toDoCompleteSeq; + std::vector< uint8_t > toDoQty; + std::vector< uint32_t > toDoMainLocation; + std::vector< uint8_t > countableNum; + uint8_t levelMax; + uint8_t classJobRequired; + uint16_t expFactor; + uint32_t gilReward; + uint16_t gCSeals; + std::vector< uint8_t > itemCatalyst; + std::vector< uint8_t > itemCountCatalyst; + uint8_t itemRewardType; + std::vector< uint32_t > itemReward0; + std::vector< uint8_t > itemCountReward0; + std::vector< uint8_t > stainReward0; + std::vector< uint32_t > itemReward1; + std::vector< uint8_t > itemCountReward1; + std::vector< bool > isHQReward1; + std::vector< uint8_t > stainReward1; + uint8_t emoteReward; + uint16_t actionReward; + std::vector< uint8_t > generalActionReward; + uint16_t systemReward0; + uint8_t otherReward; + uint16_t systemReward1; + uint16_t gCTypeReward; + uint32_t instanceContentUnlock; + uint8_t tomestoneReward; + uint8_t tomestoneCountReward; + uint8_t reputationReward; + uint16_t placeName; + uint8_t journalGenre; + uint32_t icon; + uint32_t iconSpecial; + bool introduction; + bool hideOfferIcon; + uint8_t eventIconType; + uint16_t sortKey; - Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct QuestBattle { - int32_t quest; - uint16_t timeLimit; - uint16_t levelSync; - std::vector< std::string > scriptInstruction; - std::vector< uint32_t > scriptValue; + int32_t quest; + uint8_t questBattleScene; + uint16_t timeLimit; + uint16_t levelSync; + std::vector< std::string > scriptInstruction; + std::vector< uint32_t > scriptValue; - QuestBattle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + QuestBattle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct QuestChapter +{ + uint32_t quest; + uint16_t redo; + + QuestChapter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct QuestClassJobReward { - uint8_t classJobCategory; - std::vector< uint32_t > rewardItem; - std::vector< uint8_t > rewardAmount; - std::vector< uint32_t > requiredItem; - std::vector< uint8_t > requiredAmount; + uint8_t classJobCategory; + std::vector< uint32_t > rewardItem; + std::vector< uint8_t > rewardAmount; + std::vector< uint32_t > requiredItem; + std::vector< uint8_t > requiredAmount; - QuestClassJobReward( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + QuestClassJobReward( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct QuestClassJobSupply { - uint8_t classJobCategory; - uint32_t eNpcResident; - uint32_t item; + uint8_t classJobCategory; + uint32_t eNpcResident; + uint32_t item; - QuestClassJobSupply( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + QuestClassJobSupply( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct QuestDerivedClass +{ + uint32_t quest; + + QuestDerivedClass( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct QuestRedo +{ + uint32_t finalQuest; + uint16_t chapter; + std::vector< uint32_t > quest; + + QuestRedo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct QuestRedoChapterUI +{ + uint32_t quest; + uint8_t category; + uint32_t questRedoUISmall; + uint32_t questRedoUILarge; + uint32_t questRedoUIWide; + std::string chapterName; + std::string chapterPart; + std::string transient; + + QuestRedoChapterUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct QuestRedoChapterUICategory +{ + std::string expac; + + QuestRedoChapterUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct QuestRedoChapterUITab +{ + uint32_t icon1; + uint32_t icon2; + std::string text; + + QuestRedoChapterUITab( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct QuestRedoIncompChapter +{ + uint16_t chapter; + + QuestRedoIncompChapter( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct QuestRepeatFlag { - uint32_t quest; + uint32_t quest; - QuestRepeatFlag( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + QuestRepeatFlag( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct QuestRewardOther { - uint32_t icon; - std::string name; + uint32_t icon; + std::string name; - QuestRewardOther( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + QuestRewardOther( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct QuickChat { - std::string nameAction; - int32_t icon; - int32_t addon; - int8_t quickChatTransient; + std::string nameAction; + int32_t icon; + int32_t addon; + int8_t quickChatTransient; - QuickChat( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + QuickChat( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct QuickChatTransient { - std::string textOutput; + std::string textOutput; - QuickChatTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + QuickChatTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Race { - std::string masculine; - std::string feminine; - int32_t rSEMBody; - int32_t rSEMHands; - int32_t rSEMLegs; - int32_t rSEMFeet; - int32_t rSEFBody; - int32_t rSEFHands; - int32_t rSEFLegs; - int32_t rSEFFeet; + std::string masculine; + std::string feminine; + int32_t rSEMBody; + int32_t rSEMHands; + int32_t rSEMLegs; + int32_t rSEMFeet; + int32_t rSEFBody; + int32_t rSEFHands; + int32_t rSEFLegs; + int32_t rSEFFeet; + uint8_t exPac; - Race( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Race( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RacingChocoboItem { - int32_t item; - uint8_t category; - std::vector< uint8_t > param; + int32_t item; + uint8_t category; + std::vector< uint8_t > param; - RacingChocoboItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RacingChocoboItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RacingChocoboName { - std::string name; + std::string name; - RacingChocoboName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RacingChocoboName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RacingChocoboNameCategory { - uint8_t sortKey; - std::string name; + uint8_t sortKey; + std::string name; - RacingChocoboNameCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RacingChocoboNameCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RacingChocoboNameInfo { - uint8_t racingChocoboNameCategory; + uint8_t racingChocoboNameCategory; - RacingChocoboNameInfo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RacingChocoboNameInfo( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RacingChocoboParam { - std::string name; + std::string name; - RacingChocoboParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RacingChocoboParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RecastNavimesh { - float tileSize; - float cellSize; - float cellHeight; - float agentHeight; - float agentRadius; - float agentMaxClimb; - float agentMaxSlope; - float regionMinSize; - float regionMergedSize; - float maxEdgeLength; - float maxEdgeError; - float vertsPerPoly; - float detailMeshSampleDistance; - float detailMeshMaxSampleError; + float tileSize; + float cellSize; + float cellHeight; + float agentHeight; + float agentRadius; + float agentMaxClimb; + float agentMaxSlope; + float regionMinSize; + float regionMergedSize; + float maxEdgeLength; + float maxEdgeError; + float vertsPerPoly; + float detailMeshSampleDistance; + float detailMeshMaxSampleError; - RecastNavimesh( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RecastNavimesh( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Recipe { - int32_t craftType; - uint16_t recipeLevelTable; - int32_t itemResult; - uint8_t amountResult; - uint8_t recipeElement; - bool isSecondary; - uint16_t difficultyFactor; - uint16_t qualityFactor; - uint16_t durabilityFactor; - uint16_t requiredCraftsmanship; - uint16_t requiredControl; - uint16_t quickSynthCraftsmanship; - uint16_t quickSynthControl; - uint16_t secretRecipeBook; - bool canQuickSynth; - bool canHq; - bool expRewarded; - int32_t statusRequired; - int32_t itemRequired; - bool isSpecializationRequired; - uint16_t patchNumber; + int32_t number; + int32_t craftType; + uint16_t recipeLevelTable; + int32_t itemResult; + uint8_t amountResult; + bool isSecondary; + uint8_t materialQualityFactor; + uint16_t difficultyFactor; + uint16_t qualityFactor; + uint16_t durabilityFactor; + uint16_t requiredCraftsmanship; + uint16_t requiredControl; + uint16_t quickSynthCraftsmanship; + uint16_t quickSynthControl; + uint16_t secretRecipeBook; + bool canQuickSynth; + bool canHq; + bool expRewarded; + int32_t statusRequired; + int32_t itemRequired; + bool isSpecializationRequired; + bool isExpert; + uint16_t patchNumber; - Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); -}; - -struct RecipeElement -{ - std::string name; - - RecipeElement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RecipeLevelTable { - uint8_t classJobLevel; - uint8_t stars; - uint16_t suggestedCraftsmanship; - uint16_t difficulty; - int16_t quality; - uint16_t durability; + uint8_t classJobLevel; + uint8_t stars; + uint16_t suggestedCraftsmanship; + uint16_t suggestedControl; + uint16_t difficulty; + uint32_t quality; + uint16_t durability; - RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct RecipeLookup +{ + uint16_t cRP; + uint16_t bSM; + uint16_t aRM; + uint16_t gSM; + uint16_t lTW; + uint16_t wVR; + uint16_t aLC; + uint16_t cUL; + + RecipeLookup( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RecipeNotebookList { - std::vector< int32_t > recipe; + std::vector< int32_t > recipe; - RecipeNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RecipeNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RecommendContents { - int32_t level; + int32_t level; + uint8_t classJob; + uint8_t minLevel; + uint8_t maxLevel; - RecommendContents( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RecommendContents( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Relic { - uint32_t itemAtma; - uint32_t itemAnimus; - int32_t icon; + uint32_t itemAtma; + uint32_t itemAnimus; + int32_t icon; + uint16_t materia0; + uint8_t noteMain0; + uint8_t noteSub0; + uint8_t noteSelection10; + uint16_t materia1; + uint8_t noteMain1; + uint8_t noteSub1; + uint8_t noteSelection1; + uint16_t materia2; + uint8_t noteMain2; + uint8_t noteSub2; + uint16_t materia3; + uint8_t noteSelection3; - Relic( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Relic( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Relic3 { - uint32_t itemAnimus; - uint32_t itemScroll; - uint8_t materiaLimit; - uint32_t itemNovus; - int32_t icon; + uint32_t itemAnimus; + uint32_t itemScroll; + uint8_t materiaLimit; + uint32_t itemNovus; + int32_t icon; - Relic3( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Relic3( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RelicItem { - uint32_t gladiatorItem; - uint32_t pugilistItem; - uint32_t marauderItem; - uint32_t lancerItem; - uint32_t archerItem; - uint32_t conjurerItem; - uint32_t thaumaturgeItem; - uint32_t arcanistSMNItem; - uint32_t arcanistSCHItem; - uint32_t shieldItem; - uint32_t rogueItem; + uint32_t gladiatorItem; + uint32_t pugilistItem; + uint32_t marauderItem; + uint32_t lancerItem; + uint32_t archerItem; + uint32_t conjurerItem; + uint32_t thaumaturgeItem; + uint32_t arcanistSMNItem; + uint32_t arcanistSCHItem; + uint32_t shieldItem; + uint32_t rogueItem; - RelicItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RelicItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RelicNote { - uint32_t eventItem; - std::vector< uint16_t > monsterNoteTargetNM; - std::vector< uint16_t > leve; + uint32_t eventItem; + std::vector< uint16_t > monsterNoteTargetNM; + std::vector< uint16_t > leve; - RelicNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RelicNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RelicNoteCategory { - std::string text; + std::string text; - RelicNoteCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RelicNoteCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Resident { - uint64_t model; - int32_t npcYell; - uint8_t residentMotionType; + uint64_t model; + int32_t npcYell; + uint16_t addedIn53; + uint8_t residentMotionType; - Resident( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + Resident( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RetainerTask { - bool isRandom; - uint8_t classJobCategory; - uint8_t retainerLevel; - uint16_t retainerTaskParameter; - uint16_t ventureCost; - uint16_t maxTimemin; - int32_t experience; - uint16_t requiredItemLevel; - uint16_t requiredGathering; - uint16_t task; + bool isRandom; + uint8_t classJobCategory; + uint8_t retainerLevel; + uint16_t retainerTaskParameter; + uint16_t ventureCost; + uint16_t maxTimemin; + int32_t experience; + uint16_t requiredItemLevel; + uint8_t conditionParam0; + uint8_t conditionParam1; + uint16_t requiredGathering; + uint16_t task; - RetainerTask( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RetainerTask( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RetainerTaskLvRange { - uint8_t min; - uint8_t max; + uint8_t min; + uint8_t max; - RetainerTaskLvRange( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RetainerTaskLvRange( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RetainerTaskNormal { - int32_t item; - uint8_t quantity0; - uint8_t quantity1; - uint8_t quantity2; - int16_t gatheringLog; - int16_t fishingLog; + int32_t item; + uint8_t quantity0; + uint8_t quantity1; + uint8_t quantity2; + int16_t gatheringLog; + int16_t fishingLog; - RetainerTaskNormal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RetainerTaskNormal( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RetainerTaskParameter { - std::vector< int16_t > itemLevelDoW; - std::vector< int16_t > gatheringDoL; - std::vector< int16_t > gatheringFSH; + std::vector< int16_t > itemLevelDoW; + std::vector< int16_t > gatheringDoL; + std::vector< int16_t > gatheringFSH; - RetainerTaskParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RetainerTaskParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RetainerTaskRandom { - std::string name; - int16_t requirement; + std::string name; + int16_t requirement; - RetainerTaskRandom( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RetainerTaskRandom( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct RideShooting +{ + uint16_t gFateRideShooting; + uint16_t startText; + std::vector< uint32_t > popRange; + std::vector< uint32_t > eNpc; + std::vector< uint8_t > eNpcScale; + + RideShooting( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct RideShootingTextData +{ + std::string string; + + RideShootingTextData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct RPParameter { - uint16_t bNpcName; - uint8_t classJob; + uint16_t bNpcName; + uint8_t classJob; - RPParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + RPParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; -struct Salvage +struct SatisfactionArbitration { - uint16_t optimalSkill; + uint32_t quest; - Salvage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SatisfactionArbitration( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SatisfactionNpc { - int32_t npc; - int32_t questRequired; - uint8_t deliveriesPerWeek; - std::vector< int32_t > supplyIndex; - std::vector< uint16_t > satisfactionRequired; - int32_t icon; + int32_t npc; + int32_t questRequired; + uint8_t levelUnlock; + uint8_t deliveriesPerWeek; + std::vector< int32_t > supplyIndex; + std::vector< uint16_t > satisfactionRequired; + int32_t icon; + uint8_t addedIn530; + uint8_t addedIn531; - SatisfactionNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SatisfactionNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SatisfactionSupply { - uint8_t slot; - uint8_t probability; - int32_t item; - uint16_t collectabilityLow; - uint16_t collectabilityMid; - uint16_t collectabilityHigh; - uint16_t reward; + uint8_t slot; + uint8_t probability; + int32_t item; + uint16_t collectabilityLow; + uint16_t collectabilityMid; + uint16_t collectabilityHigh; + uint16_t reward; - SatisfactionSupply( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + SatisfactionSupply( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SatisfactionSupplyReward { - uint16_t satisfactionLow; - uint16_t satisfactionMid; - uint16_t satisfactionHigh; - uint16_t gilLow; - uint16_t gilMid; - uint16_t gilHigh; + uint16_t satisfactionLow; + uint16_t satisfactionMid; + uint16_t satisfactionHigh; + uint16_t gilLow; + uint16_t gilMid; + uint16_t gilHigh; - SatisfactionSupplyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SatisfactionSupplyReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ScenarioTree { - uint8_t type; - uint16_t image; + uint8_t type; + uint16_t image; - ScenarioTree( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ScenarioTree( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ScenarioTreeTips { - uint32_t tips1; - uint32_t tips2; + uint32_t tips1; + uint32_t tips2; - ScenarioTreeTips( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ScenarioTreeTips( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ScenarioTreeTipsClassQuest { - uint32_t quest; - uint16_t requiredLevel; - uint8_t requiredExpansion; - uint32_t requiredQuest; + uint32_t quest; + uint16_t requiredLevel; + uint8_t requiredExpansion; + uint32_t requiredQuest; - ScenarioTreeTipsClassQuest( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); -}; - -struct ScenarioTreeTipsQuest -{ - uint32_t level; - - ScenarioTreeTipsQuest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ScenarioTreeTipsClassQuest( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ScenarioType { - std::string type; + std::string type; - ScenarioType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ScenarioType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ScreenImage { - uint32_t image; + uint32_t image; + int16_t jingle; + int8_t type; + bool lang; - ScreenImage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + ScreenImage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SecretRecipeBook { - int32_t item; - std::string name; + int32_t item; + std::string name; - SecretRecipeBook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SecretRecipeBook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SkyIsland2Mission { - uint32_t item1; - uint32_t item2; - uint16_t objective1; - uint8_t requiredAmount1; - uint16_t objective2; - uint8_t requiredAmount2; - uint16_t objective3; - uint32_t image; + uint32_t item1; + uint32_t item2; + uint16_t placeName; + uint16_t objective1; + uint32_t popRange0; + uint8_t requiredAmount1; + uint16_t objective2; + uint32_t popRange1; + uint8_t requiredAmount2; + uint16_t objective3; + uint32_t popRange2; + uint32_t image; - SkyIsland2Mission( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SkyIsland2Mission( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SkyIsland2MissionDetail { - uint8_t type; - uint8_t range; - uint32_t eObj; - std::string objective; + uint8_t type; + uint8_t range; + uint32_t eObj; + std::string objective; - SkyIsland2MissionDetail( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SkyIsland2MissionDetail( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SkyIsland2MissionType { - bool type; + bool type; - SkyIsland2MissionType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SkyIsland2MissionType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SkyIsland2RangeType { - uint8_t type; + uint8_t type; - SkyIsland2RangeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SkyIsland2RangeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct SnipeTalk +{ + uint16_t name; + std::string text; + + SnipeTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct SnipeTalkName +{ + std::string name; + + SnipeTalkName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SpearfishingItem { - std::string description; - int32_t item; - uint16_t gatheringItemLevel; - uint16_t territoryType; - bool isVisible; + std::string description; + int32_t item; + uint16_t gatheringItemLevel; + uint8_t fishingRecordType; + uint16_t territoryType; + bool isVisible; - SpearfishingItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SpearfishingItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SpearfishingNotebook { - uint8_t gatheringLevel; - int32_t territoryType; - int16_t x; - int16_t y; - uint16_t radius; - uint16_t placeName; - uint16_t gatheringPointBase; + uint8_t gatheringLevel; + int32_t territoryType; + int16_t x; + int16_t y; + uint16_t radius; + uint16_t placeName; + uint16_t gatheringPointBase; - SpearfishingNotebook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SpearfishingNotebook( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SpearfishingRecordPage { - int32_t placeName; - int32_t image; + int32_t placeName; + int32_t image; - SpearfishingRecordPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SpearfishingRecordPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SpecialShop { - std::string name; - std::vector< int32_t > questItem; - std::vector< int32_t > unknown; - std::vector< int32_t > achievementUnlock; - std::vector< uint16_t > patchNumber; - uint32_t questUnlock; - int32_t questShop; - int32_t notCompleteText; - int32_t completeText; + std::string name; + std::vector< int32_t > questItem; + std::vector< int32_t > unknown; + std::vector< int32_t > achievementUnlock; + std::vector< uint16_t > patchNumber; + bool useCurrencyType; + uint32_t questUnlock; + int32_t completeText; + int32_t notCompleteText; - SpecialShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SpecialShop( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SpecialShopItemCategory { - std::string name; + std::string name; - SpecialShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SpecialShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Stain { - uint32_t color; - uint8_t shade; - std::string name; + uint32_t color; + uint8_t shade; + std::string name; - Stain( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Stain( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct StainTransient { - uint32_t item1; - uint32_t item2; + uint32_t item1; + uint32_t item2; - StainTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + StainTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Status { - std::string name; - std::string description; - uint16_t icon; - uint8_t maxStacks; - uint8_t category; - uint8_t hitEffect; - uint8_t vFX; - bool lockMovement; - bool lockActions; - bool lockControl; - bool transfiguration; - bool canDispel; - bool inflictedByActor; - bool isPermanent; - bool isFcBuff; - bool invisibility; + std::string name; + std::string description; + uint16_t icon; + uint8_t maxStacks; + uint8_t category; + uint8_t hitEffect; + uint8_t vFX; + bool lockMovement; + bool lockActions; + bool lockControl; + bool transfiguration; + bool canDispel; + bool inflictedByActor; + bool isPermanent; + uint8_t partyListPriority; + uint16_t log; + bool isFcBuff; + bool invisibility; - Status( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Status( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct StatusHitEffect { - uint16_t location; + uint16_t location; - StatusHitEffect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + StatusHitEffect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct StatusLoopVFX { - uint16_t vFX; - uint16_t vFX2; - uint16_t vFX3; + uint16_t vFX; + uint16_t vFX2; + uint16_t vFX3; - StatusLoopVFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + StatusLoopVFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Story { + std::string script; + std::vector< std::string > instruction; + std::vector< uint32_t > argument; + std::vector< uint16_t > sequence; + std::vector< uint8_t > completedQuestOperator; + std::vector< uint32_t > completedQuest0; + std::vector< uint32_t > completedQuest1; + std::vector< uint32_t > completedQuest2; + std::vector< uint8_t > acceptedQuestOperator; + std::vector< uint32_t > acceptedQuest0; + std::vector< uint8_t > acceptedQuestSequence0; + std::vector< uint32_t > acceptedQuest1; + std::vector< uint8_t > acceptedQuestSequence1; + std::vector< uint32_t > acceptedQuest2; + std::vector< uint8_t > acceptedQuestSequence2; + std::vector< uint32_t > layerSet0; + std::vector< uint32_t > layerSet1; + std::vector< uint16_t > sequenceBegin; + std::vector< uint16_t > sequenceEnd; + std::vector< uint32_t > listener; + uint16_t layerSetTerritoryType0; + uint16_t layerSetTerritoryType1; - Story( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Story( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SubmarineExploration { - std::string destination; - std::string location; - uint8_t rankReq; - uint8_t ceruleumTankReq; - uint16_t durationmin; - uint8_t distanceForSurvey; - uint32_t expReward; + std::string destination; + std::string location; + uint8_t map; + uint8_t stars; + uint8_t rankReq; + uint8_t ceruleumTankReq; + uint16_t durationmin; + uint8_t distanceForSurvey; + uint32_t expReward; - SubmarineExploration( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SubmarineExploration( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct SubmarineMap +{ + std::string name; + uint32_t image; + + SubmarineMap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SubmarinePart { - uint8_t slot; - uint8_t rank; - uint8_t components; - int16_t surveillance; - int16_t retrieval; - int16_t speed; - int16_t range; - int16_t favor; - uint8_t repairMaterials; + uint8_t slot; + uint8_t rank; + uint8_t components; + int16_t surveillance; + int16_t retrieval; + int16_t speed; + int16_t range; + int16_t favor; + uint8_t repairMaterials; - SubmarinePart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SubmarinePart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SubmarineRank { - uint16_t rank; - uint32_t expToNext; + uint16_t capacity; + uint32_t expToNext; + uint8_t surveillanceBonus; + uint8_t retrievalBonus; + uint8_t speedBonus; + uint8_t rangeBonus; + uint8_t favorBonus; - SubmarineRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SubmarineRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct SwitchTalk { - std::vector< uint32_t > quest; - std::vector< uint32_t > defaultTalk; - SwitchTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + SwitchTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct SwitchTalkVariation +{ + uint32_t quest0; + uint32_t quest1; + uint32_t defaultTalk; + + SwitchTalkVariation( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TerritoryType { - std::string name; - std::string bg; - uint16_t placeNameRegion; - uint16_t placeNameZone; - uint16_t placeName; - uint16_t map; - uint8_t territoryIntendedUse; - uint8_t weatherRate; - uint32_t arrayEventHandler; - uint16_t questBattle; - int32_t aetheryte; + std::string name; + std::string bg; + uint8_t battalionMode; + uint16_t placeNameRegion; + uint16_t placeNameZone; + uint16_t placeName; + uint16_t map; + uint8_t loadingImage; + uint8_t exclusiveType; + uint8_t territoryIntendedUse; + uint8_t weatherRate; + bool pCSearch; + bool stealth; + bool mount; + uint16_t bGM; + int32_t placeNameRegionIcon; + int32_t placeNameIcon; + uint32_t arrayEventHandler; + uint16_t questBattle; + int32_t aetheryte; + int32_t fixedTime; + uint16_t resident; + int8_t achievementIndex; + bool isPvpZone; + uint8_t exVersion; + uint8_t addedIn53; + uint8_t mountSpeed; - TerritoryType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TerritoryType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct TerritoryTypeTransient +{ + int16_t offsetZ; + + TerritoryTypeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TextCommand { - std::string command; - std::string shortCommand; - std::string description; - std::string alias; - std::string shortAlias; + std::string command; + std::string shortCommand; + std::string description; + std::string alias; + std::string shortAlias; - TextCommand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TextCommand( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Title { - std::string masculine; - std::string feminine; - bool isPrefix; - uint16_t order; + std::string masculine; + std::string feminine; + bool isPrefix; + uint16_t order; - Title( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Title( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Tomestones { - uint16_t weeklyLimit; + uint16_t weeklyLimit; - Tomestones( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Tomestones( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TomestonesItem { - int32_t item; - int32_t tomestones; + int32_t item; + int32_t tomestones; - TomestonesItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TomestonesItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TopicSelect { - std::string name; + std::string name; - TopicSelect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TopicSelect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Town { - std::string name; - int32_t icon; + std::string name; + int32_t icon; - Town( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Town( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Trait { - std::string name; - int32_t icon; - uint8_t classJob; - uint8_t level; - uint32_t quest; - int16_t value; - uint8_t classJobCategory; + std::string name; + int32_t icon; + uint8_t classJob; + uint8_t level; + uint32_t quest; + int16_t value; + uint8_t classJobCategory; - Trait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Trait( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TraitRecast { - uint16_t trait; - uint16_t action; - uint16_t timeds; + uint16_t trait; + uint16_t action; + uint16_t timeds; - TraitRecast( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TraitRecast( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TraitTransient { - std::string description; + std::string description; - TraitTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TraitTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Transformation { - int16_t model; - int32_t bNpcCustomize; - std::vector< uint16_t > action; - float speed; - float scale; - bool isPvP; - bool isEvent; - bool playerCamera; + int16_t model; + uint16_t bNpcName; + int32_t bNpcCustomize; + int32_t npcEquip; + bool exHotbarEnableConfig; + uint16_t action0; + uint16_t action1; + uint16_t action2; + uint16_t action3; + uint16_t action4; + uint16_t action5; + uint16_t rPParameter; + uint16_t removeAction; + float speed; + float scale; + bool isPvP; + bool isEvent; + bool playerCamera; + uint16_t startVFX; + uint16_t endVFX; + uint32_t action6; + uint16_t action7; - Transformation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Transformation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Treasure { - uint32_t item; + uint32_t item; - Treasure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Treasure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TreasureHuntRank { - uint32_t icon; - int32_t itemName; - int32_t keyItemName; - int32_t instanceMap; - uint8_t maxPartySize; - uint8_t minPartySize; + uint32_t icon; + int32_t itemName; + int32_t keyItemName; + int32_t instanceMap; + uint8_t maxPartySize; + uint8_t treasureHuntTexture; - TreasureHuntRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TreasureHuntRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct TreasureModel +{ + std::string path; + + TreasureModel( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct TreasureSpot +{ + int32_t location; + float mapOffsetX; + float mapOffsetY; + + TreasureSpot( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Tribe { - std::string masculine; - std::string feminine; - int8_t sTR; - int8_t dEX; - int8_t vIT; - int8_t iNT; - int8_t mND; - int8_t pIE; + std::string masculine; + std::string feminine; + int8_t hp; + int8_t mp; + int8_t sTR; + int8_t vIT; + int8_t dEX; + int8_t iNT; + int8_t mND; + int8_t pIE; - Tribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Tribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TripleTriad { - std::vector< uint16_t > tripleTriadCardFixed; - std::vector< uint16_t > tripleTriadCardVariable; - std::vector< uint8_t > tripleTriadRule; - bool usesRegionalRules; - uint16_t fee; - uint8_t previousQuestJoin; - std::vector< uint32_t > previousQuest; - uint16_t startTime; - uint16_t endTime; - uint32_t defaultTalkChallenge; - uint32_t defaultTalkUnavailable; - uint32_t defaultTalkNPCWin; - uint32_t defaultTalkDraw; - uint32_t defaultTalkPCWin; - std::vector< uint32_t > itemPossibleReward; + std::vector< uint16_t > tripleTriadCardFixed; + std::vector< uint16_t > tripleTriadCardVariable; + std::vector< uint8_t > tripleTriadRule; + bool usesRegionalRules; + uint16_t fee; + uint8_t previousQuestJoin; + std::vector< uint32_t > previousQuest; + uint16_t startTime; + uint16_t endTime; + uint32_t defaultTalkChallenge; + uint32_t defaultTalkUnavailable; + uint32_t defaultTalkNPCWin; + uint32_t defaultTalkDraw; + uint32_t defaultTalkPCWin; + std::vector< uint32_t > itemPossibleReward; - TripleTriad( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TripleTriad( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TripleTriadCard { - std::string name; - int8_t startsWithVowel; - std::string description; + std::string name; + int8_t startsWithVowel; + std::string description; - TripleTriadCard( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TripleTriadCard( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TripleTriadCardRarity { - uint8_t stars; + uint8_t stars; - TripleTriadCardRarity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TripleTriadCardRarity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TripleTriadCardResident { - uint8_t top; - uint8_t bottom; - uint8_t left; - uint8_t right; - uint8_t tripleTriadCardRarity; - uint8_t tripleTriadCardType; - uint16_t saleValue; - uint8_t sortKey; + uint8_t top; + uint8_t bottom; + uint8_t left; + uint8_t right; + uint8_t tripleTriadCardRarity; + uint8_t tripleTriadCardType; + uint16_t saleValue; + uint8_t sortKey; - TripleTriadCardResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TripleTriadCardResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TripleTriadCardType { - std::string name; + std::string name; - TripleTriadCardType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TripleTriadCardType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TripleTriadCompetition { - std::string name; + std::string name; - TripleTriadCompetition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TripleTriadCompetition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TripleTriadRule { - std::string name; + std::string name; - TripleTriadRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TripleTriadRule( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Tutorial { - uint32_t exp; - uint32_t gil; - uint32_t rewardTank; - uint32_t rewardMelee; - uint32_t rewardRanged; - uint32_t objective; + uint32_t exp; + uint32_t gil; + uint32_t rewardTank; + uint32_t rewardMelee; + uint32_t rewardRanged; + uint32_t objective; - Tutorial( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Tutorial( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TutorialDPS { - uint8_t objective; + uint8_t objective; - TutorialDPS( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TutorialDPS( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TutorialHealer { - uint8_t objective; + uint8_t objective; - TutorialHealer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TutorialHealer( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct TutorialTank { - uint8_t objective; + uint8_t objective; - TutorialTank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + TutorialTank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct UIColor { - uint32_t uIForeground; - uint32_t uIGlow; + uint32_t uIForeground; + uint32_t uIGlow; - UIColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + UIColor( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct VaseFlower { - uint32_t item; + uint32_t item; - VaseFlower( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + VaseFlower( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct VFX { - std::string location; + std::string location; - VFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + VFX( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Warp { - uint32_t level; - uint16_t placeName; - uint32_t conditionSuccessEvent; - uint32_t conditionFailEvent; - uint32_t confirmEvent; - uint16_t warpCondition; - uint16_t warpLogic; + uint32_t popRange; + uint16_t territoryType; + uint32_t conditionSuccessEvent; + uint32_t conditionFailEvent; + uint32_t confirmEvent; + uint16_t warpCondition; + uint16_t warpLogic; + uint16_t startCutscene; + uint16_t endCutscene; + bool canSkipCutscene; + std::string name; + std::string question; - Warp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Warp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WarpCondition { - uint32_t requiredQuest1; - uint32_t requiredQuest2; - uint32_t dRequiredQuest3; - uint32_t requiredQuest4; + uint16_t gil; + uint8_t completeParam; + uint32_t requiredQuest1; + uint32_t requiredQuest2; + uint32_t dRequiredQuest3; + uint32_t requiredQuest4; + uint16_t questReward; + uint16_t classLevel; - WarpCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WarpCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WarpLogic { - std::string warpName; - std::vector< std::string > function; - std::vector< uint32_t > argument; - std::string question; - std::string responseYes; - std::string responseNo; + std::string warpName; + bool canSkipCutscene; + std::vector< std::string > function; + std::string question; + std::string responseYes; + std::string responseNo; - WarpLogic( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WarpLogic( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct WeaponTimeline +{ + std::string file; + int16_t nextWeaponTimeline; + + WeaponTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct Weather { - int32_t icon; - std::string name; - std::string description; + int32_t icon; + std::string name; + std::string description; - Weather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + Weather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeatherGroup { - int32_t weatherRate; + int32_t weatherRate; - WeatherGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + WeatherGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeatherRate { - WeatherRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WeatherRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeatherReportReplace { - uint16_t placeNameSub; - uint16_t placeNameParent; + uint16_t placeNameSub; + uint16_t placeNameParent; - WeatherReportReplace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WeatherReportReplace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeddingBGM { - uint16_t song; - std::string songName; + uint16_t song; + std::string songName; - WeddingBGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WeddingBGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeeklyBingoOrderData { - uint32_t type; - uint32_t data; - uint8_t text; - uint32_t icon; + uint32_t type; + uint32_t data; + uint8_t text; + uint32_t icon; - WeeklyBingoOrderData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WeeklyBingoOrderData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeeklyBingoRewardData { - uint32_t rewardItem2; - bool rewardHQ2; - uint16_t rewardQuantity2; + uint32_t rewardItem2; + bool rewardHQ2; + uint16_t rewardQuantity2; - WeeklyBingoRewardData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WeeklyBingoRewardData( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeeklyBingoText { - std::string description; + std::string description; - WeeklyBingoText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WeeklyBingoText( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WeeklyLotBonus { - std::vector< uint8_t > weeklyLotBonusThreshold; + std::vector< uint8_t > weeklyLotBonusThreshold; - WeeklyLotBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WeeklyLotBonus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct World { - std::string name; - uint8_t dataCenter; - bool isPublic; + std::string name; + uint8_t userType; + uint8_t dataCenter; + bool isPublic; - World( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + World( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct WorldDCGroupType { - std::string name; - uint8_t region; + std::string name; + uint8_t region; - WorldDCGroupType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + WorldDCGroupType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct YardCatalogCategory +{ + std::string category; + + YardCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct YardCatalogItemList +{ + uint16_t category; + int32_t item; + uint16_t patch; + + YardCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct YKW { - uint32_t item; - std::vector< uint16_t > location; + uint32_t item; + std::vector< uint16_t > location; - YKW( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); + YKW( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; struct ZoneSharedGroup { - uint32_t quest1; - uint32_t quest2; - uint32_t quest3; - uint32_t quest4; - uint32_t quest5; - uint32_t quest6; + uint32_t quest1; + uint32_t quest2; + uint32_t quest3; + uint32_t quest4; + uint32_t quest5; + uint32_t quest6; - ZoneSharedGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); + ZoneSharedGroup( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -5460,26 +7535,62 @@ struct ZoneSharedGroup class ExdDataGenerated { public: - ExdDataGenerated(); - ~ExdDataGenerated(); + ExdDataGenerated(); + ~ExdDataGenerated(); - bool init( const std::string& path ); + bool init( const std::string& path ); - xiv::exd::Exd setupDatAccess( const std::string& name, xiv::exd::Language lang ); + xiv::exd::Exd setupDatAccess( const std::string& name, xiv::exd::Language lang ); - template< class T > - T getField( std::vector< xiv::exd::Field >& fields, uint32_t index ) - { - return std::get< T >( fields.at( index ) ); - } + template< class T > + T getField( std::vector< xiv::exd::Field >& fields, uint32_t index ) + { + return std::get< T >( fields.at( index ) ); + } - void loadIdList( xiv::exd::Exd& data, std::set< uint32_t >& outIdList ); + void loadIdList( xiv::exd::Exd& data, std::set< uint32_t >& outIdList ); - std::shared_ptr< xiv::dat::GameData > m_data; - std::shared_ptr< xiv::exd::ExdData > m_exd_data; + std::shared_ptr< xiv::dat::GameData > m_data; + std::shared_ptr< xiv::exd::ExdData > m_exd_data; + + std::shared_ptr< xiv::dat::GameData > getGameData() + { + return m_data; + } + + template< class T > + std::shared_ptr< T > get( uint32_t id ) + { + try + { + auto info = std::make_shared< T >( id, this ); + return info; + } + catch( ... ) + { + return nullptr; + } + return nullptr; + } + + template< class T > + std::shared_ptr< T > get( uint32_t id, uint32_t slotId ) + { + try + { + auto info = std::make_shared< T >( id, slotId, this ); + return info; + } + catch( ... ) + { + return nullptr; + } + return nullptr; + } xiv::exd::Exd m_AchievementDat; xiv::exd::Exd m_AchievementCategoryDat; + xiv::exd::Exd m_AchievementHideConditionDat; xiv::exd::Exd m_AchievementKindDat; xiv::exd::Exd m_ActionDat; xiv::exd::Exd m_ActionCastTimelineDat; @@ -5498,7 +7609,6 @@ struct ZoneSharedGroup xiv::exd::Exd m_ActivityFeedGroupCaptionsDat; xiv::exd::Exd m_ActivityFeedImagesDat; xiv::exd::Exd m_AddonDat; - xiv::exd::Exd m_AddonHudDat; xiv::exd::Exd m_AdventureDat; xiv::exd::Exd m_AdventureExPhaseDat; xiv::exd::Exd m_AetherCurrentDat; @@ -5511,6 +7621,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_AirshipExplorationParamTypeDat; xiv::exd::Exd m_AirshipExplorationPartDat; xiv::exd::Exd m_AirshipExplorationPointDat; + xiv::exd::Exd m_AnimationLODDat; xiv::exd::Exd m_AnimaWeapon5Dat; xiv::exd::Exd m_AnimaWeapon5ParamDat; xiv::exd::Exd m_AnimaWeapon5PatternGroupDat; @@ -5532,15 +7643,21 @@ struct ZoneSharedGroup xiv::exd::Exd m_ArrayEventHandlerDat; xiv::exd::Exd m_AttackTypeDat; xiv::exd::Exd m_BacklightColorDat; + xiv::exd::Exd m_BallistaDat; xiv::exd::Exd m_BalloonDat; xiv::exd::Exd m_BaseParamDat; xiv::exd::Exd m_BattleLeveDat; + xiv::exd::Exd m_BattleLeveRuleDat; xiv::exd::Exd m_BeastRankBonusDat; xiv::exd::Exd m_BeastReputationRankDat; xiv::exd::Exd m_BeastTribeDat; xiv::exd::Exd m_BehaviorDat; + xiv::exd::Exd m_BehaviorPathDat; + xiv::exd::Exd m_BenchmarkOverrideEquipmentDat; xiv::exd::Exd m_BGMDat; xiv::exd::Exd m_BGMFadeDat; + xiv::exd::Exd m_BGMFadeTypeDat; + xiv::exd::Exd m_BGMSceneDat; xiv::exd::Exd m_BGMSituationDat; xiv::exd::Exd m_BGMSwitchDat; xiv::exd::Exd m_BGMSystemDefineDat; @@ -5549,6 +7666,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_BNpcCustomizeDat; xiv::exd::Exd m_BNpcNameDat; xiv::exd::Exd m_BNpcPartsDat; + xiv::exd::Exd m_BNpcStateDat; xiv::exd::Exd m_BuddyDat; xiv::exd::Exd m_BuddyActionDat; xiv::exd::Exd m_BuddyEquipDat; @@ -5558,7 +7676,11 @@ struct ZoneSharedGroup xiv::exd::Exd m_CabinetDat; xiv::exd::Exd m_CabinetCategoryDat; xiv::exd::Exd m_CalendarDat; + xiv::exd::Exd m_CarryDat; + xiv::exd::Exd m_ChannelingDat; + xiv::exd::Exd m_CharaMakeClassEquipDat; xiv::exd::Exd m_CharaMakeCustomizeDat; + xiv::exd::Exd m_CharaMakeNameDat; xiv::exd::Exd m_CharaMakeTypeDat; xiv::exd::Exd m_ChocoboRaceDat; xiv::exd::Exd m_ChocoboRaceAbilityDat; @@ -5571,8 +7693,15 @@ struct ZoneSharedGroup xiv::exd::Exd m_ChocoboRaceWeatherDat; xiv::exd::Exd m_ChocoboTaxiDat; xiv::exd::Exd m_ChocoboTaxiStandDat; + xiv::exd::Exd m_CircleActivityDat; xiv::exd::Exd m_ClassJobDat; xiv::exd::Exd m_ClassJobCategoryDat; + xiv::exd::Exd m_CollectablesShopDat; + xiv::exd::Exd m_CollectablesShopItemDat; + xiv::exd::Exd m_CollectablesShopItemGroupDat; + xiv::exd::Exd m_CollectablesShopRefineDat; + xiv::exd::Exd m_CollectablesShopRewardItemDat; + xiv::exd::Exd m_CollectablesShopRewardScripDat; xiv::exd::Exd m_CompanionDat; xiv::exd::Exd m_CompanionMoveDat; xiv::exd::Exd m_CompanionTransientDat; @@ -5585,8 +7714,12 @@ struct ZoneSharedGroup xiv::exd::Exd m_CompanyCraftSequenceDat; xiv::exd::Exd m_CompanyCraftSupplyItemDat; xiv::exd::Exd m_CompanyCraftTypeDat; + xiv::exd::Exd m_CompanyLeveDat; + xiv::exd::Exd m_CompanyLeveRuleDat; xiv::exd::Exd m_CompleteJournalDat; xiv::exd::Exd m_CompleteJournalCategoryDat; + xiv::exd::Exd m_ConditionDat; + xiv::exd::Exd m_ConfigKeyDat; xiv::exd::Exd m_ContentCloseCycleDat; xiv::exd::Exd m_ContentExActionDat; xiv::exd::Exd m_ContentFinderConditionDat; @@ -5595,6 +7728,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_ContentGaugeColorDat; xiv::exd::Exd m_ContentMemberTypeDat; xiv::exd::Exd m_ContentNpcTalkDat; + xiv::exd::Exd m_ContentRandomSelectDat; xiv::exd::Exd m_ContentRouletteDat; xiv::exd::Exd m_ContentRouletteOpenRuleDat; xiv::exd::Exd m_ContentRouletteRoleBonusDat; @@ -5604,17 +7738,28 @@ struct ZoneSharedGroup xiv::exd::Exd m_ContentTypeDat; xiv::exd::Exd m_CraftActionDat; xiv::exd::Exd m_CraftLeveDat; + xiv::exd::Exd m_CraftLevelDifferenceDat; xiv::exd::Exd m_CraftTypeDat; xiv::exd::Exd m_CreditDat; xiv::exd::Exd m_CreditBackImageDat; xiv::exd::Exd m_CreditCastDat; + xiv::exd::Exd m_CreditListDat; + xiv::exd::Exd m_CreditListTextDat; xiv::exd::Exd m_CurrencyDat; xiv::exd::Exd m_CustomTalkDat; xiv::exd::Exd m_CustomTalkDynamicIconDat; xiv::exd::Exd m_CustomTalkNestHandlersDat; xiv::exd::Exd m_CutsceneDat; + xiv::exd::Exd m_CutsceneMotionDat; + xiv::exd::Exd m_CutsceneWorkIndexDat; xiv::exd::Exd m_CutScreenImageDat; + xiv::exd::Exd m_CycleTimeDat; xiv::exd::Exd m_DailySupplyItemDat; + xiv::exd::Exd m_DawnContentDat; + xiv::exd::Exd m_DawnGrowMemberDat; + xiv::exd::Exd m_DawnMemberUIParamDat; + xiv::exd::Exd m_DawnQuestAnnounceDat; + xiv::exd::Exd m_DawnQuestMemberDat; xiv::exd::Exd m_DeepDungeonDat; xiv::exd::Exd m_DeepDungeonBanDat; xiv::exd::Exd m_DeepDungeonDangerDat; @@ -5629,7 +7774,9 @@ struct ZoneSharedGroup xiv::exd::Exd m_DefaultTalkDat; xiv::exd::Exd m_DefaultTalkLipSyncTypeDat; xiv::exd::Exd m_DeliveryQuestDat; + xiv::exd::Exd m_DescriptionDat; xiv::exd::Exd m_DescriptionPageDat; + xiv::exd::Exd m_DescriptionSectionDat; xiv::exd::Exd m_DescriptionStringDat; xiv::exd::Exd m_DisposalShopDat; xiv::exd::Exd m_DisposalShopFilterTypeDat; @@ -5637,10 +7784,15 @@ struct ZoneSharedGroup xiv::exd::Exd m_DpsChallengeDat; xiv::exd::Exd m_DpsChallengeOfficerDat; xiv::exd::Exd m_DpsChallengeTransientDat; + xiv::exd::Exd m_DynamicEventDat; + xiv::exd::Exd m_DynamicEventEnemyTypeDat; + xiv::exd::Exd m_DynamicEventSingleBattleDat; + xiv::exd::Exd m_DynamicEventTypeDat; xiv::exd::Exd m_EmjAddonDat; xiv::exd::Exd m_EmjDaniDat; xiv::exd::Exd m_EmoteDat; xiv::exd::Exd m_EmoteCategoryDat; + xiv::exd::Exd m_EmoteModeDat; xiv::exd::Exd m_ENpcBaseDat; xiv::exd::Exd m_ENpcDressUpDat; xiv::exd::Exd m_ENpcDressUpDressDat; @@ -5664,17 +7816,24 @@ struct ZoneSharedGroup xiv::exd::Exd m_EventItemCastTimelineDat; xiv::exd::Exd m_EventItemHelpDat; xiv::exd::Exd m_EventItemTimelineDat; + xiv::exd::Exd m_EventSystemDefineDat; xiv::exd::Exd m_ExportedSGDat; xiv::exd::Exd m_ExVersionDat; xiv::exd::Exd m_FateDat; + xiv::exd::Exd m_FateEventDat; + xiv::exd::Exd m_FateModeDat; + xiv::exd::Exd m_FateProgressUIDat; + xiv::exd::Exd m_FateTokenTypeDat; xiv::exd::Exd m_FCActivityDat; xiv::exd::Exd m_FCActivityCategoryDat; xiv::exd::Exd m_FCAuthorityDat; xiv::exd::Exd m_FCAuthorityCategoryDat; xiv::exd::Exd m_FCChestNameDat; + xiv::exd::Exd m_FCCrestSymbolDat; xiv::exd::Exd m_FccShopDat; xiv::exd::Exd m_FCHierarchyDat; xiv::exd::Exd m_FCProfileDat; + xiv::exd::Exd m_FCRankDat; xiv::exd::Exd m_FCReputationDat; xiv::exd::Exd m_FCRightsDat; xiv::exd::Exd m_FestivalDat; @@ -5685,6 +7844,8 @@ struct ZoneSharedGroup xiv::exd::Exd m_FishParameterDat; xiv::exd::Exd m_Frontline03Dat; xiv::exd::Exd m_Frontline04Dat; + xiv::exd::Exd m_FurnitureCatalogCategoryDat; + xiv::exd::Exd m_FurnitureCatalogItemListDat; xiv::exd::Exd m_GardeningSeedDat; xiv::exd::Exd m_GatheringConditionDat; xiv::exd::Exd m_GatheringExpDat; @@ -5693,12 +7854,15 @@ struct ZoneSharedGroup xiv::exd::Exd m_GatheringItemPointDat; xiv::exd::Exd m_GatheringLeveDat; xiv::exd::Exd m_GatheringLeveRouteDat; + xiv::exd::Exd m_GatheringLeveRuleDat; xiv::exd::Exd m_GatheringNotebookListDat; xiv::exd::Exd m_GatheringPointDat; xiv::exd::Exd m_GatheringPointBaseDat; xiv::exd::Exd m_GatheringPointBonusDat; xiv::exd::Exd m_GatheringPointBonusTypeDat; xiv::exd::Exd m_GatheringPointNameDat; + xiv::exd::Exd m_GatheringPointTransientDat; + xiv::exd::Exd m_GatheringRarePopTimeTableDat; xiv::exd::Exd m_GatheringSubCategoryDat; xiv::exd::Exd m_GatheringTypeDat; xiv::exd::Exd m_GcArmyCaptureTacticsDat; @@ -5727,13 +7891,24 @@ struct ZoneSharedGroup xiv::exd::Exd m_GFateRideShootingDat; xiv::exd::Exd m_GilShopDat; xiv::exd::Exd m_GilShopItemDat; + xiv::exd::Exd m_GimmickAccessorDat; + xiv::exd::Exd m_GimmickJumpDat; + xiv::exd::Exd m_GimmickRectDat; xiv::exd::Exd m_GoldSaucerArcadeMachineDat; xiv::exd::Exd m_GoldSaucerTextDataDat; xiv::exd::Exd m_GrandCompanyDat; xiv::exd::Exd m_GrandCompanyRankDat; + xiv::exd::Exd m_GroupPoseFrameDat; + xiv::exd::Exd m_GroupPoseStampDat; + xiv::exd::Exd m_GroupPoseStampCategoryDat; xiv::exd::Exd m_GuardianDeityDat; + xiv::exd::Exd m_GuideDat; + xiv::exd::Exd m_GuidePageDat; + xiv::exd::Exd m_GuidePageStringDat; + xiv::exd::Exd m_GuideTitleDat; xiv::exd::Exd m_GuildleveAssignmentDat; xiv::exd::Exd m_GuildleveAssignmentCategoryDat; + xiv::exd::Exd m_GuildOrderDat; xiv::exd::Exd m_GuildOrderGuideDat; xiv::exd::Exd m_GuildOrderOfficerDat; xiv::exd::Exd m_HairMakeTypeDat; @@ -5754,6 +7929,33 @@ struct ZoneSharedGroup xiv::exd::Exd m_HowToDat; xiv::exd::Exd m_HowToCategoryDat; xiv::exd::Exd m_HowToPageDat; + xiv::exd::Exd m_HugeCraftworksNpcDat; + xiv::exd::Exd m_HugeCraftworksRankDat; + xiv::exd::Exd m_HWDAnnounceDat; + xiv::exd::Exd m_HWDCrafterSupplyDat; + xiv::exd::Exd m_HWDCrafterSupplyRewardDat; + xiv::exd::Exd m_HWDDevLayerControlDat; + xiv::exd::Exd m_HWDDevLevelUIDat; + xiv::exd::Exd m_HWDDevLivelyDat; + xiv::exd::Exd m_HWDDevProgressDat; + xiv::exd::Exd m_HWDGathereInspectTermDat; + xiv::exd::Exd m_HWDGathererInspectionDat; + xiv::exd::Exd m_HWDGathererInspectionRewardDat; + xiv::exd::Exd m_HWDInfoBoardArticleDat; + xiv::exd::Exd m_HWDInfoBoardArticleTransientDat; + xiv::exd::Exd m_HWDInfoBoardArticleTypeDat; + xiv::exd::Exd m_HWDLevelChangeDeceptionDat; + xiv::exd::Exd m_HWDSharedGroupDat; + xiv::exd::Exd m_HWDSharedGroupControlParamDat; + xiv::exd::Exd m_IKDContentBonusDat; + xiv::exd::Exd m_IKDFishParamDat; + xiv::exd::Exd m_IKDRouteDat; + xiv::exd::Exd m_IKDRouteTableDat; + xiv::exd::Exd m_IKDSpotDat; + xiv::exd::Exd m_InclusionShopDat; + xiv::exd::Exd m_InclusionShopCategoryDat; + xiv::exd::Exd m_InclusionShopSeriesDat; + xiv::exd::Exd m_IndividualWeatherDat; xiv::exd::Exd m_InstanceContentDat; xiv::exd::Exd m_InstanceContentBuffDat; xiv::exd::Exd m_InstanceContentCSBonusDat; @@ -5761,25 +7963,33 @@ struct ZoneSharedGroup xiv::exd::Exd m_InstanceContentTextDataDat; xiv::exd::Exd m_ItemDat; xiv::exd::Exd m_ItemActionDat; + xiv::exd::Exd m_ItemActionTelepoDat; + xiv::exd::Exd m_ItemBarterCheckDat; xiv::exd::Exd m_ItemFoodDat; xiv::exd::Exd m_ItemLevelDat; xiv::exd::Exd m_ItemSearchCategoryDat; xiv::exd::Exd m_ItemSeriesDat; + xiv::exd::Exd m_ItemSortCategoryDat; xiv::exd::Exd m_ItemSpecialBonusDat; xiv::exd::Exd m_ItemUICategoryDat; + xiv::exd::Exd m_JobHudManualDat; + xiv::exd::Exd m_JobHudManualPriorityDat; xiv::exd::Exd m_JournalCategoryDat; xiv::exd::Exd m_JournalGenreDat; xiv::exd::Exd m_JournalSectionDat; + xiv::exd::Exd m_KnockbackDat; + xiv::exd::Exd m_LegacyQuestDat; xiv::exd::Exd m_LeveDat; xiv::exd::Exd m_LeveAssignmentTypeDat; xiv::exd::Exd m_LeveClientDat; xiv::exd::Exd m_LevelDat; xiv::exd::Exd m_LeveRewardItemDat; xiv::exd::Exd m_LeveRewardItemGroupDat; + xiv::exd::Exd m_LeveStringDat; xiv::exd::Exd m_LeveVfxDat; + xiv::exd::Exd m_LobbyDat; xiv::exd::Exd m_LogFilterDat; xiv::exd::Exd m_LogKindDat; - xiv::exd::Exd m_LogKindCategoryTextDat; xiv::exd::Exd m_LogMessageDat; xiv::exd::Exd m_LotteryExchangeShopDat; xiv::exd::Exd m_MacroIconDat; @@ -5795,16 +8005,25 @@ struct ZoneSharedGroup xiv::exd::Exd m_MasterpieceSupplyDutyDat; xiv::exd::Exd m_MasterpieceSupplyMultiplierDat; xiv::exd::Exd m_MateriaDat; + xiv::exd::Exd m_MateriaJoinRateDat; + xiv::exd::Exd m_MateriaJoinRateGatherCraftDat; + xiv::exd::Exd m_MateriaTomestoneRateDat; xiv::exd::Exd m_MiniGameRADat; xiv::exd::Exd m_MinionRaceDat; xiv::exd::Exd m_MinionRulesDat; xiv::exd::Exd m_MinionSkillTypeDat; + xiv::exd::Exd m_MobHuntOrderDat; xiv::exd::Exd m_MobHuntOrderTypeDat; + xiv::exd::Exd m_MobHuntRewardDat; + xiv::exd::Exd m_MobHuntRewardCapDat; xiv::exd::Exd m_MobHuntTargetDat; xiv::exd::Exd m_ModelCharaDat; + xiv::exd::Exd m_ModelSkeletonDat; xiv::exd::Exd m_ModelStateDat; xiv::exd::Exd m_MonsterNoteDat; xiv::exd::Exd m_MonsterNoteTargetDat; + xiv::exd::Exd m_MotionTimelineDat; + xiv::exd::Exd m_MotionTimelineBlendTableDat; xiv::exd::Exd m_MountDat; xiv::exd::Exd m_MountActionDat; xiv::exd::Exd m_MountCustomizeDat; @@ -5813,30 +8032,48 @@ struct ZoneSharedGroup xiv::exd::Exd m_MountTransientDat; xiv::exd::Exd m_MoveTimelineDat; xiv::exd::Exd m_MoveVfxDat; + xiv::exd::Exd m_MovieSubtitleDat; + xiv::exd::Exd m_MovieSubtitle500Dat; + xiv::exd::Exd m_MovieSubtitleVoyageDat; + xiv::exd::Exd m_MYCTemporaryItemDat; + xiv::exd::Exd m_MYCTemporaryItemUICategoryDat; + xiv::exd::Exd m_MYCWarResultNotebookDat; + xiv::exd::Exd m_NotebookDivisionDat; + xiv::exd::Exd m_NotebookDivisionCategoryDat; + xiv::exd::Exd m_NotoriousMonsterDat; xiv::exd::Exd m_NpcEquipDat; xiv::exd::Exd m_NpcYellDat; xiv::exd::Exd m_OmenDat; xiv::exd::Exd m_OnlineStatusDat; + xiv::exd::Exd m_OpenContentDat; + xiv::exd::Exd m_OpenContentCandidateNameDat; xiv::exd::Exd m_OpeningDat; xiv::exd::Exd m_OrchestrionDat; xiv::exd::Exd m_OrchestrionCategoryDat; xiv::exd::Exd m_OrchestrionPathDat; xiv::exd::Exd m_OrchestrionUiparamDat; + xiv::exd::Exd m_OrnamentDat; xiv::exd::Exd m_ParamGrowDat; xiv::exd::Exd m_PartyContentDat; xiv::exd::Exd m_PartyContentCutsceneDat; xiv::exd::Exd m_PartyContentTextDataDat; + xiv::exd::Exd m_PatchMarkDat; xiv::exd::Exd m_PerformDat; xiv::exd::Exd m_PerformTransientDat; xiv::exd::Exd m_PetDat; xiv::exd::Exd m_PetActionDat; + xiv::exd::Exd m_PhysicsGroupDat; + xiv::exd::Exd m_PhysicsWindDat; xiv::exd::Exd m_PictureDat; xiv::exd::Exd m_PlaceNameDat; xiv::exd::Exd m_PlantPotFlowerSeedDat; xiv::exd::Exd m_PreHandlerDat; + xiv::exd::Exd m_PresetCameraDat; + xiv::exd::Exd m_PresetCameraAdjustDat; xiv::exd::Exd m_PublicContentDat; xiv::exd::Exd m_PublicContentCutsceneDat; xiv::exd::Exd m_PublicContentTextDataDat; + xiv::exd::Exd m_PurifyDat; xiv::exd::Exd m_PvPActionDat; xiv::exd::Exd m_PvPActionSortDat; xiv::exd::Exd m_PvPRankDat; @@ -5844,8 +8081,15 @@ struct ZoneSharedGroup xiv::exd::Exd m_PvPTraitDat; xiv::exd::Exd m_QuestDat; xiv::exd::Exd m_QuestBattleDat; + xiv::exd::Exd m_QuestChapterDat; xiv::exd::Exd m_QuestClassJobRewardDat; xiv::exd::Exd m_QuestClassJobSupplyDat; + xiv::exd::Exd m_QuestDerivedClassDat; + xiv::exd::Exd m_QuestRedoDat; + xiv::exd::Exd m_QuestRedoChapterUIDat; + xiv::exd::Exd m_QuestRedoChapterUICategoryDat; + xiv::exd::Exd m_QuestRedoChapterUITabDat; + xiv::exd::Exd m_QuestRedoIncompChapterDat; xiv::exd::Exd m_QuestRepeatFlagDat; xiv::exd::Exd m_QuestRewardOtherDat; xiv::exd::Exd m_QuickChatDat; @@ -5858,8 +8102,8 @@ struct ZoneSharedGroup xiv::exd::Exd m_RacingChocoboParamDat; xiv::exd::Exd m_RecastNavimeshDat; xiv::exd::Exd m_RecipeDat; - xiv::exd::Exd m_RecipeElementDat; xiv::exd::Exd m_RecipeLevelTableDat; + xiv::exd::Exd m_RecipeLookupDat; xiv::exd::Exd m_RecipeNotebookListDat; xiv::exd::Exd m_RecommendContentsDat; xiv::exd::Exd m_RelicDat; @@ -5873,15 +8117,16 @@ struct ZoneSharedGroup xiv::exd::Exd m_RetainerTaskNormalDat; xiv::exd::Exd m_RetainerTaskParameterDat; xiv::exd::Exd m_RetainerTaskRandomDat; + xiv::exd::Exd m_RideShootingDat; + xiv::exd::Exd m_RideShootingTextDataDat; xiv::exd::Exd m_RPParameterDat; - xiv::exd::Exd m_SalvageDat; + xiv::exd::Exd m_SatisfactionArbitrationDat; xiv::exd::Exd m_SatisfactionNpcDat; xiv::exd::Exd m_SatisfactionSupplyDat; xiv::exd::Exd m_SatisfactionSupplyRewardDat; xiv::exd::Exd m_ScenarioTreeDat; xiv::exd::Exd m_ScenarioTreeTipsDat; xiv::exd::Exd m_ScenarioTreeTipsClassQuestDat; - xiv::exd::Exd m_ScenarioTreeTipsQuestDat; xiv::exd::Exd m_ScenarioTypeDat; xiv::exd::Exd m_ScreenImageDat; xiv::exd::Exd m_SecretRecipeBookDat; @@ -5889,6 +8134,8 @@ struct ZoneSharedGroup xiv::exd::Exd m_SkyIsland2MissionDetailDat; xiv::exd::Exd m_SkyIsland2MissionTypeDat; xiv::exd::Exd m_SkyIsland2RangeTypeDat; + xiv::exd::Exd m_SnipeTalkDat; + xiv::exd::Exd m_SnipeTalkNameDat; xiv::exd::Exd m_SpearfishingItemDat; xiv::exd::Exd m_SpearfishingNotebookDat; xiv::exd::Exd m_SpearfishingRecordPageDat; @@ -5901,10 +8148,13 @@ struct ZoneSharedGroup xiv::exd::Exd m_StatusLoopVFXDat; xiv::exd::Exd m_StoryDat; xiv::exd::Exd m_SubmarineExplorationDat; + xiv::exd::Exd m_SubmarineMapDat; xiv::exd::Exd m_SubmarinePartDat; xiv::exd::Exd m_SubmarineRankDat; xiv::exd::Exd m_SwitchTalkDat; + xiv::exd::Exd m_SwitchTalkVariationDat; xiv::exd::Exd m_TerritoryTypeDat; + xiv::exd::Exd m_TerritoryTypeTransientDat; xiv::exd::Exd m_TextCommandDat; xiv::exd::Exd m_TitleDat; xiv::exd::Exd m_TomestonesDat; @@ -5917,6 +8167,8 @@ struct ZoneSharedGroup xiv::exd::Exd m_TransformationDat; xiv::exd::Exd m_TreasureDat; xiv::exd::Exd m_TreasureHuntRankDat; + xiv::exd::Exd m_TreasureModelDat; + xiv::exd::Exd m_TreasureSpotDat; xiv::exd::Exd m_TribeDat; xiv::exd::Exd m_TripleTriadDat; xiv::exd::Exd m_TripleTriadCardDat; @@ -5935,6 +8187,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_WarpDat; xiv::exd::Exd m_WarpConditionDat; xiv::exd::Exd m_WarpLogicDat; + xiv::exd::Exd m_WeaponTimelineDat; xiv::exd::Exd m_WeatherDat; xiv::exd::Exd m_WeatherGroupDat; xiv::exd::Exd m_WeatherRateDat; @@ -5946,12 +8199,15 @@ struct ZoneSharedGroup xiv::exd::Exd m_WeeklyLotBonusDat; xiv::exd::Exd m_WorldDat; xiv::exd::Exd m_WorldDCGroupTypeDat; + xiv::exd::Exd m_YardCatalogCategoryDat; + xiv::exd::Exd m_YardCatalogItemListDat; xiv::exd::Exd m_YKWDat; xiv::exd::Exd m_ZoneSharedGroupDat; using AchievementPtr = std::shared_ptr< Achievement >; using AchievementCategoryPtr = std::shared_ptr< AchievementCategory >; + using AchievementHideConditionPtr = std::shared_ptr< AchievementHideCondition >; using AchievementKindPtr = std::shared_ptr< AchievementKind >; using ActionPtr = std::shared_ptr< Action >; using ActionCastTimelinePtr = std::shared_ptr< ActionCastTimeline >; @@ -5970,7 +8226,6 @@ struct ZoneSharedGroup using ActivityFeedGroupCaptionsPtr = std::shared_ptr< ActivityFeedGroupCaptions >; using ActivityFeedImagesPtr = std::shared_ptr< ActivityFeedImages >; using AddonPtr = std::shared_ptr< Addon >; - using AddonHudPtr = std::shared_ptr< AddonHud >; using AdventurePtr = std::shared_ptr< Adventure >; using AdventureExPhasePtr = std::shared_ptr< AdventureExPhase >; using AetherCurrentPtr = std::shared_ptr< AetherCurrent >; @@ -5983,6 +8238,7 @@ struct ZoneSharedGroup using AirshipExplorationParamTypePtr = std::shared_ptr< AirshipExplorationParamType >; using AirshipExplorationPartPtr = std::shared_ptr< AirshipExplorationPart >; using AirshipExplorationPointPtr = std::shared_ptr< AirshipExplorationPoint >; + using AnimationLODPtr = std::shared_ptr< AnimationLOD >; using AnimaWeapon5Ptr = std::shared_ptr< AnimaWeapon5 >; using AnimaWeapon5ParamPtr = std::shared_ptr< AnimaWeapon5Param >; using AnimaWeapon5PatternGroupPtr = std::shared_ptr< AnimaWeapon5PatternGroup >; @@ -6004,15 +8260,21 @@ struct ZoneSharedGroup using ArrayEventHandlerPtr = std::shared_ptr< ArrayEventHandler >; using AttackTypePtr = std::shared_ptr< AttackType >; using BacklightColorPtr = std::shared_ptr< BacklightColor >; + using BallistaPtr = std::shared_ptr< Ballista >; using BalloonPtr = std::shared_ptr< Balloon >; using BaseParamPtr = std::shared_ptr< BaseParam >; using BattleLevePtr = std::shared_ptr< BattleLeve >; + using BattleLeveRulePtr = std::shared_ptr< BattleLeveRule >; using BeastRankBonusPtr = std::shared_ptr< BeastRankBonus >; using BeastReputationRankPtr = std::shared_ptr< BeastReputationRank >; using BeastTribePtr = std::shared_ptr< BeastTribe >; using BehaviorPtr = std::shared_ptr< Behavior >; + using BehaviorPathPtr = std::shared_ptr< BehaviorPath >; + using BenchmarkOverrideEquipmentPtr = std::shared_ptr< BenchmarkOverrideEquipment >; using BGMPtr = std::shared_ptr< BGM >; using BGMFadePtr = std::shared_ptr< BGMFade >; + using BGMFadeTypePtr = std::shared_ptr< BGMFadeType >; + using BGMScenePtr = std::shared_ptr< BGMScene >; using BGMSituationPtr = std::shared_ptr< BGMSituation >; using BGMSwitchPtr = std::shared_ptr< BGMSwitch >; using BGMSystemDefinePtr = std::shared_ptr< BGMSystemDefine >; @@ -6021,6 +8283,7 @@ struct ZoneSharedGroup using BNpcCustomizePtr = std::shared_ptr< BNpcCustomize >; using BNpcNamePtr = std::shared_ptr< BNpcName >; using BNpcPartsPtr = std::shared_ptr< BNpcParts >; + using BNpcStatePtr = std::shared_ptr< BNpcState >; using BuddyPtr = std::shared_ptr< Buddy >; using BuddyActionPtr = std::shared_ptr< BuddyAction >; using BuddyEquipPtr = std::shared_ptr< BuddyEquip >; @@ -6030,7 +8293,11 @@ struct ZoneSharedGroup using CabinetPtr = std::shared_ptr< Cabinet >; using CabinetCategoryPtr = std::shared_ptr< CabinetCategory >; using CalendarPtr = std::shared_ptr< Calendar >; + using CarryPtr = std::shared_ptr< Carry >; + using ChannelingPtr = std::shared_ptr< Channeling >; + using CharaMakeClassEquipPtr = std::shared_ptr< CharaMakeClassEquip >; using CharaMakeCustomizePtr = std::shared_ptr< CharaMakeCustomize >; + using CharaMakeNamePtr = std::shared_ptr< CharaMakeName >; using CharaMakeTypePtr = std::shared_ptr< CharaMakeType >; using ChocoboRacePtr = std::shared_ptr< ChocoboRace >; using ChocoboRaceAbilityPtr = std::shared_ptr< ChocoboRaceAbility >; @@ -6043,8 +8310,15 @@ struct ZoneSharedGroup using ChocoboRaceWeatherPtr = std::shared_ptr< ChocoboRaceWeather >; using ChocoboTaxiPtr = std::shared_ptr< ChocoboTaxi >; using ChocoboTaxiStandPtr = std::shared_ptr< ChocoboTaxiStand >; + using CircleActivityPtr = std::shared_ptr< CircleActivity >; using ClassJobPtr = std::shared_ptr< ClassJob >; using ClassJobCategoryPtr = std::shared_ptr< ClassJobCategory >; + using CollectablesShopPtr = std::shared_ptr< CollectablesShop >; + using CollectablesShopItemPtr = std::shared_ptr< CollectablesShopItem >; + using CollectablesShopItemGroupPtr = std::shared_ptr< CollectablesShopItemGroup >; + using CollectablesShopRefinePtr = std::shared_ptr< CollectablesShopRefine >; + using CollectablesShopRewardItemPtr = std::shared_ptr< CollectablesShopRewardItem >; + using CollectablesShopRewardScripPtr = std::shared_ptr< CollectablesShopRewardScrip >; using CompanionPtr = std::shared_ptr< Companion >; using CompanionMovePtr = std::shared_ptr< CompanionMove >; using CompanionTransientPtr = std::shared_ptr< CompanionTransient >; @@ -6057,8 +8331,12 @@ struct ZoneSharedGroup using CompanyCraftSequencePtr = std::shared_ptr< CompanyCraftSequence >; using CompanyCraftSupplyItemPtr = std::shared_ptr< CompanyCraftSupplyItem >; using CompanyCraftTypePtr = std::shared_ptr< CompanyCraftType >; + using CompanyLevePtr = std::shared_ptr< CompanyLeve >; + using CompanyLeveRulePtr = std::shared_ptr< CompanyLeveRule >; using CompleteJournalPtr = std::shared_ptr< CompleteJournal >; using CompleteJournalCategoryPtr = std::shared_ptr< CompleteJournalCategory >; + using ConditionPtr = std::shared_ptr< Condition >; + using ConfigKeyPtr = std::shared_ptr< ConfigKey >; using ContentCloseCyclePtr = std::shared_ptr< ContentCloseCycle >; using ContentExActionPtr = std::shared_ptr< ContentExAction >; using ContentFinderConditionPtr = std::shared_ptr< ContentFinderCondition >; @@ -6067,6 +8345,7 @@ struct ZoneSharedGroup using ContentGaugeColorPtr = std::shared_ptr< ContentGaugeColor >; using ContentMemberTypePtr = std::shared_ptr< ContentMemberType >; using ContentNpcTalkPtr = std::shared_ptr< ContentNpcTalk >; + using ContentRandomSelectPtr = std::shared_ptr< ContentRandomSelect >; using ContentRoulettePtr = std::shared_ptr< ContentRoulette >; using ContentRouletteOpenRulePtr = std::shared_ptr< ContentRouletteOpenRule >; using ContentRouletteRoleBonusPtr = std::shared_ptr< ContentRouletteRoleBonus >; @@ -6076,17 +8355,28 @@ struct ZoneSharedGroup using ContentTypePtr = std::shared_ptr< ContentType >; using CraftActionPtr = std::shared_ptr< CraftAction >; using CraftLevePtr = std::shared_ptr< CraftLeve >; + using CraftLevelDifferencePtr = std::shared_ptr< CraftLevelDifference >; using CraftTypePtr = std::shared_ptr< CraftType >; using CreditPtr = std::shared_ptr< Credit >; using CreditBackImagePtr = std::shared_ptr< CreditBackImage >; using CreditCastPtr = std::shared_ptr< CreditCast >; + using CreditListPtr = std::shared_ptr< CreditList >; + using CreditListTextPtr = std::shared_ptr< CreditListText >; using CurrencyPtr = std::shared_ptr< Currency >; using CustomTalkPtr = std::shared_ptr< CustomTalk >; using CustomTalkDynamicIconPtr = std::shared_ptr< CustomTalkDynamicIcon >; using CustomTalkNestHandlersPtr = std::shared_ptr< CustomTalkNestHandlers >; using CutscenePtr = std::shared_ptr< Cutscene >; + using CutsceneMotionPtr = std::shared_ptr< CutsceneMotion >; + using CutsceneWorkIndexPtr = std::shared_ptr< CutsceneWorkIndex >; using CutScreenImagePtr = std::shared_ptr< CutScreenImage >; + using CycleTimePtr = std::shared_ptr< CycleTime >; using DailySupplyItemPtr = std::shared_ptr< DailySupplyItem >; + using DawnContentPtr = std::shared_ptr< DawnContent >; + using DawnGrowMemberPtr = std::shared_ptr< DawnGrowMember >; + using DawnMemberUIParamPtr = std::shared_ptr< DawnMemberUIParam >; + using DawnQuestAnnouncePtr = std::shared_ptr< DawnQuestAnnounce >; + using DawnQuestMemberPtr = std::shared_ptr< DawnQuestMember >; using DeepDungeonPtr = std::shared_ptr< DeepDungeon >; using DeepDungeonBanPtr = std::shared_ptr< DeepDungeonBan >; using DeepDungeonDangerPtr = std::shared_ptr< DeepDungeonDanger >; @@ -6101,7 +8391,9 @@ struct ZoneSharedGroup using DefaultTalkPtr = std::shared_ptr< DefaultTalk >; using DefaultTalkLipSyncTypePtr = std::shared_ptr< DefaultTalkLipSyncType >; using DeliveryQuestPtr = std::shared_ptr< DeliveryQuest >; + using DescriptionPtr = std::shared_ptr< Description >; using DescriptionPagePtr = std::shared_ptr< DescriptionPage >; + using DescriptionSectionPtr = std::shared_ptr< DescriptionSection >; using DescriptionStringPtr = std::shared_ptr< DescriptionString >; using DisposalShopPtr = std::shared_ptr< DisposalShop >; using DisposalShopFilterTypePtr = std::shared_ptr< DisposalShopFilterType >; @@ -6109,10 +8401,15 @@ struct ZoneSharedGroup using DpsChallengePtr = std::shared_ptr< DpsChallenge >; using DpsChallengeOfficerPtr = std::shared_ptr< DpsChallengeOfficer >; using DpsChallengeTransientPtr = std::shared_ptr< DpsChallengeTransient >; + using DynamicEventPtr = std::shared_ptr< DynamicEvent >; + using DynamicEventEnemyTypePtr = std::shared_ptr< DynamicEventEnemyType >; + using DynamicEventSingleBattlePtr = std::shared_ptr< DynamicEventSingleBattle >; + using DynamicEventTypePtr = std::shared_ptr< DynamicEventType >; using EmjAddonPtr = std::shared_ptr< EmjAddon >; using EmjDaniPtr = std::shared_ptr< EmjDani >; using EmotePtr = std::shared_ptr< Emote >; using EmoteCategoryPtr = std::shared_ptr< EmoteCategory >; + using EmoteModePtr = std::shared_ptr< EmoteMode >; using ENpcBasePtr = std::shared_ptr< ENpcBase >; using ENpcDressUpPtr = std::shared_ptr< ENpcDressUp >; using ENpcDressUpDressPtr = std::shared_ptr< ENpcDressUpDress >; @@ -6136,17 +8433,24 @@ struct ZoneSharedGroup using EventItemCastTimelinePtr = std::shared_ptr< EventItemCastTimeline >; using EventItemHelpPtr = std::shared_ptr< EventItemHelp >; using EventItemTimelinePtr = std::shared_ptr< EventItemTimeline >; + using EventSystemDefinePtr = std::shared_ptr< EventSystemDefine >; using ExportedSGPtr = std::shared_ptr< ExportedSG >; using ExVersionPtr = std::shared_ptr< ExVersion >; using FatePtr = std::shared_ptr< Fate >; + using FateEventPtr = std::shared_ptr< FateEvent >; + using FateModePtr = std::shared_ptr< FateMode >; + using FateProgressUIPtr = std::shared_ptr< FateProgressUI >; + using FateTokenTypePtr = std::shared_ptr< FateTokenType >; using FCActivityPtr = std::shared_ptr< FCActivity >; using FCActivityCategoryPtr = std::shared_ptr< FCActivityCategory >; using FCAuthorityPtr = std::shared_ptr< FCAuthority >; using FCAuthorityCategoryPtr = std::shared_ptr< FCAuthorityCategory >; using FCChestNamePtr = std::shared_ptr< FCChestName >; + using FCCrestSymbolPtr = std::shared_ptr< FCCrestSymbol >; using FccShopPtr = std::shared_ptr< FccShop >; using FCHierarchyPtr = std::shared_ptr< FCHierarchy >; using FCProfilePtr = std::shared_ptr< FCProfile >; + using FCRankPtr = std::shared_ptr< FCRank >; using FCReputationPtr = std::shared_ptr< FCReputation >; using FCRightsPtr = std::shared_ptr< FCRights >; using FestivalPtr = std::shared_ptr< Festival >; @@ -6157,6 +8461,8 @@ struct ZoneSharedGroup using FishParameterPtr = std::shared_ptr< FishParameter >; using Frontline03Ptr = std::shared_ptr< Frontline03 >; using Frontline04Ptr = std::shared_ptr< Frontline04 >; + using FurnitureCatalogCategoryPtr = std::shared_ptr< FurnitureCatalogCategory >; + using FurnitureCatalogItemListPtr = std::shared_ptr< FurnitureCatalogItemList >; using GardeningSeedPtr = std::shared_ptr< GardeningSeed >; using GatheringConditionPtr = std::shared_ptr< GatheringCondition >; using GatheringExpPtr = std::shared_ptr< GatheringExp >; @@ -6165,12 +8471,15 @@ struct ZoneSharedGroup using GatheringItemPointPtr = std::shared_ptr< GatheringItemPoint >; using GatheringLevePtr = std::shared_ptr< GatheringLeve >; using GatheringLeveRoutePtr = std::shared_ptr< GatheringLeveRoute >; + using GatheringLeveRulePtr = std::shared_ptr< GatheringLeveRule >; using GatheringNotebookListPtr = std::shared_ptr< GatheringNotebookList >; using GatheringPointPtr = std::shared_ptr< GatheringPoint >; using GatheringPointBasePtr = std::shared_ptr< GatheringPointBase >; using GatheringPointBonusPtr = std::shared_ptr< GatheringPointBonus >; using GatheringPointBonusTypePtr = std::shared_ptr< GatheringPointBonusType >; using GatheringPointNamePtr = std::shared_ptr< GatheringPointName >; + using GatheringPointTransientPtr = std::shared_ptr< GatheringPointTransient >; + using GatheringRarePopTimeTablePtr = std::shared_ptr< GatheringRarePopTimeTable >; using GatheringSubCategoryPtr = std::shared_ptr< GatheringSubCategory >; using GatheringTypePtr = std::shared_ptr< GatheringType >; using GcArmyCaptureTacticsPtr = std::shared_ptr< GcArmyCaptureTactics >; @@ -6199,13 +8508,24 @@ struct ZoneSharedGroup using GFateRideShootingPtr = std::shared_ptr< GFateRideShooting >; using GilShopPtr = std::shared_ptr< GilShop >; using GilShopItemPtr = std::shared_ptr< GilShopItem >; + using GimmickAccessorPtr = std::shared_ptr< GimmickAccessor >; + using GimmickJumpPtr = std::shared_ptr< GimmickJump >; + using GimmickRectPtr = std::shared_ptr< GimmickRect >; using GoldSaucerArcadeMachinePtr = std::shared_ptr< GoldSaucerArcadeMachine >; using GoldSaucerTextDataPtr = std::shared_ptr< GoldSaucerTextData >; using GrandCompanyPtr = std::shared_ptr< GrandCompany >; using GrandCompanyRankPtr = std::shared_ptr< GrandCompanyRank >; + using GroupPoseFramePtr = std::shared_ptr< GroupPoseFrame >; + using GroupPoseStampPtr = std::shared_ptr< GroupPoseStamp >; + using GroupPoseStampCategoryPtr = std::shared_ptr< GroupPoseStampCategory >; using GuardianDeityPtr = std::shared_ptr< GuardianDeity >; + using GuidePtr = std::shared_ptr< Guide >; + using GuidePagePtr = std::shared_ptr< GuidePage >; + using GuidePageStringPtr = std::shared_ptr< GuidePageString >; + using GuideTitlePtr = std::shared_ptr< GuideTitle >; using GuildleveAssignmentPtr = std::shared_ptr< GuildleveAssignment >; using GuildleveAssignmentCategoryPtr = std::shared_ptr< GuildleveAssignmentCategory >; + using GuildOrderPtr = std::shared_ptr< GuildOrder >; using GuildOrderGuidePtr = std::shared_ptr< GuildOrderGuide >; using GuildOrderOfficerPtr = std::shared_ptr< GuildOrderOfficer >; using HairMakeTypePtr = std::shared_ptr< HairMakeType >; @@ -6226,6 +8546,33 @@ struct ZoneSharedGroup using HowToPtr = std::shared_ptr< HowTo >; using HowToCategoryPtr = std::shared_ptr< HowToCategory >; using HowToPagePtr = std::shared_ptr< HowToPage >; + using HugeCraftworksNpcPtr = std::shared_ptr< HugeCraftworksNpc >; + using HugeCraftworksRankPtr = std::shared_ptr< HugeCraftworksRank >; + using HWDAnnouncePtr = std::shared_ptr< HWDAnnounce >; + using HWDCrafterSupplyPtr = std::shared_ptr< HWDCrafterSupply >; + using HWDCrafterSupplyRewardPtr = std::shared_ptr< HWDCrafterSupplyReward >; + using HWDDevLayerControlPtr = std::shared_ptr< HWDDevLayerControl >; + using HWDDevLevelUIPtr = std::shared_ptr< HWDDevLevelUI >; + using HWDDevLivelyPtr = std::shared_ptr< HWDDevLively >; + using HWDDevProgressPtr = std::shared_ptr< HWDDevProgress >; + using HWDGathereInspectTermPtr = std::shared_ptr< HWDGathereInspectTerm >; + using HWDGathererInspectionPtr = std::shared_ptr< HWDGathererInspection >; + using HWDGathererInspectionRewardPtr = std::shared_ptr< HWDGathererInspectionReward >; + using HWDInfoBoardArticlePtr = std::shared_ptr< HWDInfoBoardArticle >; + using HWDInfoBoardArticleTransientPtr = std::shared_ptr< HWDInfoBoardArticleTransient >; + using HWDInfoBoardArticleTypePtr = std::shared_ptr< HWDInfoBoardArticleType >; + using HWDLevelChangeDeceptionPtr = std::shared_ptr< HWDLevelChangeDeception >; + using HWDSharedGroupPtr = std::shared_ptr< HWDSharedGroup >; + using HWDSharedGroupControlParamPtr = std::shared_ptr< HWDSharedGroupControlParam >; + using IKDContentBonusPtr = std::shared_ptr< IKDContentBonus >; + using IKDFishParamPtr = std::shared_ptr< IKDFishParam >; + using IKDRoutePtr = std::shared_ptr< IKDRoute >; + using IKDRouteTablePtr = std::shared_ptr< IKDRouteTable >; + using IKDSpotPtr = std::shared_ptr< IKDSpot >; + using InclusionShopPtr = std::shared_ptr< InclusionShop >; + using InclusionShopCategoryPtr = std::shared_ptr< InclusionShopCategory >; + using InclusionShopSeriesPtr = std::shared_ptr< InclusionShopSeries >; + using IndividualWeatherPtr = std::shared_ptr< IndividualWeather >; using InstanceContentPtr = std::shared_ptr< InstanceContent >; using InstanceContentBuffPtr = std::shared_ptr< InstanceContentBuff >; using InstanceContentCSBonusPtr = std::shared_ptr< InstanceContentCSBonus >; @@ -6233,25 +8580,33 @@ struct ZoneSharedGroup using InstanceContentTextDataPtr = std::shared_ptr< InstanceContentTextData >; using ItemPtr = std::shared_ptr< Item >; using ItemActionPtr = std::shared_ptr< ItemAction >; + using ItemActionTelepoPtr = std::shared_ptr< ItemActionTelepo >; + using ItemBarterCheckPtr = std::shared_ptr< ItemBarterCheck >; using ItemFoodPtr = std::shared_ptr< ItemFood >; using ItemLevelPtr = std::shared_ptr< ItemLevel >; using ItemSearchCategoryPtr = std::shared_ptr< ItemSearchCategory >; using ItemSeriesPtr = std::shared_ptr< ItemSeries >; + using ItemSortCategoryPtr = std::shared_ptr< ItemSortCategory >; using ItemSpecialBonusPtr = std::shared_ptr< ItemSpecialBonus >; using ItemUICategoryPtr = std::shared_ptr< ItemUICategory >; + using JobHudManualPtr = std::shared_ptr< JobHudManual >; + using JobHudManualPriorityPtr = std::shared_ptr< JobHudManualPriority >; using JournalCategoryPtr = std::shared_ptr< JournalCategory >; using JournalGenrePtr = std::shared_ptr< JournalGenre >; using JournalSectionPtr = std::shared_ptr< JournalSection >; + using KnockbackPtr = std::shared_ptr< Knockback >; + using LegacyQuestPtr = std::shared_ptr< LegacyQuest >; using LevePtr = std::shared_ptr< Leve >; using LeveAssignmentTypePtr = std::shared_ptr< LeveAssignmentType >; using LeveClientPtr = std::shared_ptr< LeveClient >; using LevelPtr = std::shared_ptr< Level >; using LeveRewardItemPtr = std::shared_ptr< LeveRewardItem >; using LeveRewardItemGroupPtr = std::shared_ptr< LeveRewardItemGroup >; + using LeveStringPtr = std::shared_ptr< LeveString >; using LeveVfxPtr = std::shared_ptr< LeveVfx >; + using LobbyPtr = std::shared_ptr< Lobby >; using LogFilterPtr = std::shared_ptr< LogFilter >; using LogKindPtr = std::shared_ptr< LogKind >; - using LogKindCategoryTextPtr = std::shared_ptr< LogKindCategoryText >; using LogMessagePtr = std::shared_ptr< LogMessage >; using LotteryExchangeShopPtr = std::shared_ptr< LotteryExchangeShop >; using MacroIconPtr = std::shared_ptr< MacroIcon >; @@ -6267,16 +8622,25 @@ struct ZoneSharedGroup using MasterpieceSupplyDutyPtr = std::shared_ptr< MasterpieceSupplyDuty >; using MasterpieceSupplyMultiplierPtr = std::shared_ptr< MasterpieceSupplyMultiplier >; using MateriaPtr = std::shared_ptr< Materia >; + using MateriaJoinRatePtr = std::shared_ptr< MateriaJoinRate >; + using MateriaJoinRateGatherCraftPtr = std::shared_ptr< MateriaJoinRateGatherCraft >; + using MateriaTomestoneRatePtr = std::shared_ptr< MateriaTomestoneRate >; using MiniGameRAPtr = std::shared_ptr< MiniGameRA >; using MinionRacePtr = std::shared_ptr< MinionRace >; using MinionRulesPtr = std::shared_ptr< MinionRules >; using MinionSkillTypePtr = std::shared_ptr< MinionSkillType >; + using MobHuntOrderPtr = std::shared_ptr< MobHuntOrder >; using MobHuntOrderTypePtr = std::shared_ptr< MobHuntOrderType >; + using MobHuntRewardPtr = std::shared_ptr< MobHuntReward >; + using MobHuntRewardCapPtr = std::shared_ptr< MobHuntRewardCap >; using MobHuntTargetPtr = std::shared_ptr< MobHuntTarget >; using ModelCharaPtr = std::shared_ptr< ModelChara >; + using ModelSkeletonPtr = std::shared_ptr< ModelSkeleton >; using ModelStatePtr = std::shared_ptr< ModelState >; using MonsterNotePtr = std::shared_ptr< MonsterNote >; using MonsterNoteTargetPtr = std::shared_ptr< MonsterNoteTarget >; + using MotionTimelinePtr = std::shared_ptr< MotionTimeline >; + using MotionTimelineBlendTablePtr = std::shared_ptr< MotionTimelineBlendTable >; using MountPtr = std::shared_ptr< Mount >; using MountActionPtr = std::shared_ptr< MountAction >; using MountCustomizePtr = std::shared_ptr< MountCustomize >; @@ -6285,30 +8649,48 @@ struct ZoneSharedGroup using MountTransientPtr = std::shared_ptr< MountTransient >; using MoveTimelinePtr = std::shared_ptr< MoveTimeline >; using MoveVfxPtr = std::shared_ptr< MoveVfx >; + using MovieSubtitlePtr = std::shared_ptr< MovieSubtitle >; + using MovieSubtitle500Ptr = std::shared_ptr< MovieSubtitle500 >; + using MovieSubtitleVoyagePtr = std::shared_ptr< MovieSubtitleVoyage >; + using MYCTemporaryItemPtr = std::shared_ptr< MYCTemporaryItem >; + using MYCTemporaryItemUICategoryPtr = std::shared_ptr< MYCTemporaryItemUICategory >; + using MYCWarResultNotebookPtr = std::shared_ptr< MYCWarResultNotebook >; + using NotebookDivisionPtr = std::shared_ptr< NotebookDivision >; + using NotebookDivisionCategoryPtr = std::shared_ptr< NotebookDivisionCategory >; + using NotoriousMonsterPtr = std::shared_ptr< NotoriousMonster >; using NpcEquipPtr = std::shared_ptr< NpcEquip >; using NpcYellPtr = std::shared_ptr< NpcYell >; using OmenPtr = std::shared_ptr< Omen >; using OnlineStatusPtr = std::shared_ptr< OnlineStatus >; + using OpenContentPtr = std::shared_ptr< OpenContent >; + using OpenContentCandidateNamePtr = std::shared_ptr< OpenContentCandidateName >; using OpeningPtr = std::shared_ptr< Opening >; using OrchestrionPtr = std::shared_ptr< Orchestrion >; using OrchestrionCategoryPtr = std::shared_ptr< OrchestrionCategory >; using OrchestrionPathPtr = std::shared_ptr< OrchestrionPath >; using OrchestrionUiparamPtr = std::shared_ptr< OrchestrionUiparam >; + using OrnamentPtr = std::shared_ptr< Ornament >; using ParamGrowPtr = std::shared_ptr< ParamGrow >; using PartyContentPtr = std::shared_ptr< PartyContent >; using PartyContentCutscenePtr = std::shared_ptr< PartyContentCutscene >; using PartyContentTextDataPtr = std::shared_ptr< PartyContentTextData >; + using PatchMarkPtr = std::shared_ptr< PatchMark >; using PerformPtr = std::shared_ptr< Perform >; using PerformTransientPtr = std::shared_ptr< PerformTransient >; using PetPtr = std::shared_ptr< Pet >; using PetActionPtr = std::shared_ptr< PetAction >; + using PhysicsGroupPtr = std::shared_ptr< PhysicsGroup >; + using PhysicsWindPtr = std::shared_ptr< PhysicsWind >; using PicturePtr = std::shared_ptr< Picture >; using PlaceNamePtr = std::shared_ptr< PlaceName >; using PlantPotFlowerSeedPtr = std::shared_ptr< PlantPotFlowerSeed >; using PreHandlerPtr = std::shared_ptr< PreHandler >; + using PresetCameraPtr = std::shared_ptr< PresetCamera >; + using PresetCameraAdjustPtr = std::shared_ptr< PresetCameraAdjust >; using PublicContentPtr = std::shared_ptr< PublicContent >; using PublicContentCutscenePtr = std::shared_ptr< PublicContentCutscene >; using PublicContentTextDataPtr = std::shared_ptr< PublicContentTextData >; + using PurifyPtr = std::shared_ptr< Purify >; using PvPActionPtr = std::shared_ptr< PvPAction >; using PvPActionSortPtr = std::shared_ptr< PvPActionSort >; using PvPRankPtr = std::shared_ptr< PvPRank >; @@ -6316,8 +8698,15 @@ struct ZoneSharedGroup using PvPTraitPtr = std::shared_ptr< PvPTrait >; using QuestPtr = std::shared_ptr< Quest >; using QuestBattlePtr = std::shared_ptr< QuestBattle >; + using QuestChapterPtr = std::shared_ptr< QuestChapter >; using QuestClassJobRewardPtr = std::shared_ptr< QuestClassJobReward >; using QuestClassJobSupplyPtr = std::shared_ptr< QuestClassJobSupply >; + using QuestDerivedClassPtr = std::shared_ptr< QuestDerivedClass >; + using QuestRedoPtr = std::shared_ptr< QuestRedo >; + using QuestRedoChapterUIPtr = std::shared_ptr< QuestRedoChapterUI >; + using QuestRedoChapterUICategoryPtr = std::shared_ptr< QuestRedoChapterUICategory >; + using QuestRedoChapterUITabPtr = std::shared_ptr< QuestRedoChapterUITab >; + using QuestRedoIncompChapterPtr = std::shared_ptr< QuestRedoIncompChapter >; using QuestRepeatFlagPtr = std::shared_ptr< QuestRepeatFlag >; using QuestRewardOtherPtr = std::shared_ptr< QuestRewardOther >; using QuickChatPtr = std::shared_ptr< QuickChat >; @@ -6330,8 +8719,8 @@ struct ZoneSharedGroup using RacingChocoboParamPtr = std::shared_ptr< RacingChocoboParam >; using RecastNavimeshPtr = std::shared_ptr< RecastNavimesh >; using RecipePtr = std::shared_ptr< Recipe >; - using RecipeElementPtr = std::shared_ptr< RecipeElement >; using RecipeLevelTablePtr = std::shared_ptr< RecipeLevelTable >; + using RecipeLookupPtr = std::shared_ptr< RecipeLookup >; using RecipeNotebookListPtr = std::shared_ptr< RecipeNotebookList >; using RecommendContentsPtr = std::shared_ptr< RecommendContents >; using RelicPtr = std::shared_ptr< Relic >; @@ -6345,15 +8734,16 @@ struct ZoneSharedGroup using RetainerTaskNormalPtr = std::shared_ptr< RetainerTaskNormal >; using RetainerTaskParameterPtr = std::shared_ptr< RetainerTaskParameter >; using RetainerTaskRandomPtr = std::shared_ptr< RetainerTaskRandom >; + using RideShootingPtr = std::shared_ptr< RideShooting >; + using RideShootingTextDataPtr = std::shared_ptr< RideShootingTextData >; using RPParameterPtr = std::shared_ptr< RPParameter >; - using SalvagePtr = std::shared_ptr< Salvage >; + using SatisfactionArbitrationPtr = std::shared_ptr< SatisfactionArbitration >; using SatisfactionNpcPtr = std::shared_ptr< SatisfactionNpc >; using SatisfactionSupplyPtr = std::shared_ptr< SatisfactionSupply >; using SatisfactionSupplyRewardPtr = std::shared_ptr< SatisfactionSupplyReward >; using ScenarioTreePtr = std::shared_ptr< ScenarioTree >; using ScenarioTreeTipsPtr = std::shared_ptr< ScenarioTreeTips >; using ScenarioTreeTipsClassQuestPtr = std::shared_ptr< ScenarioTreeTipsClassQuest >; - using ScenarioTreeTipsQuestPtr = std::shared_ptr< ScenarioTreeTipsQuest >; using ScenarioTypePtr = std::shared_ptr< ScenarioType >; using ScreenImagePtr = std::shared_ptr< ScreenImage >; using SecretRecipeBookPtr = std::shared_ptr< SecretRecipeBook >; @@ -6361,6 +8751,8 @@ struct ZoneSharedGroup using SkyIsland2MissionDetailPtr = std::shared_ptr< SkyIsland2MissionDetail >; using SkyIsland2MissionTypePtr = std::shared_ptr< SkyIsland2MissionType >; using SkyIsland2RangeTypePtr = std::shared_ptr< SkyIsland2RangeType >; + using SnipeTalkPtr = std::shared_ptr< SnipeTalk >; + using SnipeTalkNamePtr = std::shared_ptr< SnipeTalkName >; using SpearfishingItemPtr = std::shared_ptr< SpearfishingItem >; using SpearfishingNotebookPtr = std::shared_ptr< SpearfishingNotebook >; using SpearfishingRecordPagePtr = std::shared_ptr< SpearfishingRecordPage >; @@ -6373,10 +8765,13 @@ struct ZoneSharedGroup using StatusLoopVFXPtr = std::shared_ptr< StatusLoopVFX >; using StoryPtr = std::shared_ptr< Story >; using SubmarineExplorationPtr = std::shared_ptr< SubmarineExploration >; + using SubmarineMapPtr = std::shared_ptr< SubmarineMap >; using SubmarinePartPtr = std::shared_ptr< SubmarinePart >; using SubmarineRankPtr = std::shared_ptr< SubmarineRank >; using SwitchTalkPtr = std::shared_ptr< SwitchTalk >; + using SwitchTalkVariationPtr = std::shared_ptr< SwitchTalkVariation >; using TerritoryTypePtr = std::shared_ptr< TerritoryType >; + using TerritoryTypeTransientPtr = std::shared_ptr< TerritoryTypeTransient >; using TextCommandPtr = std::shared_ptr< TextCommand >; using TitlePtr = std::shared_ptr< Title >; using TomestonesPtr = std::shared_ptr< Tomestones >; @@ -6389,6 +8784,8 @@ struct ZoneSharedGroup using TransformationPtr = std::shared_ptr< Transformation >; using TreasurePtr = std::shared_ptr< Treasure >; using TreasureHuntRankPtr = std::shared_ptr< TreasureHuntRank >; + using TreasureModelPtr = std::shared_ptr< TreasureModel >; + using TreasureSpotPtr = std::shared_ptr< TreasureSpot >; using TribePtr = std::shared_ptr< Tribe >; using TripleTriadPtr = std::shared_ptr< TripleTriad >; using TripleTriadCardPtr = std::shared_ptr< TripleTriadCard >; @@ -6407,6 +8804,7 @@ struct ZoneSharedGroup using WarpPtr = std::shared_ptr< Warp >; using WarpConditionPtr = std::shared_ptr< WarpCondition >; using WarpLogicPtr = std::shared_ptr< WarpLogic >; + using WeaponTimelinePtr = std::shared_ptr< WeaponTimeline >; using WeatherPtr = std::shared_ptr< Weather >; using WeatherGroupPtr = std::shared_ptr< WeatherGroup >; using WeatherRatePtr = std::shared_ptr< WeatherRate >; @@ -6418,43 +8816,15 @@ struct ZoneSharedGroup using WeeklyLotBonusPtr = std::shared_ptr< WeeklyLotBonus >; using WorldPtr = std::shared_ptr< World >; using WorldDCGroupTypePtr = std::shared_ptr< WorldDCGroupType >; + using YardCatalogCategoryPtr = std::shared_ptr< YardCatalogCategory >; + using YardCatalogItemListPtr = std::shared_ptr< YardCatalogItemList >; using YKWPtr = std::shared_ptr< YKW >; using ZoneSharedGroupPtr = std::shared_ptr< ZoneSharedGroup >; - template< class T > - std::shared_ptr< T > get( uint32_t id ) - { - try - { - auto info = std::make_shared< T >( id, this ); - return info; - } - catch( ... ) - { - return nullptr; - } - return nullptr; - } - - template< class T > - std::shared_ptr< T > get( uint32_t id, uint32_t slotId ) - { - try - { - auto info = std::make_shared< T >( id, slotId, this ); - return info; - } - catch( std::runtime_error error ) - { - // std::cout << error.what(); - return nullptr; - } - return nullptr; - } - std::set< uint32_t > m_AchievementIdList; std::set< uint32_t > m_AchievementCategoryIdList; + std::set< uint32_t > m_AchievementHideConditionIdList; std::set< uint32_t > m_AchievementKindIdList; std::set< uint32_t > m_ActionIdList; std::set< uint32_t > m_ActionCastTimelineIdList; @@ -6473,7 +8843,6 @@ struct ZoneSharedGroup std::set< uint32_t > m_ActivityFeedGroupCaptionsIdList; std::set< uint32_t > m_ActivityFeedImagesIdList; std::set< uint32_t > m_AddonIdList; - std::set< uint32_t > m_AddonHudIdList; std::set< uint32_t > m_AdventureIdList; std::set< uint32_t > m_AdventureExPhaseIdList; std::set< uint32_t > m_AetherCurrentIdList; @@ -6486,6 +8855,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_AirshipExplorationParamTypeIdList; std::set< uint32_t > m_AirshipExplorationPartIdList; std::set< uint32_t > m_AirshipExplorationPointIdList; + std::set< uint32_t > m_AnimationLODIdList; std::set< uint32_t > m_AnimaWeapon5IdList; std::set< uint32_t > m_AnimaWeapon5ParamIdList; std::set< uint32_t > m_AnimaWeapon5PatternGroupIdList; @@ -6507,15 +8877,21 @@ struct ZoneSharedGroup std::set< uint32_t > m_ArrayEventHandlerIdList; std::set< uint32_t > m_AttackTypeIdList; std::set< uint32_t > m_BacklightColorIdList; + std::set< uint32_t > m_BallistaIdList; std::set< uint32_t > m_BalloonIdList; std::set< uint32_t > m_BaseParamIdList; std::set< uint32_t > m_BattleLeveIdList; + std::set< uint32_t > m_BattleLeveRuleIdList; std::set< uint32_t > m_BeastRankBonusIdList; std::set< uint32_t > m_BeastReputationRankIdList; std::set< uint32_t > m_BeastTribeIdList; std::set< uint32_t > m_BehaviorIdList; + std::set< uint32_t > m_BehaviorPathIdList; + std::set< uint32_t > m_BenchmarkOverrideEquipmentIdList; std::set< uint32_t > m_BGMIdList; std::set< uint32_t > m_BGMFadeIdList; + std::set< uint32_t > m_BGMFadeTypeIdList; + std::set< uint32_t > m_BGMSceneIdList; std::set< uint32_t > m_BGMSituationIdList; std::set< uint32_t > m_BGMSwitchIdList; std::set< uint32_t > m_BGMSystemDefineIdList; @@ -6524,6 +8900,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_BNpcCustomizeIdList; std::set< uint32_t > m_BNpcNameIdList; std::set< uint32_t > m_BNpcPartsIdList; + std::set< uint32_t > m_BNpcStateIdList; std::set< uint32_t > m_BuddyIdList; std::set< uint32_t > m_BuddyActionIdList; std::set< uint32_t > m_BuddyEquipIdList; @@ -6533,7 +8910,11 @@ struct ZoneSharedGroup std::set< uint32_t > m_CabinetIdList; std::set< uint32_t > m_CabinetCategoryIdList; std::set< uint32_t > m_CalendarIdList; + std::set< uint32_t > m_CarryIdList; + std::set< uint32_t > m_ChannelingIdList; + std::set< uint32_t > m_CharaMakeClassEquipIdList; std::set< uint32_t > m_CharaMakeCustomizeIdList; + std::set< uint32_t > m_CharaMakeNameIdList; std::set< uint32_t > m_CharaMakeTypeIdList; std::set< uint32_t > m_ChocoboRaceIdList; std::set< uint32_t > m_ChocoboRaceAbilityIdList; @@ -6546,8 +8927,15 @@ struct ZoneSharedGroup std::set< uint32_t > m_ChocoboRaceWeatherIdList; std::set< uint32_t > m_ChocoboTaxiIdList; std::set< uint32_t > m_ChocoboTaxiStandIdList; + std::set< uint32_t > m_CircleActivityIdList; std::set< uint32_t > m_ClassJobIdList; std::set< uint32_t > m_ClassJobCategoryIdList; + std::set< uint32_t > m_CollectablesShopIdList; + std::set< uint32_t > m_CollectablesShopItemIdList; + std::set< uint32_t > m_CollectablesShopItemGroupIdList; + std::set< uint32_t > m_CollectablesShopRefineIdList; + std::set< uint32_t > m_CollectablesShopRewardItemIdList; + std::set< uint32_t > m_CollectablesShopRewardScripIdList; std::set< uint32_t > m_CompanionIdList; std::set< uint32_t > m_CompanionMoveIdList; std::set< uint32_t > m_CompanionTransientIdList; @@ -6560,8 +8948,12 @@ struct ZoneSharedGroup std::set< uint32_t > m_CompanyCraftSequenceIdList; std::set< uint32_t > m_CompanyCraftSupplyItemIdList; std::set< uint32_t > m_CompanyCraftTypeIdList; + std::set< uint32_t > m_CompanyLeveIdList; + std::set< uint32_t > m_CompanyLeveRuleIdList; std::set< uint32_t > m_CompleteJournalIdList; std::set< uint32_t > m_CompleteJournalCategoryIdList; + std::set< uint32_t > m_ConditionIdList; + std::set< uint32_t > m_ConfigKeyIdList; std::set< uint32_t > m_ContentCloseCycleIdList; std::set< uint32_t > m_ContentExActionIdList; std::set< uint32_t > m_ContentFinderConditionIdList; @@ -6570,6 +8962,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_ContentGaugeColorIdList; std::set< uint32_t > m_ContentMemberTypeIdList; std::set< uint32_t > m_ContentNpcTalkIdList; + std::set< uint32_t > m_ContentRandomSelectIdList; std::set< uint32_t > m_ContentRouletteIdList; std::set< uint32_t > m_ContentRouletteOpenRuleIdList; std::set< uint32_t > m_ContentRouletteRoleBonusIdList; @@ -6579,17 +8972,28 @@ struct ZoneSharedGroup std::set< uint32_t > m_ContentTypeIdList; std::set< uint32_t > m_CraftActionIdList; std::set< uint32_t > m_CraftLeveIdList; + std::set< uint32_t > m_CraftLevelDifferenceIdList; std::set< uint32_t > m_CraftTypeIdList; std::set< uint32_t > m_CreditIdList; std::set< uint32_t > m_CreditBackImageIdList; std::set< uint32_t > m_CreditCastIdList; + std::set< uint32_t > m_CreditListIdList; + std::set< uint32_t > m_CreditListTextIdList; std::set< uint32_t > m_CurrencyIdList; std::set< uint32_t > m_CustomTalkIdList; std::set< uint32_t > m_CustomTalkDynamicIconIdList; std::set< uint32_t > m_CustomTalkNestHandlersIdList; std::set< uint32_t > m_CutsceneIdList; + std::set< uint32_t > m_CutsceneMotionIdList; + std::set< uint32_t > m_CutsceneWorkIndexIdList; std::set< uint32_t > m_CutScreenImageIdList; + std::set< uint32_t > m_CycleTimeIdList; std::set< uint32_t > m_DailySupplyItemIdList; + std::set< uint32_t > m_DawnContentIdList; + std::set< uint32_t > m_DawnGrowMemberIdList; + std::set< uint32_t > m_DawnMemberUIParamIdList; + std::set< uint32_t > m_DawnQuestAnnounceIdList; + std::set< uint32_t > m_DawnQuestMemberIdList; std::set< uint32_t > m_DeepDungeonIdList; std::set< uint32_t > m_DeepDungeonBanIdList; std::set< uint32_t > m_DeepDungeonDangerIdList; @@ -6604,7 +9008,9 @@ struct ZoneSharedGroup std::set< uint32_t > m_DefaultTalkIdList; std::set< uint32_t > m_DefaultTalkLipSyncTypeIdList; std::set< uint32_t > m_DeliveryQuestIdList; + std::set< uint32_t > m_DescriptionIdList; std::set< uint32_t > m_DescriptionPageIdList; + std::set< uint32_t > m_DescriptionSectionIdList; std::set< uint32_t > m_DescriptionStringIdList; std::set< uint32_t > m_DisposalShopIdList; std::set< uint32_t > m_DisposalShopFilterTypeIdList; @@ -6612,10 +9018,15 @@ struct ZoneSharedGroup std::set< uint32_t > m_DpsChallengeIdList; std::set< uint32_t > m_DpsChallengeOfficerIdList; std::set< uint32_t > m_DpsChallengeTransientIdList; + std::set< uint32_t > m_DynamicEventIdList; + std::set< uint32_t > m_DynamicEventEnemyTypeIdList; + std::set< uint32_t > m_DynamicEventSingleBattleIdList; + std::set< uint32_t > m_DynamicEventTypeIdList; std::set< uint32_t > m_EmjAddonIdList; std::set< uint32_t > m_EmjDaniIdList; std::set< uint32_t > m_EmoteIdList; std::set< uint32_t > m_EmoteCategoryIdList; + std::set< uint32_t > m_EmoteModeIdList; std::set< uint32_t > m_ENpcBaseIdList; std::set< uint32_t > m_ENpcDressUpIdList; std::set< uint32_t > m_ENpcDressUpDressIdList; @@ -6639,17 +9050,24 @@ struct ZoneSharedGroup std::set< uint32_t > m_EventItemCastTimelineIdList; std::set< uint32_t > m_EventItemHelpIdList; std::set< uint32_t > m_EventItemTimelineIdList; + std::set< uint32_t > m_EventSystemDefineIdList; std::set< uint32_t > m_ExportedSGIdList; std::set< uint32_t > m_ExVersionIdList; std::set< uint32_t > m_FateIdList; + std::set< uint32_t > m_FateEventIdList; + std::set< uint32_t > m_FateModeIdList; + std::set< uint32_t > m_FateProgressUIIdList; + std::set< uint32_t > m_FateTokenTypeIdList; std::set< uint32_t > m_FCActivityIdList; std::set< uint32_t > m_FCActivityCategoryIdList; std::set< uint32_t > m_FCAuthorityIdList; std::set< uint32_t > m_FCAuthorityCategoryIdList; std::set< uint32_t > m_FCChestNameIdList; + std::set< uint32_t > m_FCCrestSymbolIdList; std::set< uint32_t > m_FccShopIdList; std::set< uint32_t > m_FCHierarchyIdList; std::set< uint32_t > m_FCProfileIdList; + std::set< uint32_t > m_FCRankIdList; std::set< uint32_t > m_FCReputationIdList; std::set< uint32_t > m_FCRightsIdList; std::set< uint32_t > m_FestivalIdList; @@ -6660,6 +9078,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_FishParameterIdList; std::set< uint32_t > m_Frontline03IdList; std::set< uint32_t > m_Frontline04IdList; + std::set< uint32_t > m_FurnitureCatalogCategoryIdList; + std::set< uint32_t > m_FurnitureCatalogItemListIdList; std::set< uint32_t > m_GardeningSeedIdList; std::set< uint32_t > m_GatheringConditionIdList; std::set< uint32_t > m_GatheringExpIdList; @@ -6668,12 +9088,15 @@ struct ZoneSharedGroup std::set< uint32_t > m_GatheringItemPointIdList; std::set< uint32_t > m_GatheringLeveIdList; std::set< uint32_t > m_GatheringLeveRouteIdList; + std::set< uint32_t > m_GatheringLeveRuleIdList; std::set< uint32_t > m_GatheringNotebookListIdList; std::set< uint32_t > m_GatheringPointIdList; std::set< uint32_t > m_GatheringPointBaseIdList; std::set< uint32_t > m_GatheringPointBonusIdList; std::set< uint32_t > m_GatheringPointBonusTypeIdList; std::set< uint32_t > m_GatheringPointNameIdList; + std::set< uint32_t > m_GatheringPointTransientIdList; + std::set< uint32_t > m_GatheringRarePopTimeTableIdList; std::set< uint32_t > m_GatheringSubCategoryIdList; std::set< uint32_t > m_GatheringTypeIdList; std::set< uint32_t > m_GcArmyCaptureTacticsIdList; @@ -6702,13 +9125,24 @@ struct ZoneSharedGroup std::set< uint32_t > m_GFateRideShootingIdList; std::set< uint32_t > m_GilShopIdList; std::set< uint32_t > m_GilShopItemIdList; + std::set< uint32_t > m_GimmickAccessorIdList; + std::set< uint32_t > m_GimmickJumpIdList; + std::set< uint32_t > m_GimmickRectIdList; std::set< uint32_t > m_GoldSaucerArcadeMachineIdList; std::set< uint32_t > m_GoldSaucerTextDataIdList; std::set< uint32_t > m_GrandCompanyIdList; std::set< uint32_t > m_GrandCompanyRankIdList; + std::set< uint32_t > m_GroupPoseFrameIdList; + std::set< uint32_t > m_GroupPoseStampIdList; + std::set< uint32_t > m_GroupPoseStampCategoryIdList; std::set< uint32_t > m_GuardianDeityIdList; + std::set< uint32_t > m_GuideIdList; + std::set< uint32_t > m_GuidePageIdList; + std::set< uint32_t > m_GuidePageStringIdList; + std::set< uint32_t > m_GuideTitleIdList; std::set< uint32_t > m_GuildleveAssignmentIdList; std::set< uint32_t > m_GuildleveAssignmentCategoryIdList; + std::set< uint32_t > m_GuildOrderIdList; std::set< uint32_t > m_GuildOrderGuideIdList; std::set< uint32_t > m_GuildOrderOfficerIdList; std::set< uint32_t > m_HairMakeTypeIdList; @@ -6729,6 +9163,33 @@ struct ZoneSharedGroup std::set< uint32_t > m_HowToIdList; std::set< uint32_t > m_HowToCategoryIdList; std::set< uint32_t > m_HowToPageIdList; + std::set< uint32_t > m_HugeCraftworksNpcIdList; + std::set< uint32_t > m_HugeCraftworksRankIdList; + std::set< uint32_t > m_HWDAnnounceIdList; + std::set< uint32_t > m_HWDCrafterSupplyIdList; + std::set< uint32_t > m_HWDCrafterSupplyRewardIdList; + std::set< uint32_t > m_HWDDevLayerControlIdList; + std::set< uint32_t > m_HWDDevLevelUIIdList; + std::set< uint32_t > m_HWDDevLivelyIdList; + std::set< uint32_t > m_HWDDevProgressIdList; + std::set< uint32_t > m_HWDGathereInspectTermIdList; + std::set< uint32_t > m_HWDGathererInspectionIdList; + std::set< uint32_t > m_HWDGathererInspectionRewardIdList; + std::set< uint32_t > m_HWDInfoBoardArticleIdList; + std::set< uint32_t > m_HWDInfoBoardArticleTransientIdList; + std::set< uint32_t > m_HWDInfoBoardArticleTypeIdList; + std::set< uint32_t > m_HWDLevelChangeDeceptionIdList; + std::set< uint32_t > m_HWDSharedGroupIdList; + std::set< uint32_t > m_HWDSharedGroupControlParamIdList; + std::set< uint32_t > m_IKDContentBonusIdList; + std::set< uint32_t > m_IKDFishParamIdList; + std::set< uint32_t > m_IKDRouteIdList; + std::set< uint32_t > m_IKDRouteTableIdList; + std::set< uint32_t > m_IKDSpotIdList; + std::set< uint32_t > m_InclusionShopIdList; + std::set< uint32_t > m_InclusionShopCategoryIdList; + std::set< uint32_t > m_InclusionShopSeriesIdList; + std::set< uint32_t > m_IndividualWeatherIdList; std::set< uint32_t > m_InstanceContentIdList; std::set< uint32_t > m_InstanceContentBuffIdList; std::set< uint32_t > m_InstanceContentCSBonusIdList; @@ -6736,25 +9197,33 @@ struct ZoneSharedGroup std::set< uint32_t > m_InstanceContentTextDataIdList; std::set< uint32_t > m_ItemIdList; std::set< uint32_t > m_ItemActionIdList; + std::set< uint32_t > m_ItemActionTelepoIdList; + std::set< uint32_t > m_ItemBarterCheckIdList; std::set< uint32_t > m_ItemFoodIdList; std::set< uint32_t > m_ItemLevelIdList; std::set< uint32_t > m_ItemSearchCategoryIdList; std::set< uint32_t > m_ItemSeriesIdList; + std::set< uint32_t > m_ItemSortCategoryIdList; std::set< uint32_t > m_ItemSpecialBonusIdList; std::set< uint32_t > m_ItemUICategoryIdList; + std::set< uint32_t > m_JobHudManualIdList; + std::set< uint32_t > m_JobHudManualPriorityIdList; std::set< uint32_t > m_JournalCategoryIdList; std::set< uint32_t > m_JournalGenreIdList; std::set< uint32_t > m_JournalSectionIdList; + std::set< uint32_t > m_KnockbackIdList; + std::set< uint32_t > m_LegacyQuestIdList; std::set< uint32_t > m_LeveIdList; std::set< uint32_t > m_LeveAssignmentTypeIdList; std::set< uint32_t > m_LeveClientIdList; std::set< uint32_t > m_LevelIdList; std::set< uint32_t > m_LeveRewardItemIdList; std::set< uint32_t > m_LeveRewardItemGroupIdList; + std::set< uint32_t > m_LeveStringIdList; std::set< uint32_t > m_LeveVfxIdList; + std::set< uint32_t > m_LobbyIdList; std::set< uint32_t > m_LogFilterIdList; std::set< uint32_t > m_LogKindIdList; - std::set< uint32_t > m_LogKindCategoryTextIdList; std::set< uint32_t > m_LogMessageIdList; std::set< uint32_t > m_LotteryExchangeShopIdList; std::set< uint32_t > m_MacroIconIdList; @@ -6770,16 +9239,25 @@ struct ZoneSharedGroup std::set< uint32_t > m_MasterpieceSupplyDutyIdList; std::set< uint32_t > m_MasterpieceSupplyMultiplierIdList; std::set< uint32_t > m_MateriaIdList; + std::set< uint32_t > m_MateriaJoinRateIdList; + std::set< uint32_t > m_MateriaJoinRateGatherCraftIdList; + std::set< uint32_t > m_MateriaTomestoneRateIdList; std::set< uint32_t > m_MiniGameRAIdList; std::set< uint32_t > m_MinionRaceIdList; std::set< uint32_t > m_MinionRulesIdList; std::set< uint32_t > m_MinionSkillTypeIdList; + std::set< uint32_t > m_MobHuntOrderIdList; std::set< uint32_t > m_MobHuntOrderTypeIdList; + std::set< uint32_t > m_MobHuntRewardIdList; + std::set< uint32_t > m_MobHuntRewardCapIdList; std::set< uint32_t > m_MobHuntTargetIdList; std::set< uint32_t > m_ModelCharaIdList; + std::set< uint32_t > m_ModelSkeletonIdList; std::set< uint32_t > m_ModelStateIdList; std::set< uint32_t > m_MonsterNoteIdList; std::set< uint32_t > m_MonsterNoteTargetIdList; + std::set< uint32_t > m_MotionTimelineIdList; + std::set< uint32_t > m_MotionTimelineBlendTableIdList; std::set< uint32_t > m_MountIdList; std::set< uint32_t > m_MountActionIdList; std::set< uint32_t > m_MountCustomizeIdList; @@ -6788,30 +9266,48 @@ struct ZoneSharedGroup std::set< uint32_t > m_MountTransientIdList; std::set< uint32_t > m_MoveTimelineIdList; std::set< uint32_t > m_MoveVfxIdList; + std::set< uint32_t > m_MovieSubtitleIdList; + std::set< uint32_t > m_MovieSubtitle500IdList; + std::set< uint32_t > m_MovieSubtitleVoyageIdList; + std::set< uint32_t > m_MYCTemporaryItemIdList; + std::set< uint32_t > m_MYCTemporaryItemUICategoryIdList; + std::set< uint32_t > m_MYCWarResultNotebookIdList; + std::set< uint32_t > m_NotebookDivisionIdList; + std::set< uint32_t > m_NotebookDivisionCategoryIdList; + std::set< uint32_t > m_NotoriousMonsterIdList; std::set< uint32_t > m_NpcEquipIdList; std::set< uint32_t > m_NpcYellIdList; std::set< uint32_t > m_OmenIdList; std::set< uint32_t > m_OnlineStatusIdList; + std::set< uint32_t > m_OpenContentIdList; + std::set< uint32_t > m_OpenContentCandidateNameIdList; std::set< uint32_t > m_OpeningIdList; std::set< uint32_t > m_OrchestrionIdList; std::set< uint32_t > m_OrchestrionCategoryIdList; std::set< uint32_t > m_OrchestrionPathIdList; std::set< uint32_t > m_OrchestrionUiparamIdList; + std::set< uint32_t > m_OrnamentIdList; std::set< uint32_t > m_ParamGrowIdList; std::set< uint32_t > m_PartyContentIdList; std::set< uint32_t > m_PartyContentCutsceneIdList; std::set< uint32_t > m_PartyContentTextDataIdList; + std::set< uint32_t > m_PatchMarkIdList; std::set< uint32_t > m_PerformIdList; std::set< uint32_t > m_PerformTransientIdList; std::set< uint32_t > m_PetIdList; std::set< uint32_t > m_PetActionIdList; + std::set< uint32_t > m_PhysicsGroupIdList; + std::set< uint32_t > m_PhysicsWindIdList; std::set< uint32_t > m_PictureIdList; std::set< uint32_t > m_PlaceNameIdList; std::set< uint32_t > m_PlantPotFlowerSeedIdList; std::set< uint32_t > m_PreHandlerIdList; + std::set< uint32_t > m_PresetCameraIdList; + std::set< uint32_t > m_PresetCameraAdjustIdList; std::set< uint32_t > m_PublicContentIdList; std::set< uint32_t > m_PublicContentCutsceneIdList; std::set< uint32_t > m_PublicContentTextDataIdList; + std::set< uint32_t > m_PurifyIdList; std::set< uint32_t > m_PvPActionIdList; std::set< uint32_t > m_PvPActionSortIdList; std::set< uint32_t > m_PvPRankIdList; @@ -6819,8 +9315,15 @@ struct ZoneSharedGroup std::set< uint32_t > m_PvPTraitIdList; std::set< uint32_t > m_QuestIdList; std::set< uint32_t > m_QuestBattleIdList; + std::set< uint32_t > m_QuestChapterIdList; std::set< uint32_t > m_QuestClassJobRewardIdList; std::set< uint32_t > m_QuestClassJobSupplyIdList; + std::set< uint32_t > m_QuestDerivedClassIdList; + std::set< uint32_t > m_QuestRedoIdList; + std::set< uint32_t > m_QuestRedoChapterUIIdList; + std::set< uint32_t > m_QuestRedoChapterUICategoryIdList; + std::set< uint32_t > m_QuestRedoChapterUITabIdList; + std::set< uint32_t > m_QuestRedoIncompChapterIdList; std::set< uint32_t > m_QuestRepeatFlagIdList; std::set< uint32_t > m_QuestRewardOtherIdList; std::set< uint32_t > m_QuickChatIdList; @@ -6833,8 +9336,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_RacingChocoboParamIdList; std::set< uint32_t > m_RecastNavimeshIdList; std::set< uint32_t > m_RecipeIdList; - std::set< uint32_t > m_RecipeElementIdList; std::set< uint32_t > m_RecipeLevelTableIdList; + std::set< uint32_t > m_RecipeLookupIdList; std::set< uint32_t > m_RecipeNotebookListIdList; std::set< uint32_t > m_RecommendContentsIdList; std::set< uint32_t > m_RelicIdList; @@ -6848,15 +9351,16 @@ struct ZoneSharedGroup std::set< uint32_t > m_RetainerTaskNormalIdList; std::set< uint32_t > m_RetainerTaskParameterIdList; std::set< uint32_t > m_RetainerTaskRandomIdList; + std::set< uint32_t > m_RideShootingIdList; + std::set< uint32_t > m_RideShootingTextDataIdList; std::set< uint32_t > m_RPParameterIdList; - std::set< uint32_t > m_SalvageIdList; + std::set< uint32_t > m_SatisfactionArbitrationIdList; std::set< uint32_t > m_SatisfactionNpcIdList; std::set< uint32_t > m_SatisfactionSupplyIdList; std::set< uint32_t > m_SatisfactionSupplyRewardIdList; std::set< uint32_t > m_ScenarioTreeIdList; std::set< uint32_t > m_ScenarioTreeTipsIdList; std::set< uint32_t > m_ScenarioTreeTipsClassQuestIdList; - std::set< uint32_t > m_ScenarioTreeTipsQuestIdList; std::set< uint32_t > m_ScenarioTypeIdList; std::set< uint32_t > m_ScreenImageIdList; std::set< uint32_t > m_SecretRecipeBookIdList; @@ -6864,6 +9368,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_SkyIsland2MissionDetailIdList; std::set< uint32_t > m_SkyIsland2MissionTypeIdList; std::set< uint32_t > m_SkyIsland2RangeTypeIdList; + std::set< uint32_t > m_SnipeTalkIdList; + std::set< uint32_t > m_SnipeTalkNameIdList; std::set< uint32_t > m_SpearfishingItemIdList; std::set< uint32_t > m_SpearfishingNotebookIdList; std::set< uint32_t > m_SpearfishingRecordPageIdList; @@ -6876,10 +9382,13 @@ struct ZoneSharedGroup std::set< uint32_t > m_StatusLoopVFXIdList; std::set< uint32_t > m_StoryIdList; std::set< uint32_t > m_SubmarineExplorationIdList; + std::set< uint32_t > m_SubmarineMapIdList; std::set< uint32_t > m_SubmarinePartIdList; std::set< uint32_t > m_SubmarineRankIdList; std::set< uint32_t > m_SwitchTalkIdList; + std::set< uint32_t > m_SwitchTalkVariationIdList; std::set< uint32_t > m_TerritoryTypeIdList; + std::set< uint32_t > m_TerritoryTypeTransientIdList; std::set< uint32_t > m_TextCommandIdList; std::set< uint32_t > m_TitleIdList; std::set< uint32_t > m_TomestonesIdList; @@ -6892,6 +9401,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_TransformationIdList; std::set< uint32_t > m_TreasureIdList; std::set< uint32_t > m_TreasureHuntRankIdList; + std::set< uint32_t > m_TreasureModelIdList; + std::set< uint32_t > m_TreasureSpotIdList; std::set< uint32_t > m_TribeIdList; std::set< uint32_t > m_TripleTriadIdList; std::set< uint32_t > m_TripleTriadCardIdList; @@ -6910,6 +9421,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_WarpIdList; std::set< uint32_t > m_WarpConditionIdList; std::set< uint32_t > m_WarpLogicIdList; + std::set< uint32_t > m_WeaponTimelineIdList; std::set< uint32_t > m_WeatherIdList; std::set< uint32_t > m_WeatherGroupIdList; std::set< uint32_t > m_WeatherRateIdList; @@ -6921,6 +9433,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_WeeklyLotBonusIdList; std::set< uint32_t > m_WorldIdList; std::set< uint32_t > m_WorldDCGroupTypeIdList; + std::set< uint32_t > m_YardCatalogCategoryIdList; + std::set< uint32_t > m_YardCatalogItemListIdList; std::set< uint32_t > m_YKWIdList; std::set< uint32_t > m_ZoneSharedGroupIdList; @@ -6937,6 +9451,12 @@ const std::set< uint32_t >& getAchievementCategoryIdList() loadIdList( m_AchievementCategoryDat, m_AchievementCategoryIdList ); return m_AchievementCategoryIdList; } +const std::set< uint32_t >& getAchievementHideConditionIdList() +{ + if( m_AchievementHideConditionIdList.size() == 0 ) + loadIdList( m_AchievementHideConditionDat, m_AchievementHideConditionIdList ); + return m_AchievementHideConditionIdList; +} const std::set< uint32_t >& getAchievementKindIdList() { if( m_AchievementKindIdList.size() == 0 ) @@ -7045,12 +9565,6 @@ const std::set< uint32_t >& getAddonIdList() loadIdList( m_AddonDat, m_AddonIdList ); return m_AddonIdList; } -const std::set< uint32_t >& getAddonHudIdList() -{ - if( m_AddonHudIdList.size() == 0 ) - loadIdList( m_AddonHudDat, m_AddonHudIdList ); - return m_AddonHudIdList; -} const std::set< uint32_t >& getAdventureIdList() { if( m_AdventureIdList.size() == 0 ) @@ -7123,6 +9637,12 @@ const std::set< uint32_t >& getAirshipExplorationPointIdList() loadIdList( m_AirshipExplorationPointDat, m_AirshipExplorationPointIdList ); return m_AirshipExplorationPointIdList; } +const std::set< uint32_t >& getAnimationLODIdList() +{ + if( m_AnimationLODIdList.size() == 0 ) + loadIdList( m_AnimationLODDat, m_AnimationLODIdList ); + return m_AnimationLODIdList; +} const std::set< uint32_t >& getAnimaWeapon5IdList() { if( m_AnimaWeapon5IdList.size() == 0 ) @@ -7249,6 +9769,12 @@ const std::set< uint32_t >& getBacklightColorIdList() loadIdList( m_BacklightColorDat, m_BacklightColorIdList ); return m_BacklightColorIdList; } +const std::set< uint32_t >& getBallistaIdList() +{ + if( m_BallistaIdList.size() == 0 ) + loadIdList( m_BallistaDat, m_BallistaIdList ); + return m_BallistaIdList; +} const std::set< uint32_t >& getBalloonIdList() { if( m_BalloonIdList.size() == 0 ) @@ -7267,6 +9793,12 @@ const std::set< uint32_t >& getBattleLeveIdList() loadIdList( m_BattleLeveDat, m_BattleLeveIdList ); return m_BattleLeveIdList; } +const std::set< uint32_t >& getBattleLeveRuleIdList() +{ + if( m_BattleLeveRuleIdList.size() == 0 ) + loadIdList( m_BattleLeveRuleDat, m_BattleLeveRuleIdList ); + return m_BattleLeveRuleIdList; +} const std::set< uint32_t >& getBeastRankBonusIdList() { if( m_BeastRankBonusIdList.size() == 0 ) @@ -7291,6 +9823,18 @@ const std::set< uint32_t >& getBehaviorIdList() loadIdList( m_BehaviorDat, m_BehaviorIdList ); return m_BehaviorIdList; } +const std::set< uint32_t >& getBehaviorPathIdList() +{ + if( m_BehaviorPathIdList.size() == 0 ) + loadIdList( m_BehaviorPathDat, m_BehaviorPathIdList ); + return m_BehaviorPathIdList; +} +const std::set< uint32_t >& getBenchmarkOverrideEquipmentIdList() +{ + if( m_BenchmarkOverrideEquipmentIdList.size() == 0 ) + loadIdList( m_BenchmarkOverrideEquipmentDat, m_BenchmarkOverrideEquipmentIdList ); + return m_BenchmarkOverrideEquipmentIdList; +} const std::set< uint32_t >& getBGMIdList() { if( m_BGMIdList.size() == 0 ) @@ -7303,6 +9847,18 @@ const std::set< uint32_t >& getBGMFadeIdList() loadIdList( m_BGMFadeDat, m_BGMFadeIdList ); return m_BGMFadeIdList; } +const std::set< uint32_t >& getBGMFadeTypeIdList() +{ + if( m_BGMFadeTypeIdList.size() == 0 ) + loadIdList( m_BGMFadeTypeDat, m_BGMFadeTypeIdList ); + return m_BGMFadeTypeIdList; +} +const std::set< uint32_t >& getBGMSceneIdList() +{ + if( m_BGMSceneIdList.size() == 0 ) + loadIdList( m_BGMSceneDat, m_BGMSceneIdList ); + return m_BGMSceneIdList; +} const std::set< uint32_t >& getBGMSituationIdList() { if( m_BGMSituationIdList.size() == 0 ) @@ -7351,6 +9907,12 @@ const std::set< uint32_t >& getBNpcPartsIdList() loadIdList( m_BNpcPartsDat, m_BNpcPartsIdList ); return m_BNpcPartsIdList; } +const std::set< uint32_t >& getBNpcStateIdList() +{ + if( m_BNpcStateIdList.size() == 0 ) + loadIdList( m_BNpcStateDat, m_BNpcStateIdList ); + return m_BNpcStateIdList; +} const std::set< uint32_t >& getBuddyIdList() { if( m_BuddyIdList.size() == 0 ) @@ -7405,12 +9967,36 @@ const std::set< uint32_t >& getCalendarIdList() loadIdList( m_CalendarDat, m_CalendarIdList ); return m_CalendarIdList; } +const std::set< uint32_t >& getCarryIdList() +{ + if( m_CarryIdList.size() == 0 ) + loadIdList( m_CarryDat, m_CarryIdList ); + return m_CarryIdList; +} +const std::set< uint32_t >& getChannelingIdList() +{ + if( m_ChannelingIdList.size() == 0 ) + loadIdList( m_ChannelingDat, m_ChannelingIdList ); + return m_ChannelingIdList; +} +const std::set< uint32_t >& getCharaMakeClassEquipIdList() +{ + if( m_CharaMakeClassEquipIdList.size() == 0 ) + loadIdList( m_CharaMakeClassEquipDat, m_CharaMakeClassEquipIdList ); + return m_CharaMakeClassEquipIdList; +} const std::set< uint32_t >& getCharaMakeCustomizeIdList() { if( m_CharaMakeCustomizeIdList.size() == 0 ) loadIdList( m_CharaMakeCustomizeDat, m_CharaMakeCustomizeIdList ); return m_CharaMakeCustomizeIdList; } +const std::set< uint32_t >& getCharaMakeNameIdList() +{ + if( m_CharaMakeNameIdList.size() == 0 ) + loadIdList( m_CharaMakeNameDat, m_CharaMakeNameIdList ); + return m_CharaMakeNameIdList; +} const std::set< uint32_t >& getCharaMakeTypeIdList() { if( m_CharaMakeTypeIdList.size() == 0 ) @@ -7483,6 +10069,12 @@ const std::set< uint32_t >& getChocoboTaxiStandIdList() loadIdList( m_ChocoboTaxiStandDat, m_ChocoboTaxiStandIdList ); return m_ChocoboTaxiStandIdList; } +const std::set< uint32_t >& getCircleActivityIdList() +{ + if( m_CircleActivityIdList.size() == 0 ) + loadIdList( m_CircleActivityDat, m_CircleActivityIdList ); + return m_CircleActivityIdList; +} const std::set< uint32_t >& getClassJobIdList() { if( m_ClassJobIdList.size() == 0 ) @@ -7495,6 +10087,42 @@ const std::set< uint32_t >& getClassJobCategoryIdList() loadIdList( m_ClassJobCategoryDat, m_ClassJobCategoryIdList ); return m_ClassJobCategoryIdList; } +const std::set< uint32_t >& getCollectablesShopIdList() +{ + if( m_CollectablesShopIdList.size() == 0 ) + loadIdList( m_CollectablesShopDat, m_CollectablesShopIdList ); + return m_CollectablesShopIdList; +} +const std::set< uint32_t >& getCollectablesShopItemIdList() +{ + if( m_CollectablesShopItemIdList.size() == 0 ) + loadIdList( m_CollectablesShopItemDat, m_CollectablesShopItemIdList ); + return m_CollectablesShopItemIdList; +} +const std::set< uint32_t >& getCollectablesShopItemGroupIdList() +{ + if( m_CollectablesShopItemGroupIdList.size() == 0 ) + loadIdList( m_CollectablesShopItemGroupDat, m_CollectablesShopItemGroupIdList ); + return m_CollectablesShopItemGroupIdList; +} +const std::set< uint32_t >& getCollectablesShopRefineIdList() +{ + if( m_CollectablesShopRefineIdList.size() == 0 ) + loadIdList( m_CollectablesShopRefineDat, m_CollectablesShopRefineIdList ); + return m_CollectablesShopRefineIdList; +} +const std::set< uint32_t >& getCollectablesShopRewardItemIdList() +{ + if( m_CollectablesShopRewardItemIdList.size() == 0 ) + loadIdList( m_CollectablesShopRewardItemDat, m_CollectablesShopRewardItemIdList ); + return m_CollectablesShopRewardItemIdList; +} +const std::set< uint32_t >& getCollectablesShopRewardScripIdList() +{ + if( m_CollectablesShopRewardScripIdList.size() == 0 ) + loadIdList( m_CollectablesShopRewardScripDat, m_CollectablesShopRewardScripIdList ); + return m_CollectablesShopRewardScripIdList; +} const std::set< uint32_t >& getCompanionIdList() { if( m_CompanionIdList.size() == 0 ) @@ -7567,6 +10195,18 @@ const std::set< uint32_t >& getCompanyCraftTypeIdList() loadIdList( m_CompanyCraftTypeDat, m_CompanyCraftTypeIdList ); return m_CompanyCraftTypeIdList; } +const std::set< uint32_t >& getCompanyLeveIdList() +{ + if( m_CompanyLeveIdList.size() == 0 ) + loadIdList( m_CompanyLeveDat, m_CompanyLeveIdList ); + return m_CompanyLeveIdList; +} +const std::set< uint32_t >& getCompanyLeveRuleIdList() +{ + if( m_CompanyLeveRuleIdList.size() == 0 ) + loadIdList( m_CompanyLeveRuleDat, m_CompanyLeveRuleIdList ); + return m_CompanyLeveRuleIdList; +} const std::set< uint32_t >& getCompleteJournalIdList() { if( m_CompleteJournalIdList.size() == 0 ) @@ -7579,6 +10219,18 @@ const std::set< uint32_t >& getCompleteJournalCategoryIdList() loadIdList( m_CompleteJournalCategoryDat, m_CompleteJournalCategoryIdList ); return m_CompleteJournalCategoryIdList; } +const std::set< uint32_t >& getConditionIdList() +{ + if( m_ConditionIdList.size() == 0 ) + loadIdList( m_ConditionDat, m_ConditionIdList ); + return m_ConditionIdList; +} +const std::set< uint32_t >& getConfigKeyIdList() +{ + if( m_ConfigKeyIdList.size() == 0 ) + loadIdList( m_ConfigKeyDat, m_ConfigKeyIdList ); + return m_ConfigKeyIdList; +} const std::set< uint32_t >& getContentCloseCycleIdList() { if( m_ContentCloseCycleIdList.size() == 0 ) @@ -7627,6 +10279,12 @@ const std::set< uint32_t >& getContentNpcTalkIdList() loadIdList( m_ContentNpcTalkDat, m_ContentNpcTalkIdList ); return m_ContentNpcTalkIdList; } +const std::set< uint32_t >& getContentRandomSelectIdList() +{ + if( m_ContentRandomSelectIdList.size() == 0 ) + loadIdList( m_ContentRandomSelectDat, m_ContentRandomSelectIdList ); + return m_ContentRandomSelectIdList; +} const std::set< uint32_t >& getContentRouletteIdList() { if( m_ContentRouletteIdList.size() == 0 ) @@ -7681,6 +10339,12 @@ const std::set< uint32_t >& getCraftLeveIdList() loadIdList( m_CraftLeveDat, m_CraftLeveIdList ); return m_CraftLeveIdList; } +const std::set< uint32_t >& getCraftLevelDifferenceIdList() +{ + if( m_CraftLevelDifferenceIdList.size() == 0 ) + loadIdList( m_CraftLevelDifferenceDat, m_CraftLevelDifferenceIdList ); + return m_CraftLevelDifferenceIdList; +} const std::set< uint32_t >& getCraftTypeIdList() { if( m_CraftTypeIdList.size() == 0 ) @@ -7705,6 +10369,18 @@ const std::set< uint32_t >& getCreditCastIdList() loadIdList( m_CreditCastDat, m_CreditCastIdList ); return m_CreditCastIdList; } +const std::set< uint32_t >& getCreditListIdList() +{ + if( m_CreditListIdList.size() == 0 ) + loadIdList( m_CreditListDat, m_CreditListIdList ); + return m_CreditListIdList; +} +const std::set< uint32_t >& getCreditListTextIdList() +{ + if( m_CreditListTextIdList.size() == 0 ) + loadIdList( m_CreditListTextDat, m_CreditListTextIdList ); + return m_CreditListTextIdList; +} const std::set< uint32_t >& getCurrencyIdList() { if( m_CurrencyIdList.size() == 0 ) @@ -7735,18 +10411,66 @@ const std::set< uint32_t >& getCutsceneIdList() loadIdList( m_CutsceneDat, m_CutsceneIdList ); return m_CutsceneIdList; } +const std::set< uint32_t >& getCutsceneMotionIdList() +{ + if( m_CutsceneMotionIdList.size() == 0 ) + loadIdList( m_CutsceneMotionDat, m_CutsceneMotionIdList ); + return m_CutsceneMotionIdList; +} +const std::set< uint32_t >& getCutsceneWorkIndexIdList() +{ + if( m_CutsceneWorkIndexIdList.size() == 0 ) + loadIdList( m_CutsceneWorkIndexDat, m_CutsceneWorkIndexIdList ); + return m_CutsceneWorkIndexIdList; +} const std::set< uint32_t >& getCutScreenImageIdList() { if( m_CutScreenImageIdList.size() == 0 ) loadIdList( m_CutScreenImageDat, m_CutScreenImageIdList ); return m_CutScreenImageIdList; } +const std::set< uint32_t >& getCycleTimeIdList() +{ + if( m_CycleTimeIdList.size() == 0 ) + loadIdList( m_CycleTimeDat, m_CycleTimeIdList ); + return m_CycleTimeIdList; +} const std::set< uint32_t >& getDailySupplyItemIdList() { if( m_DailySupplyItemIdList.size() == 0 ) loadIdList( m_DailySupplyItemDat, m_DailySupplyItemIdList ); return m_DailySupplyItemIdList; } +const std::set< uint32_t >& getDawnContentIdList() +{ + if( m_DawnContentIdList.size() == 0 ) + loadIdList( m_DawnContentDat, m_DawnContentIdList ); + return m_DawnContentIdList; +} +const std::set< uint32_t >& getDawnGrowMemberIdList() +{ + if( m_DawnGrowMemberIdList.size() == 0 ) + loadIdList( m_DawnGrowMemberDat, m_DawnGrowMemberIdList ); + return m_DawnGrowMemberIdList; +} +const std::set< uint32_t >& getDawnMemberUIParamIdList() +{ + if( m_DawnMemberUIParamIdList.size() == 0 ) + loadIdList( m_DawnMemberUIParamDat, m_DawnMemberUIParamIdList ); + return m_DawnMemberUIParamIdList; +} +const std::set< uint32_t >& getDawnQuestAnnounceIdList() +{ + if( m_DawnQuestAnnounceIdList.size() == 0 ) + loadIdList( m_DawnQuestAnnounceDat, m_DawnQuestAnnounceIdList ); + return m_DawnQuestAnnounceIdList; +} +const std::set< uint32_t >& getDawnQuestMemberIdList() +{ + if( m_DawnQuestMemberIdList.size() == 0 ) + loadIdList( m_DawnQuestMemberDat, m_DawnQuestMemberIdList ); + return m_DawnQuestMemberIdList; +} const std::set< uint32_t >& getDeepDungeonIdList() { if( m_DeepDungeonIdList.size() == 0 ) @@ -7831,12 +10555,24 @@ const std::set< uint32_t >& getDeliveryQuestIdList() loadIdList( m_DeliveryQuestDat, m_DeliveryQuestIdList ); return m_DeliveryQuestIdList; } +const std::set< uint32_t >& getDescriptionIdList() +{ + if( m_DescriptionIdList.size() == 0 ) + loadIdList( m_DescriptionDat, m_DescriptionIdList ); + return m_DescriptionIdList; +} const std::set< uint32_t >& getDescriptionPageIdList() { if( m_DescriptionPageIdList.size() == 0 ) loadIdList( m_DescriptionPageDat, m_DescriptionPageIdList ); return m_DescriptionPageIdList; } +const std::set< uint32_t >& getDescriptionSectionIdList() +{ + if( m_DescriptionSectionIdList.size() == 0 ) + loadIdList( m_DescriptionSectionDat, m_DescriptionSectionIdList ); + return m_DescriptionSectionIdList; +} const std::set< uint32_t >& getDescriptionStringIdList() { if( m_DescriptionStringIdList.size() == 0 ) @@ -7879,6 +10615,30 @@ const std::set< uint32_t >& getDpsChallengeTransientIdList() loadIdList( m_DpsChallengeTransientDat, m_DpsChallengeTransientIdList ); return m_DpsChallengeTransientIdList; } +const std::set< uint32_t >& getDynamicEventIdList() +{ + if( m_DynamicEventIdList.size() == 0 ) + loadIdList( m_DynamicEventDat, m_DynamicEventIdList ); + return m_DynamicEventIdList; +} +const std::set< uint32_t >& getDynamicEventEnemyTypeIdList() +{ + if( m_DynamicEventEnemyTypeIdList.size() == 0 ) + loadIdList( m_DynamicEventEnemyTypeDat, m_DynamicEventEnemyTypeIdList ); + return m_DynamicEventEnemyTypeIdList; +} +const std::set< uint32_t >& getDynamicEventSingleBattleIdList() +{ + if( m_DynamicEventSingleBattleIdList.size() == 0 ) + loadIdList( m_DynamicEventSingleBattleDat, m_DynamicEventSingleBattleIdList ); + return m_DynamicEventSingleBattleIdList; +} +const std::set< uint32_t >& getDynamicEventTypeIdList() +{ + if( m_DynamicEventTypeIdList.size() == 0 ) + loadIdList( m_DynamicEventTypeDat, m_DynamicEventTypeIdList ); + return m_DynamicEventTypeIdList; +} const std::set< uint32_t >& getEmjAddonIdList() { if( m_EmjAddonIdList.size() == 0 ) @@ -7903,6 +10663,12 @@ const std::set< uint32_t >& getEmoteCategoryIdList() loadIdList( m_EmoteCategoryDat, m_EmoteCategoryIdList ); return m_EmoteCategoryIdList; } +const std::set< uint32_t >& getEmoteModeIdList() +{ + if( m_EmoteModeIdList.size() == 0 ) + loadIdList( m_EmoteModeDat, m_EmoteModeIdList ); + return m_EmoteModeIdList; +} const std::set< uint32_t >& getENpcBaseIdList() { if( m_ENpcBaseIdList.size() == 0 ) @@ -8041,6 +10807,12 @@ const std::set< uint32_t >& getEventItemTimelineIdList() loadIdList( m_EventItemTimelineDat, m_EventItemTimelineIdList ); return m_EventItemTimelineIdList; } +const std::set< uint32_t >& getEventSystemDefineIdList() +{ + if( m_EventSystemDefineIdList.size() == 0 ) + loadIdList( m_EventSystemDefineDat, m_EventSystemDefineIdList ); + return m_EventSystemDefineIdList; +} const std::set< uint32_t >& getExportedSGIdList() { if( m_ExportedSGIdList.size() == 0 ) @@ -8059,6 +10831,30 @@ const std::set< uint32_t >& getFateIdList() loadIdList( m_FateDat, m_FateIdList ); return m_FateIdList; } +const std::set< uint32_t >& getFateEventIdList() +{ + if( m_FateEventIdList.size() == 0 ) + loadIdList( m_FateEventDat, m_FateEventIdList ); + return m_FateEventIdList; +} +const std::set< uint32_t >& getFateModeIdList() +{ + if( m_FateModeIdList.size() == 0 ) + loadIdList( m_FateModeDat, m_FateModeIdList ); + return m_FateModeIdList; +} +const std::set< uint32_t >& getFateProgressUIIdList() +{ + if( m_FateProgressUIIdList.size() == 0 ) + loadIdList( m_FateProgressUIDat, m_FateProgressUIIdList ); + return m_FateProgressUIIdList; +} +const std::set< uint32_t >& getFateTokenTypeIdList() +{ + if( m_FateTokenTypeIdList.size() == 0 ) + loadIdList( m_FateTokenTypeDat, m_FateTokenTypeIdList ); + return m_FateTokenTypeIdList; +} const std::set< uint32_t >& getFCActivityIdList() { if( m_FCActivityIdList.size() == 0 ) @@ -8089,6 +10885,12 @@ const std::set< uint32_t >& getFCChestNameIdList() loadIdList( m_FCChestNameDat, m_FCChestNameIdList ); return m_FCChestNameIdList; } +const std::set< uint32_t >& getFCCrestSymbolIdList() +{ + if( m_FCCrestSymbolIdList.size() == 0 ) + loadIdList( m_FCCrestSymbolDat, m_FCCrestSymbolIdList ); + return m_FCCrestSymbolIdList; +} const std::set< uint32_t >& getFccShopIdList() { if( m_FccShopIdList.size() == 0 ) @@ -8107,6 +10909,12 @@ const std::set< uint32_t >& getFCProfileIdList() loadIdList( m_FCProfileDat, m_FCProfileIdList ); return m_FCProfileIdList; } +const std::set< uint32_t >& getFCRankIdList() +{ + if( m_FCRankIdList.size() == 0 ) + loadIdList( m_FCRankDat, m_FCRankIdList ); + return m_FCRankIdList; +} const std::set< uint32_t >& getFCReputationIdList() { if( m_FCReputationIdList.size() == 0 ) @@ -8167,6 +10975,18 @@ const std::set< uint32_t >& getFrontline04IdList() loadIdList( m_Frontline04Dat, m_Frontline04IdList ); return m_Frontline04IdList; } +const std::set< uint32_t >& getFurnitureCatalogCategoryIdList() +{ + if( m_FurnitureCatalogCategoryIdList.size() == 0 ) + loadIdList( m_FurnitureCatalogCategoryDat, m_FurnitureCatalogCategoryIdList ); + return m_FurnitureCatalogCategoryIdList; +} +const std::set< uint32_t >& getFurnitureCatalogItemListIdList() +{ + if( m_FurnitureCatalogItemListIdList.size() == 0 ) + loadIdList( m_FurnitureCatalogItemListDat, m_FurnitureCatalogItemListIdList ); + return m_FurnitureCatalogItemListIdList; +} const std::set< uint32_t >& getGardeningSeedIdList() { if( m_GardeningSeedIdList.size() == 0 ) @@ -8215,6 +11035,12 @@ const std::set< uint32_t >& getGatheringLeveRouteIdList() loadIdList( m_GatheringLeveRouteDat, m_GatheringLeveRouteIdList ); return m_GatheringLeveRouteIdList; } +const std::set< uint32_t >& getGatheringLeveRuleIdList() +{ + if( m_GatheringLeveRuleIdList.size() == 0 ) + loadIdList( m_GatheringLeveRuleDat, m_GatheringLeveRuleIdList ); + return m_GatheringLeveRuleIdList; +} const std::set< uint32_t >& getGatheringNotebookListIdList() { if( m_GatheringNotebookListIdList.size() == 0 ) @@ -8251,6 +11077,18 @@ const std::set< uint32_t >& getGatheringPointNameIdList() loadIdList( m_GatheringPointNameDat, m_GatheringPointNameIdList ); return m_GatheringPointNameIdList; } +const std::set< uint32_t >& getGatheringPointTransientIdList() +{ + if( m_GatheringPointTransientIdList.size() == 0 ) + loadIdList( m_GatheringPointTransientDat, m_GatheringPointTransientIdList ); + return m_GatheringPointTransientIdList; +} +const std::set< uint32_t >& getGatheringRarePopTimeTableIdList() +{ + if( m_GatheringRarePopTimeTableIdList.size() == 0 ) + loadIdList( m_GatheringRarePopTimeTableDat, m_GatheringRarePopTimeTableIdList ); + return m_GatheringRarePopTimeTableIdList; +} const std::set< uint32_t >& getGatheringSubCategoryIdList() { if( m_GatheringSubCategoryIdList.size() == 0 ) @@ -8419,6 +11257,24 @@ const std::set< uint32_t >& getGilShopItemIdList() loadIdList( m_GilShopItemDat, m_GilShopItemIdList ); return m_GilShopItemIdList; } +const std::set< uint32_t >& getGimmickAccessorIdList() +{ + if( m_GimmickAccessorIdList.size() == 0 ) + loadIdList( m_GimmickAccessorDat, m_GimmickAccessorIdList ); + return m_GimmickAccessorIdList; +} +const std::set< uint32_t >& getGimmickJumpIdList() +{ + if( m_GimmickJumpIdList.size() == 0 ) + loadIdList( m_GimmickJumpDat, m_GimmickJumpIdList ); + return m_GimmickJumpIdList; +} +const std::set< uint32_t >& getGimmickRectIdList() +{ + if( m_GimmickRectIdList.size() == 0 ) + loadIdList( m_GimmickRectDat, m_GimmickRectIdList ); + return m_GimmickRectIdList; +} const std::set< uint32_t >& getGoldSaucerArcadeMachineIdList() { if( m_GoldSaucerArcadeMachineIdList.size() == 0 ) @@ -8443,12 +11299,54 @@ const std::set< uint32_t >& getGrandCompanyRankIdList() loadIdList( m_GrandCompanyRankDat, m_GrandCompanyRankIdList ); return m_GrandCompanyRankIdList; } +const std::set< uint32_t >& getGroupPoseFrameIdList() +{ + if( m_GroupPoseFrameIdList.size() == 0 ) + loadIdList( m_GroupPoseFrameDat, m_GroupPoseFrameIdList ); + return m_GroupPoseFrameIdList; +} +const std::set< uint32_t >& getGroupPoseStampIdList() +{ + if( m_GroupPoseStampIdList.size() == 0 ) + loadIdList( m_GroupPoseStampDat, m_GroupPoseStampIdList ); + return m_GroupPoseStampIdList; +} +const std::set< uint32_t >& getGroupPoseStampCategoryIdList() +{ + if( m_GroupPoseStampCategoryIdList.size() == 0 ) + loadIdList( m_GroupPoseStampCategoryDat, m_GroupPoseStampCategoryIdList ); + return m_GroupPoseStampCategoryIdList; +} const std::set< uint32_t >& getGuardianDeityIdList() { if( m_GuardianDeityIdList.size() == 0 ) loadIdList( m_GuardianDeityDat, m_GuardianDeityIdList ); return m_GuardianDeityIdList; } +const std::set< uint32_t >& getGuideIdList() +{ + if( m_GuideIdList.size() == 0 ) + loadIdList( m_GuideDat, m_GuideIdList ); + return m_GuideIdList; +} +const std::set< uint32_t >& getGuidePageIdList() +{ + if( m_GuidePageIdList.size() == 0 ) + loadIdList( m_GuidePageDat, m_GuidePageIdList ); + return m_GuidePageIdList; +} +const std::set< uint32_t >& getGuidePageStringIdList() +{ + if( m_GuidePageStringIdList.size() == 0 ) + loadIdList( m_GuidePageStringDat, m_GuidePageStringIdList ); + return m_GuidePageStringIdList; +} +const std::set< uint32_t >& getGuideTitleIdList() +{ + if( m_GuideTitleIdList.size() == 0 ) + loadIdList( m_GuideTitleDat, m_GuideTitleIdList ); + return m_GuideTitleIdList; +} const std::set< uint32_t >& getGuildleveAssignmentIdList() { if( m_GuildleveAssignmentIdList.size() == 0 ) @@ -8461,6 +11359,12 @@ const std::set< uint32_t >& getGuildleveAssignmentCategoryIdList() loadIdList( m_GuildleveAssignmentCategoryDat, m_GuildleveAssignmentCategoryIdList ); return m_GuildleveAssignmentCategoryIdList; } +const std::set< uint32_t >& getGuildOrderIdList() +{ + if( m_GuildOrderIdList.size() == 0 ) + loadIdList( m_GuildOrderDat, m_GuildOrderIdList ); + return m_GuildOrderIdList; +} const std::set< uint32_t >& getGuildOrderGuideIdList() { if( m_GuildOrderGuideIdList.size() == 0 ) @@ -8581,6 +11485,168 @@ const std::set< uint32_t >& getHowToPageIdList() loadIdList( m_HowToPageDat, m_HowToPageIdList ); return m_HowToPageIdList; } +const std::set< uint32_t >& getHugeCraftworksNpcIdList() +{ + if( m_HugeCraftworksNpcIdList.size() == 0 ) + loadIdList( m_HugeCraftworksNpcDat, m_HugeCraftworksNpcIdList ); + return m_HugeCraftworksNpcIdList; +} +const std::set< uint32_t >& getHugeCraftworksRankIdList() +{ + if( m_HugeCraftworksRankIdList.size() == 0 ) + loadIdList( m_HugeCraftworksRankDat, m_HugeCraftworksRankIdList ); + return m_HugeCraftworksRankIdList; +} +const std::set< uint32_t >& getHWDAnnounceIdList() +{ + if( m_HWDAnnounceIdList.size() == 0 ) + loadIdList( m_HWDAnnounceDat, m_HWDAnnounceIdList ); + return m_HWDAnnounceIdList; +} +const std::set< uint32_t >& getHWDCrafterSupplyIdList() +{ + if( m_HWDCrafterSupplyIdList.size() == 0 ) + loadIdList( m_HWDCrafterSupplyDat, m_HWDCrafterSupplyIdList ); + return m_HWDCrafterSupplyIdList; +} +const std::set< uint32_t >& getHWDCrafterSupplyRewardIdList() +{ + if( m_HWDCrafterSupplyRewardIdList.size() == 0 ) + loadIdList( m_HWDCrafterSupplyRewardDat, m_HWDCrafterSupplyRewardIdList ); + return m_HWDCrafterSupplyRewardIdList; +} +const std::set< uint32_t >& getHWDDevLayerControlIdList() +{ + if( m_HWDDevLayerControlIdList.size() == 0 ) + loadIdList( m_HWDDevLayerControlDat, m_HWDDevLayerControlIdList ); + return m_HWDDevLayerControlIdList; +} +const std::set< uint32_t >& getHWDDevLevelUIIdList() +{ + if( m_HWDDevLevelUIIdList.size() == 0 ) + loadIdList( m_HWDDevLevelUIDat, m_HWDDevLevelUIIdList ); + return m_HWDDevLevelUIIdList; +} +const std::set< uint32_t >& getHWDDevLivelyIdList() +{ + if( m_HWDDevLivelyIdList.size() == 0 ) + loadIdList( m_HWDDevLivelyDat, m_HWDDevLivelyIdList ); + return m_HWDDevLivelyIdList; +} +const std::set< uint32_t >& getHWDDevProgressIdList() +{ + if( m_HWDDevProgressIdList.size() == 0 ) + loadIdList( m_HWDDevProgressDat, m_HWDDevProgressIdList ); + return m_HWDDevProgressIdList; +} +const std::set< uint32_t >& getHWDGathereInspectTermIdList() +{ + if( m_HWDGathereInspectTermIdList.size() == 0 ) + loadIdList( m_HWDGathereInspectTermDat, m_HWDGathereInspectTermIdList ); + return m_HWDGathereInspectTermIdList; +} +const std::set< uint32_t >& getHWDGathererInspectionIdList() +{ + if( m_HWDGathererInspectionIdList.size() == 0 ) + loadIdList( m_HWDGathererInspectionDat, m_HWDGathererInspectionIdList ); + return m_HWDGathererInspectionIdList; +} +const std::set< uint32_t >& getHWDGathererInspectionRewardIdList() +{ + if( m_HWDGathererInspectionRewardIdList.size() == 0 ) + loadIdList( m_HWDGathererInspectionRewardDat, m_HWDGathererInspectionRewardIdList ); + return m_HWDGathererInspectionRewardIdList; +} +const std::set< uint32_t >& getHWDInfoBoardArticleIdList() +{ + if( m_HWDInfoBoardArticleIdList.size() == 0 ) + loadIdList( m_HWDInfoBoardArticleDat, m_HWDInfoBoardArticleIdList ); + return m_HWDInfoBoardArticleIdList; +} +const std::set< uint32_t >& getHWDInfoBoardArticleTransientIdList() +{ + if( m_HWDInfoBoardArticleTransientIdList.size() == 0 ) + loadIdList( m_HWDInfoBoardArticleTransientDat, m_HWDInfoBoardArticleTransientIdList ); + return m_HWDInfoBoardArticleTransientIdList; +} +const std::set< uint32_t >& getHWDInfoBoardArticleTypeIdList() +{ + if( m_HWDInfoBoardArticleTypeIdList.size() == 0 ) + loadIdList( m_HWDInfoBoardArticleTypeDat, m_HWDInfoBoardArticleTypeIdList ); + return m_HWDInfoBoardArticleTypeIdList; +} +const std::set< uint32_t >& getHWDLevelChangeDeceptionIdList() +{ + if( m_HWDLevelChangeDeceptionIdList.size() == 0 ) + loadIdList( m_HWDLevelChangeDeceptionDat, m_HWDLevelChangeDeceptionIdList ); + return m_HWDLevelChangeDeceptionIdList; +} +const std::set< uint32_t >& getHWDSharedGroupIdList() +{ + if( m_HWDSharedGroupIdList.size() == 0 ) + loadIdList( m_HWDSharedGroupDat, m_HWDSharedGroupIdList ); + return m_HWDSharedGroupIdList; +} +const std::set< uint32_t >& getHWDSharedGroupControlParamIdList() +{ + if( m_HWDSharedGroupControlParamIdList.size() == 0 ) + loadIdList( m_HWDSharedGroupControlParamDat, m_HWDSharedGroupControlParamIdList ); + return m_HWDSharedGroupControlParamIdList; +} +const std::set< uint32_t >& getIKDContentBonusIdList() +{ + if( m_IKDContentBonusIdList.size() == 0 ) + loadIdList( m_IKDContentBonusDat, m_IKDContentBonusIdList ); + return m_IKDContentBonusIdList; +} +const std::set< uint32_t >& getIKDFishParamIdList() +{ + if( m_IKDFishParamIdList.size() == 0 ) + loadIdList( m_IKDFishParamDat, m_IKDFishParamIdList ); + return m_IKDFishParamIdList; +} +const std::set< uint32_t >& getIKDRouteIdList() +{ + if( m_IKDRouteIdList.size() == 0 ) + loadIdList( m_IKDRouteDat, m_IKDRouteIdList ); + return m_IKDRouteIdList; +} +const std::set< uint32_t >& getIKDRouteTableIdList() +{ + if( m_IKDRouteTableIdList.size() == 0 ) + loadIdList( m_IKDRouteTableDat, m_IKDRouteTableIdList ); + return m_IKDRouteTableIdList; +} +const std::set< uint32_t >& getIKDSpotIdList() +{ + if( m_IKDSpotIdList.size() == 0 ) + loadIdList( m_IKDSpotDat, m_IKDSpotIdList ); + return m_IKDSpotIdList; +} +const std::set< uint32_t >& getInclusionShopIdList() +{ + if( m_InclusionShopIdList.size() == 0 ) + loadIdList( m_InclusionShopDat, m_InclusionShopIdList ); + return m_InclusionShopIdList; +} +const std::set< uint32_t >& getInclusionShopCategoryIdList() +{ + if( m_InclusionShopCategoryIdList.size() == 0 ) + loadIdList( m_InclusionShopCategoryDat, m_InclusionShopCategoryIdList ); + return m_InclusionShopCategoryIdList; +} +const std::set< uint32_t >& getInclusionShopSeriesIdList() +{ + if( m_InclusionShopSeriesIdList.size() == 0 ) + loadIdList( m_InclusionShopSeriesDat, m_InclusionShopSeriesIdList ); + return m_InclusionShopSeriesIdList; +} +const std::set< uint32_t >& getIndividualWeatherIdList() +{ + if( m_IndividualWeatherIdList.size() == 0 ) + loadIdList( m_IndividualWeatherDat, m_IndividualWeatherIdList ); + return m_IndividualWeatherIdList; +} const std::set< uint32_t >& getInstanceContentIdList() { if( m_InstanceContentIdList.size() == 0 ) @@ -8623,6 +11689,18 @@ const std::set< uint32_t >& getItemActionIdList() loadIdList( m_ItemActionDat, m_ItemActionIdList ); return m_ItemActionIdList; } +const std::set< uint32_t >& getItemActionTelepoIdList() +{ + if( m_ItemActionTelepoIdList.size() == 0 ) + loadIdList( m_ItemActionTelepoDat, m_ItemActionTelepoIdList ); + return m_ItemActionTelepoIdList; +} +const std::set< uint32_t >& getItemBarterCheckIdList() +{ + if( m_ItemBarterCheckIdList.size() == 0 ) + loadIdList( m_ItemBarterCheckDat, m_ItemBarterCheckIdList ); + return m_ItemBarterCheckIdList; +} const std::set< uint32_t >& getItemFoodIdList() { if( m_ItemFoodIdList.size() == 0 ) @@ -8647,6 +11725,12 @@ const std::set< uint32_t >& getItemSeriesIdList() loadIdList( m_ItemSeriesDat, m_ItemSeriesIdList ); return m_ItemSeriesIdList; } +const std::set< uint32_t >& getItemSortCategoryIdList() +{ + if( m_ItemSortCategoryIdList.size() == 0 ) + loadIdList( m_ItemSortCategoryDat, m_ItemSortCategoryIdList ); + return m_ItemSortCategoryIdList; +} const std::set< uint32_t >& getItemSpecialBonusIdList() { if( m_ItemSpecialBonusIdList.size() == 0 ) @@ -8659,6 +11743,18 @@ const std::set< uint32_t >& getItemUICategoryIdList() loadIdList( m_ItemUICategoryDat, m_ItemUICategoryIdList ); return m_ItemUICategoryIdList; } +const std::set< uint32_t >& getJobHudManualIdList() +{ + if( m_JobHudManualIdList.size() == 0 ) + loadIdList( m_JobHudManualDat, m_JobHudManualIdList ); + return m_JobHudManualIdList; +} +const std::set< uint32_t >& getJobHudManualPriorityIdList() +{ + if( m_JobHudManualPriorityIdList.size() == 0 ) + loadIdList( m_JobHudManualPriorityDat, m_JobHudManualPriorityIdList ); + return m_JobHudManualPriorityIdList; +} const std::set< uint32_t >& getJournalCategoryIdList() { if( m_JournalCategoryIdList.size() == 0 ) @@ -8677,6 +11773,18 @@ const std::set< uint32_t >& getJournalSectionIdList() loadIdList( m_JournalSectionDat, m_JournalSectionIdList ); return m_JournalSectionIdList; } +const std::set< uint32_t >& getKnockbackIdList() +{ + if( m_KnockbackIdList.size() == 0 ) + loadIdList( m_KnockbackDat, m_KnockbackIdList ); + return m_KnockbackIdList; +} +const std::set< uint32_t >& getLegacyQuestIdList() +{ + if( m_LegacyQuestIdList.size() == 0 ) + loadIdList( m_LegacyQuestDat, m_LegacyQuestIdList ); + return m_LegacyQuestIdList; +} const std::set< uint32_t >& getLeveIdList() { if( m_LeveIdList.size() == 0 ) @@ -8713,12 +11821,24 @@ const std::set< uint32_t >& getLeveRewardItemGroupIdList() loadIdList( m_LeveRewardItemGroupDat, m_LeveRewardItemGroupIdList ); return m_LeveRewardItemGroupIdList; } +const std::set< uint32_t >& getLeveStringIdList() +{ + if( m_LeveStringIdList.size() == 0 ) + loadIdList( m_LeveStringDat, m_LeveStringIdList ); + return m_LeveStringIdList; +} const std::set< uint32_t >& getLeveVfxIdList() { if( m_LeveVfxIdList.size() == 0 ) loadIdList( m_LeveVfxDat, m_LeveVfxIdList ); return m_LeveVfxIdList; } +const std::set< uint32_t >& getLobbyIdList() +{ + if( m_LobbyIdList.size() == 0 ) + loadIdList( m_LobbyDat, m_LobbyIdList ); + return m_LobbyIdList; +} const std::set< uint32_t >& getLogFilterIdList() { if( m_LogFilterIdList.size() == 0 ) @@ -8731,12 +11851,6 @@ const std::set< uint32_t >& getLogKindIdList() loadIdList( m_LogKindDat, m_LogKindIdList ); return m_LogKindIdList; } -const std::set< uint32_t >& getLogKindCategoryTextIdList() -{ - if( m_LogKindCategoryTextIdList.size() == 0 ) - loadIdList( m_LogKindCategoryTextDat, m_LogKindCategoryTextIdList ); - return m_LogKindCategoryTextIdList; -} const std::set< uint32_t >& getLogMessageIdList() { if( m_LogMessageIdList.size() == 0 ) @@ -8827,6 +11941,24 @@ const std::set< uint32_t >& getMateriaIdList() loadIdList( m_MateriaDat, m_MateriaIdList ); return m_MateriaIdList; } +const std::set< uint32_t >& getMateriaJoinRateIdList() +{ + if( m_MateriaJoinRateIdList.size() == 0 ) + loadIdList( m_MateriaJoinRateDat, m_MateriaJoinRateIdList ); + return m_MateriaJoinRateIdList; +} +const std::set< uint32_t >& getMateriaJoinRateGatherCraftIdList() +{ + if( m_MateriaJoinRateGatherCraftIdList.size() == 0 ) + loadIdList( m_MateriaJoinRateGatherCraftDat, m_MateriaJoinRateGatherCraftIdList ); + return m_MateriaJoinRateGatherCraftIdList; +} +const std::set< uint32_t >& getMateriaTomestoneRateIdList() +{ + if( m_MateriaTomestoneRateIdList.size() == 0 ) + loadIdList( m_MateriaTomestoneRateDat, m_MateriaTomestoneRateIdList ); + return m_MateriaTomestoneRateIdList; +} const std::set< uint32_t >& getMiniGameRAIdList() { if( m_MiniGameRAIdList.size() == 0 ) @@ -8851,12 +11983,30 @@ const std::set< uint32_t >& getMinionSkillTypeIdList() loadIdList( m_MinionSkillTypeDat, m_MinionSkillTypeIdList ); return m_MinionSkillTypeIdList; } +const std::set< uint32_t >& getMobHuntOrderIdList() +{ + if( m_MobHuntOrderIdList.size() == 0 ) + loadIdList( m_MobHuntOrderDat, m_MobHuntOrderIdList ); + return m_MobHuntOrderIdList; +} const std::set< uint32_t >& getMobHuntOrderTypeIdList() { if( m_MobHuntOrderTypeIdList.size() == 0 ) loadIdList( m_MobHuntOrderTypeDat, m_MobHuntOrderTypeIdList ); return m_MobHuntOrderTypeIdList; } +const std::set< uint32_t >& getMobHuntRewardIdList() +{ + if( m_MobHuntRewardIdList.size() == 0 ) + loadIdList( m_MobHuntRewardDat, m_MobHuntRewardIdList ); + return m_MobHuntRewardIdList; +} +const std::set< uint32_t >& getMobHuntRewardCapIdList() +{ + if( m_MobHuntRewardCapIdList.size() == 0 ) + loadIdList( m_MobHuntRewardCapDat, m_MobHuntRewardCapIdList ); + return m_MobHuntRewardCapIdList; +} const std::set< uint32_t >& getMobHuntTargetIdList() { if( m_MobHuntTargetIdList.size() == 0 ) @@ -8869,6 +12019,12 @@ const std::set< uint32_t >& getModelCharaIdList() loadIdList( m_ModelCharaDat, m_ModelCharaIdList ); return m_ModelCharaIdList; } +const std::set< uint32_t >& getModelSkeletonIdList() +{ + if( m_ModelSkeletonIdList.size() == 0 ) + loadIdList( m_ModelSkeletonDat, m_ModelSkeletonIdList ); + return m_ModelSkeletonIdList; +} const std::set< uint32_t >& getModelStateIdList() { if( m_ModelStateIdList.size() == 0 ) @@ -8887,6 +12043,18 @@ const std::set< uint32_t >& getMonsterNoteTargetIdList() loadIdList( m_MonsterNoteTargetDat, m_MonsterNoteTargetIdList ); return m_MonsterNoteTargetIdList; } +const std::set< uint32_t >& getMotionTimelineIdList() +{ + if( m_MotionTimelineIdList.size() == 0 ) + loadIdList( m_MotionTimelineDat, m_MotionTimelineIdList ); + return m_MotionTimelineIdList; +} +const std::set< uint32_t >& getMotionTimelineBlendTableIdList() +{ + if( m_MotionTimelineBlendTableIdList.size() == 0 ) + loadIdList( m_MotionTimelineBlendTableDat, m_MotionTimelineBlendTableIdList ); + return m_MotionTimelineBlendTableIdList; +} const std::set< uint32_t >& getMountIdList() { if( m_MountIdList.size() == 0 ) @@ -8935,6 +12103,60 @@ const std::set< uint32_t >& getMoveVfxIdList() loadIdList( m_MoveVfxDat, m_MoveVfxIdList ); return m_MoveVfxIdList; } +const std::set< uint32_t >& getMovieSubtitleIdList() +{ + if( m_MovieSubtitleIdList.size() == 0 ) + loadIdList( m_MovieSubtitleDat, m_MovieSubtitleIdList ); + return m_MovieSubtitleIdList; +} +const std::set< uint32_t >& getMovieSubtitle500IdList() +{ + if( m_MovieSubtitle500IdList.size() == 0 ) + loadIdList( m_MovieSubtitle500Dat, m_MovieSubtitle500IdList ); + return m_MovieSubtitle500IdList; +} +const std::set< uint32_t >& getMovieSubtitleVoyageIdList() +{ + if( m_MovieSubtitleVoyageIdList.size() == 0 ) + loadIdList( m_MovieSubtitleVoyageDat, m_MovieSubtitleVoyageIdList ); + return m_MovieSubtitleVoyageIdList; +} +const std::set< uint32_t >& getMYCTemporaryItemIdList() +{ + if( m_MYCTemporaryItemIdList.size() == 0 ) + loadIdList( m_MYCTemporaryItemDat, m_MYCTemporaryItemIdList ); + return m_MYCTemporaryItemIdList; +} +const std::set< uint32_t >& getMYCTemporaryItemUICategoryIdList() +{ + if( m_MYCTemporaryItemUICategoryIdList.size() == 0 ) + loadIdList( m_MYCTemporaryItemUICategoryDat, m_MYCTemporaryItemUICategoryIdList ); + return m_MYCTemporaryItemUICategoryIdList; +} +const std::set< uint32_t >& getMYCWarResultNotebookIdList() +{ + if( m_MYCWarResultNotebookIdList.size() == 0 ) + loadIdList( m_MYCWarResultNotebookDat, m_MYCWarResultNotebookIdList ); + return m_MYCWarResultNotebookIdList; +} +const std::set< uint32_t >& getNotebookDivisionIdList() +{ + if( m_NotebookDivisionIdList.size() == 0 ) + loadIdList( m_NotebookDivisionDat, m_NotebookDivisionIdList ); + return m_NotebookDivisionIdList; +} +const std::set< uint32_t >& getNotebookDivisionCategoryIdList() +{ + if( m_NotebookDivisionCategoryIdList.size() == 0 ) + loadIdList( m_NotebookDivisionCategoryDat, m_NotebookDivisionCategoryIdList ); + return m_NotebookDivisionCategoryIdList; +} +const std::set< uint32_t >& getNotoriousMonsterIdList() +{ + if( m_NotoriousMonsterIdList.size() == 0 ) + loadIdList( m_NotoriousMonsterDat, m_NotoriousMonsterIdList ); + return m_NotoriousMonsterIdList; +} const std::set< uint32_t >& getNpcEquipIdList() { if( m_NpcEquipIdList.size() == 0 ) @@ -8959,6 +12181,18 @@ const std::set< uint32_t >& getOnlineStatusIdList() loadIdList( m_OnlineStatusDat, m_OnlineStatusIdList ); return m_OnlineStatusIdList; } +const std::set< uint32_t >& getOpenContentIdList() +{ + if( m_OpenContentIdList.size() == 0 ) + loadIdList( m_OpenContentDat, m_OpenContentIdList ); + return m_OpenContentIdList; +} +const std::set< uint32_t >& getOpenContentCandidateNameIdList() +{ + if( m_OpenContentCandidateNameIdList.size() == 0 ) + loadIdList( m_OpenContentCandidateNameDat, m_OpenContentCandidateNameIdList ); + return m_OpenContentCandidateNameIdList; +} const std::set< uint32_t >& getOpeningIdList() { if( m_OpeningIdList.size() == 0 ) @@ -8989,6 +12223,12 @@ const std::set< uint32_t >& getOrchestrionUiparamIdList() loadIdList( m_OrchestrionUiparamDat, m_OrchestrionUiparamIdList ); return m_OrchestrionUiparamIdList; } +const std::set< uint32_t >& getOrnamentIdList() +{ + if( m_OrnamentIdList.size() == 0 ) + loadIdList( m_OrnamentDat, m_OrnamentIdList ); + return m_OrnamentIdList; +} const std::set< uint32_t >& getParamGrowIdList() { if( m_ParamGrowIdList.size() == 0 ) @@ -9013,6 +12253,12 @@ const std::set< uint32_t >& getPartyContentTextDataIdList() loadIdList( m_PartyContentTextDataDat, m_PartyContentTextDataIdList ); return m_PartyContentTextDataIdList; } +const std::set< uint32_t >& getPatchMarkIdList() +{ + if( m_PatchMarkIdList.size() == 0 ) + loadIdList( m_PatchMarkDat, m_PatchMarkIdList ); + return m_PatchMarkIdList; +} const std::set< uint32_t >& getPerformIdList() { if( m_PerformIdList.size() == 0 ) @@ -9037,6 +12283,18 @@ const std::set< uint32_t >& getPetActionIdList() loadIdList( m_PetActionDat, m_PetActionIdList ); return m_PetActionIdList; } +const std::set< uint32_t >& getPhysicsGroupIdList() +{ + if( m_PhysicsGroupIdList.size() == 0 ) + loadIdList( m_PhysicsGroupDat, m_PhysicsGroupIdList ); + return m_PhysicsGroupIdList; +} +const std::set< uint32_t >& getPhysicsWindIdList() +{ + if( m_PhysicsWindIdList.size() == 0 ) + loadIdList( m_PhysicsWindDat, m_PhysicsWindIdList ); + return m_PhysicsWindIdList; +} const std::set< uint32_t >& getPictureIdList() { if( m_PictureIdList.size() == 0 ) @@ -9061,6 +12319,18 @@ const std::set< uint32_t >& getPreHandlerIdList() loadIdList( m_PreHandlerDat, m_PreHandlerIdList ); return m_PreHandlerIdList; } +const std::set< uint32_t >& getPresetCameraIdList() +{ + if( m_PresetCameraIdList.size() == 0 ) + loadIdList( m_PresetCameraDat, m_PresetCameraIdList ); + return m_PresetCameraIdList; +} +const std::set< uint32_t >& getPresetCameraAdjustIdList() +{ + if( m_PresetCameraAdjustIdList.size() == 0 ) + loadIdList( m_PresetCameraAdjustDat, m_PresetCameraAdjustIdList ); + return m_PresetCameraAdjustIdList; +} const std::set< uint32_t >& getPublicContentIdList() { if( m_PublicContentIdList.size() == 0 ) @@ -9079,6 +12349,12 @@ const std::set< uint32_t >& getPublicContentTextDataIdList() loadIdList( m_PublicContentTextDataDat, m_PublicContentTextDataIdList ); return m_PublicContentTextDataIdList; } +const std::set< uint32_t >& getPurifyIdList() +{ + if( m_PurifyIdList.size() == 0 ) + loadIdList( m_PurifyDat, m_PurifyIdList ); + return m_PurifyIdList; +} const std::set< uint32_t >& getPvPActionIdList() { if( m_PvPActionIdList.size() == 0 ) @@ -9121,6 +12397,12 @@ const std::set< uint32_t >& getQuestBattleIdList() loadIdList( m_QuestBattleDat, m_QuestBattleIdList ); return m_QuestBattleIdList; } +const std::set< uint32_t >& getQuestChapterIdList() +{ + if( m_QuestChapterIdList.size() == 0 ) + loadIdList( m_QuestChapterDat, m_QuestChapterIdList ); + return m_QuestChapterIdList; +} const std::set< uint32_t >& getQuestClassJobRewardIdList() { if( m_QuestClassJobRewardIdList.size() == 0 ) @@ -9133,6 +12415,42 @@ const std::set< uint32_t >& getQuestClassJobSupplyIdList() loadIdList( m_QuestClassJobSupplyDat, m_QuestClassJobSupplyIdList ); return m_QuestClassJobSupplyIdList; } +const std::set< uint32_t >& getQuestDerivedClassIdList() +{ + if( m_QuestDerivedClassIdList.size() == 0 ) + loadIdList( m_QuestDerivedClassDat, m_QuestDerivedClassIdList ); + return m_QuestDerivedClassIdList; +} +const std::set< uint32_t >& getQuestRedoIdList() +{ + if( m_QuestRedoIdList.size() == 0 ) + loadIdList( m_QuestRedoDat, m_QuestRedoIdList ); + return m_QuestRedoIdList; +} +const std::set< uint32_t >& getQuestRedoChapterUIIdList() +{ + if( m_QuestRedoChapterUIIdList.size() == 0 ) + loadIdList( m_QuestRedoChapterUIDat, m_QuestRedoChapterUIIdList ); + return m_QuestRedoChapterUIIdList; +} +const std::set< uint32_t >& getQuestRedoChapterUICategoryIdList() +{ + if( m_QuestRedoChapterUICategoryIdList.size() == 0 ) + loadIdList( m_QuestRedoChapterUICategoryDat, m_QuestRedoChapterUICategoryIdList ); + return m_QuestRedoChapterUICategoryIdList; +} +const std::set< uint32_t >& getQuestRedoChapterUITabIdList() +{ + if( m_QuestRedoChapterUITabIdList.size() == 0 ) + loadIdList( m_QuestRedoChapterUITabDat, m_QuestRedoChapterUITabIdList ); + return m_QuestRedoChapterUITabIdList; +} +const std::set< uint32_t >& getQuestRedoIncompChapterIdList() +{ + if( m_QuestRedoIncompChapterIdList.size() == 0 ) + loadIdList( m_QuestRedoIncompChapterDat, m_QuestRedoIncompChapterIdList ); + return m_QuestRedoIncompChapterIdList; +} const std::set< uint32_t >& getQuestRepeatFlagIdList() { if( m_QuestRepeatFlagIdList.size() == 0 ) @@ -9205,18 +12523,18 @@ const std::set< uint32_t >& getRecipeIdList() loadIdList( m_RecipeDat, m_RecipeIdList ); return m_RecipeIdList; } -const std::set< uint32_t >& getRecipeElementIdList() -{ - if( m_RecipeElementIdList.size() == 0 ) - loadIdList( m_RecipeElementDat, m_RecipeElementIdList ); - return m_RecipeElementIdList; -} const std::set< uint32_t >& getRecipeLevelTableIdList() { if( m_RecipeLevelTableIdList.size() == 0 ) loadIdList( m_RecipeLevelTableDat, m_RecipeLevelTableIdList ); return m_RecipeLevelTableIdList; } +const std::set< uint32_t >& getRecipeLookupIdList() +{ + if( m_RecipeLookupIdList.size() == 0 ) + loadIdList( m_RecipeLookupDat, m_RecipeLookupIdList ); + return m_RecipeLookupIdList; +} const std::set< uint32_t >& getRecipeNotebookListIdList() { if( m_RecipeNotebookListIdList.size() == 0 ) @@ -9295,17 +12613,29 @@ const std::set< uint32_t >& getRetainerTaskRandomIdList() loadIdList( m_RetainerTaskRandomDat, m_RetainerTaskRandomIdList ); return m_RetainerTaskRandomIdList; } +const std::set< uint32_t >& getRideShootingIdList() +{ + if( m_RideShootingIdList.size() == 0 ) + loadIdList( m_RideShootingDat, m_RideShootingIdList ); + return m_RideShootingIdList; +} +const std::set< uint32_t >& getRideShootingTextDataIdList() +{ + if( m_RideShootingTextDataIdList.size() == 0 ) + loadIdList( m_RideShootingTextDataDat, m_RideShootingTextDataIdList ); + return m_RideShootingTextDataIdList; +} const std::set< uint32_t >& getRPParameterIdList() { if( m_RPParameterIdList.size() == 0 ) loadIdList( m_RPParameterDat, m_RPParameterIdList ); return m_RPParameterIdList; } -const std::set< uint32_t >& getSalvageIdList() +const std::set< uint32_t >& getSatisfactionArbitrationIdList() { - if( m_SalvageIdList.size() == 0 ) - loadIdList( m_SalvageDat, m_SalvageIdList ); - return m_SalvageIdList; + if( m_SatisfactionArbitrationIdList.size() == 0 ) + loadIdList( m_SatisfactionArbitrationDat, m_SatisfactionArbitrationIdList ); + return m_SatisfactionArbitrationIdList; } const std::set< uint32_t >& getSatisfactionNpcIdList() { @@ -9343,12 +12673,6 @@ const std::set< uint32_t >& getScenarioTreeTipsClassQuestIdList() loadIdList( m_ScenarioTreeTipsClassQuestDat, m_ScenarioTreeTipsClassQuestIdList ); return m_ScenarioTreeTipsClassQuestIdList; } -const std::set< uint32_t >& getScenarioTreeTipsQuestIdList() -{ - if( m_ScenarioTreeTipsQuestIdList.size() == 0 ) - loadIdList( m_ScenarioTreeTipsQuestDat, m_ScenarioTreeTipsQuestIdList ); - return m_ScenarioTreeTipsQuestIdList; -} const std::set< uint32_t >& getScenarioTypeIdList() { if( m_ScenarioTypeIdList.size() == 0 ) @@ -9391,6 +12715,18 @@ const std::set< uint32_t >& getSkyIsland2RangeTypeIdList() loadIdList( m_SkyIsland2RangeTypeDat, m_SkyIsland2RangeTypeIdList ); return m_SkyIsland2RangeTypeIdList; } +const std::set< uint32_t >& getSnipeTalkIdList() +{ + if( m_SnipeTalkIdList.size() == 0 ) + loadIdList( m_SnipeTalkDat, m_SnipeTalkIdList ); + return m_SnipeTalkIdList; +} +const std::set< uint32_t >& getSnipeTalkNameIdList() +{ + if( m_SnipeTalkNameIdList.size() == 0 ) + loadIdList( m_SnipeTalkNameDat, m_SnipeTalkNameIdList ); + return m_SnipeTalkNameIdList; +} const std::set< uint32_t >& getSpearfishingItemIdList() { if( m_SpearfishingItemIdList.size() == 0 ) @@ -9463,6 +12799,12 @@ const std::set< uint32_t >& getSubmarineExplorationIdList() loadIdList( m_SubmarineExplorationDat, m_SubmarineExplorationIdList ); return m_SubmarineExplorationIdList; } +const std::set< uint32_t >& getSubmarineMapIdList() +{ + if( m_SubmarineMapIdList.size() == 0 ) + loadIdList( m_SubmarineMapDat, m_SubmarineMapIdList ); + return m_SubmarineMapIdList; +} const std::set< uint32_t >& getSubmarinePartIdList() { if( m_SubmarinePartIdList.size() == 0 ) @@ -9481,12 +12823,24 @@ const std::set< uint32_t >& getSwitchTalkIdList() loadIdList( m_SwitchTalkDat, m_SwitchTalkIdList ); return m_SwitchTalkIdList; } +const std::set< uint32_t >& getSwitchTalkVariationIdList() +{ + if( m_SwitchTalkVariationIdList.size() == 0 ) + loadIdList( m_SwitchTalkVariationDat, m_SwitchTalkVariationIdList ); + return m_SwitchTalkVariationIdList; +} const std::set< uint32_t >& getTerritoryTypeIdList() { if( m_TerritoryTypeIdList.size() == 0 ) loadIdList( m_TerritoryTypeDat, m_TerritoryTypeIdList ); return m_TerritoryTypeIdList; } +const std::set< uint32_t >& getTerritoryTypeTransientIdList() +{ + if( m_TerritoryTypeTransientIdList.size() == 0 ) + loadIdList( m_TerritoryTypeTransientDat, m_TerritoryTypeTransientIdList ); + return m_TerritoryTypeTransientIdList; +} const std::set< uint32_t >& getTextCommandIdList() { if( m_TextCommandIdList.size() == 0 ) @@ -9559,6 +12913,18 @@ const std::set< uint32_t >& getTreasureHuntRankIdList() loadIdList( m_TreasureHuntRankDat, m_TreasureHuntRankIdList ); return m_TreasureHuntRankIdList; } +const std::set< uint32_t >& getTreasureModelIdList() +{ + if( m_TreasureModelIdList.size() == 0 ) + loadIdList( m_TreasureModelDat, m_TreasureModelIdList ); + return m_TreasureModelIdList; +} +const std::set< uint32_t >& getTreasureSpotIdList() +{ + if( m_TreasureSpotIdList.size() == 0 ) + loadIdList( m_TreasureSpotDat, m_TreasureSpotIdList ); + return m_TreasureSpotIdList; +} const std::set< uint32_t >& getTribeIdList() { if( m_TribeIdList.size() == 0 ) @@ -9667,6 +13033,12 @@ const std::set< uint32_t >& getWarpLogicIdList() loadIdList( m_WarpLogicDat, m_WarpLogicIdList ); return m_WarpLogicIdList; } +const std::set< uint32_t >& getWeaponTimelineIdList() +{ + if( m_WeaponTimelineIdList.size() == 0 ) + loadIdList( m_WeaponTimelineDat, m_WeaponTimelineIdList ); + return m_WeaponTimelineIdList; +} const std::set< uint32_t >& getWeatherIdList() { if( m_WeatherIdList.size() == 0 ) @@ -9733,6 +13105,18 @@ const std::set< uint32_t >& getWorldDCGroupTypeIdList() loadIdList( m_WorldDCGroupTypeDat, m_WorldDCGroupTypeIdList ); return m_WorldDCGroupTypeIdList; } +const std::set< uint32_t >& getYardCatalogCategoryIdList() +{ + if( m_YardCatalogCategoryIdList.size() == 0 ) + loadIdList( m_YardCatalogCategoryDat, m_YardCatalogCategoryIdList ); + return m_YardCatalogCategoryIdList; +} +const std::set< uint32_t >& getYardCatalogItemListIdList() +{ + if( m_YardCatalogItemListIdList.size() == 0 ) + loadIdList( m_YardCatalogItemListDat, m_YardCatalogItemListIdList ); + return m_YardCatalogItemListIdList; +} const std::set< uint32_t >& getYKWIdList() { if( m_YKWIdList.size() == 0 ) @@ -9750,7 +13134,6 @@ const std::set< uint32_t >& getZoneSharedGroupIdList() }; } -} #endif diff --git a/src/common/Forwards.h b/src/common/Forwards.h index 7434f861..1fa810c9 100644 --- a/src/common/Forwards.h +++ b/src/common/Forwards.h @@ -5,12 +5,16 @@ namespace Sapphire { - class ConfigMgr; class Framework; - using ConfigMgrPtr = std::shared_ptr< ConfigMgr >; using FrameworkPtr = std::shared_ptr< Framework >; } +namespace Sapphire::Common +{ + class ConfigMgr; + using ConfigMgrPtr = std::shared_ptr< ConfigMgr >; +} + namespace Sapphire::Network { class Hive; diff --git a/src/common/Framework.cpp b/src/common/Framework.cpp deleted file mode 100644 index 7243f69b..00000000 --- a/src/common/Framework.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "Framework.h" -#include "Logging/Logger.h" diff --git a/src/common/Framework.h b/src/common/Framework.h deleted file mode 100644 index 5714bdb3..00000000 --- a/src/common/Framework.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _CORE_FRAMEWORK_H -#define _CORE_FRAMEWORK_H - -#include -#include -#include -#include -#include - -namespace Sapphire -{ - - class Framework - { - using TypenameToObject = std::map< std::type_index, std::shared_ptr< void > >; - TypenameToObject ObjectMap; - - public: - template< typename T > - std::shared_ptr< T > get() - { - auto iType = ObjectMap.find( typeid( T ) ); - assert( !( iType == ObjectMap.end() ) ); - return std::static_pointer_cast< T >( iType->second ); - } - - template< typename T > - void set( std::shared_ptr< T > value ) - { - assert( value ); // why would anyone store nullptrs.... - ObjectMap[ typeid( T ) ] = value; - } - }; - -} - -#endif // _CORE_FRAMEWORK_H diff --git a/src/common/Logging/Logger.cpp b/src/common/Logging/Logger.cpp index bc063b25..4b37aba9 100644 --- a/src/common/Logging/Logger.cpp +++ b/src/common/Logging/Logger.cpp @@ -1,6 +1,6 @@ #include "Logger.h" -#define SPDLOG_LEVEL_NAMES { "trace", "debug", "info", "warning", "error", "fatal", "off" } +#define SPDLOG_LEVEL_NAMES { "trace", "debug", "info", "warn", "error", "fatal", "off" } #include #include @@ -8,9 +8,9 @@ #include // #include -#include // or #include +#include // or #include -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; void Sapphire::Logger::init( const std::string& logPath ) { diff --git a/src/common/Network/Acceptor.cpp b/src/common/Network/Acceptor.cpp index ab76398c..43c17d8f 100644 --- a/src/common/Network/Acceptor.cpp +++ b/src/common/Network/Acceptor.cpp @@ -2,7 +2,10 @@ #include "Acceptor.h" #include "Connection.h" -Sapphire::Network::Acceptor::Acceptor( HivePtr hive ) : + +using namespace Sapphire; + +Network::Acceptor::Acceptor( HivePtr hive ) : m_hive( hive ), m_acceptor( hive->getService() ), m_io_strand( hive->getService() ), @@ -10,21 +13,21 @@ Sapphire::Network::Acceptor::Acceptor( HivePtr hive ) : { } -Sapphire::Network::Acceptor::~Acceptor() +Network::Acceptor::~Acceptor() { } -bool Sapphire::Network::Acceptor::onAccept( ConnectionPtr connection, const std::string& host, uint16_t port ) +bool Network::Acceptor::onAccept( ConnectionPtr connection, const std::string& host, uint16_t port ) { return true; } -void Sapphire::Network::Acceptor::onError( const asio::error_code& error ) +void Network::Acceptor::onError( const asio::error_code& error ) { } -void Sapphire::Network::Acceptor::startError( const asio::error_code& error ) +void Network::Acceptor::startError( const asio::error_code& error ) { uint32_t v1 = 1; uint32_t v2 = 0; @@ -37,7 +40,7 @@ void Sapphire::Network::Acceptor::startError( const asio::error_code& error ) } } -void Sapphire::Network::Acceptor::dispatchAccept( ConnectionPtr connection ) +void Network::Acceptor::dispatchAccept( ConnectionPtr connection ) { m_acceptor.async_accept( connection->getSocket(), connection->getStrand().wrap( std::bind( &Acceptor::handleAccept, @@ -46,7 +49,7 @@ void Sapphire::Network::Acceptor::dispatchAccept( ConnectionPtr connection ) connection ) ) ); } -void Sapphire::Network::Acceptor::handleAccept( const asio::error_code& error, ConnectionPtr connection ) +void Network::Acceptor::handleAccept( const asio::error_code& error, ConnectionPtr connection ) { if( error || hasError() || m_hive->hasStopped() ) { @@ -72,17 +75,17 @@ void Sapphire::Network::Acceptor::handleAccept( const asio::error_code& error, C } } -void Sapphire::Network::Acceptor::stop() +void Network::Acceptor::stop() { } -void Sapphire::Network::Acceptor::accept( ConnectionPtr connection ) +void Network::Acceptor::accept( ConnectionPtr connection ) { m_io_strand.post( std::bind( &Acceptor::dispatchAccept, shared_from_this(), connection ) ); } -void Sapphire::Network::Acceptor::listen( const std::string& host, const uint16_t& port ) +void Network::Acceptor::listen( const std::string& host, const uint16_t& port ) { try { @@ -103,17 +106,17 @@ void Sapphire::Network::Acceptor::listen( const std::string& host, const uint16_ } -Sapphire::Network::HivePtr Sapphire::Network::Acceptor::getHive() +Network::HivePtr Network::Acceptor::getHive() { return m_hive; } -asio::ip::tcp::acceptor& Sapphire::Network::Acceptor::getAcceptor() +asio::ip::tcp::acceptor& Network::Acceptor::getAcceptor() { return m_acceptor; } -bool Sapphire::Network::Acceptor::hasError() +bool Network::Acceptor::hasError() { uint32_t v1 = 1; uint32_t v2 = 1; diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index b3ecf167..6ead8897 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -13,8 +13,8 @@ namespace Sapphire::Network::ActorControl { -enum ActorControlType : uint16_t -{ + enum ActorControlType : uint16_t + { /*! Toggles weapon status -> Sheathed/UnSheathed \param param1 status 0|1 */ ToggleWeapon = 0x00, @@ -24,6 +24,9 @@ enum ActorControlType : uint16_t SetStatus = 0x02, CastStart = 0x03, ToggleAggro = 0x04, + /*! + * param1 = ClassJob ID + */ ClassJobChange = 0x05, DefeatMsg = 0x06, GainExpMsg = 0x07, @@ -98,6 +101,8 @@ enum ActorControlType : uint16_t FreeEventPos = 0x8A, + DailyQuestSeed = 0x90, // param1 = the daily quest seed + SetBGM = 0xA1, UnlockAetherCurrentMsg = 0xA4, @@ -140,6 +145,15 @@ enum ActorControlType : uint16_t SetPose = 0x127, + /*! + * This is used for general crafting events, I found some of them but some are missing: + * + * param1 = event type, the rest of the struct depends on this param. + * - 18 & 19: Quicksynth result, 19 means HQ result item, item ID is param2 and is + 1 000 000 when HQ. + * Quantity is param3 (possible quicksynth that gives more than one item in the future?) + * + * All the other values have unkown behavior for now. + */ CraftingUnk = 0x12C, GatheringSenseMsg = 0x130, @@ -173,6 +187,14 @@ enum ActorControlType : uint16_t RelicInfuseMsg = 0x179, + /*! + * Sent as result of an aetherial reduction. + * param1 = Reduced item ID + 500 000 (idk what this 500 000 is but it's always here no matter what) + * param2 = First result item id (+ 1 000 000 if HQ) + * param3 = First result item quantity + * param4 = (Optional) Second result item id (+ 1 000 000 if HQ) + * param5 = (Optional) Second result item quantity + */ AetherReductionDlg = 0x17D, /*! @@ -204,6 +226,22 @@ enum ActorControlType : uint16_t ChallengeEntryCompleteMsg = 0x20B, ChallengeEntryUnlockMsg = 0x20C, + /*! + * Sent when a player desynths an item, one packet per result type (one for consumed item, one for each obtained items, and one for exp if the player received exp) + * param1 = result type + * 4921 => Desynth item consumed + * 4922 => Desynth item obtained + * 4925 => Desynth exp obtained) + * 3553 => Reduction item used + * 3555 => Reduction item obtained + * param3 = u32 item id (+100 000 if item is HQ) + * param4 = item amount (used only for reduction it seems) + * param5 = exp amount (x 100) + * + * Idk exactly how reduce's param3 is formatted, it seems like it's item id + 500 000 but it seems too... shady. + */ + DesynthOrReductionResult = 0x20F, + GilTrailMsg = 0x211, HuntingLogRankUnlock = 0x21D, @@ -220,10 +258,22 @@ enum ActorControlType : uint16_t GearSetEquipMsg = 0x321, + SetBait = 0x325, // param1: bait ID + SetFestival = 0x386, // param1: festival.exd index ToggleOrchestrionUnlock = 0x396, - Dismount = 0x3A1, // updated 4.5 + + EventBattleDialog = 0x39D, + + /*! + * param1 = mountSpeed + * Retail sends 12 for mount speed star 1 unlocked and 15 for mount speed star 2 unlocked + * This also has to be sent before mounting finishes for it to take effect + */ + SetMountSpeed = 0x3A0, // updated 5.35 hotfix + + Dismount = 0x3A2, // updated 5.35 hotfix // Duty Recorder BeginReplayAck = 0x3A2, @@ -300,6 +350,7 @@ enum ActorControlType : uint16_t DismountReq = 0x65, SpawnCompanionReq = 0x66, + DespawnCompanionReq = 0x67, RemoveStatusEffect = 0x68, CastCancel = 0x69, @@ -315,20 +366,26 @@ enum ActorControlType : uint16_t UpdatedSeenHowTos = 0x133, AllotAttribute = 0x135, - ClearWaymarks = 0x13A, + ClearFieldMarkers = 0x13A, CameraMode = 0x13B, // param12, 1 = camera mode enable, 0 = disable CharaNameReq = 0x13D, // requests character name by content id HuntingLogDetails = 0x194, Timers = 0x1AB, - DyeItem = 0x1B5, + DyeItem = 0x1B0, // updated 5.21 RequestChocoboInventory = 0x1C4, EmoteReq = 0x1F4, EmoteCancel = 0x1F6, PersistentEmoteCancel = 0x1F7, + /*! + * param2 = pose ID + * 0 = idle pose 0 (just standing) + * 1 = idle pose 1 + * 2-4 = idle poses 2-4 + */ PoseChange = 0x1F9, PoseReapply = 0x1FA, PoseCancel = 0x1FB, @@ -337,6 +394,8 @@ enum ActorControlType : uint16_t AchievementComp = 0x203, AchievementCatChat = 0x206, + RequestEventBattle = 0x232C, + QuestJournalUpdateQuestVisibility = 0x2BE, QuestJournalClosed = 0x2BF, diff --git a/src/common/Network/Connection.cpp b/src/common/Network/Connection.cpp index 21e8bee7..a2e71f38 100644 --- a/src/common/Network/Connection.cpp +++ b/src/common/Network/Connection.cpp @@ -1,23 +1,21 @@ #include "Connection.h" #include "Hive.h" #include -#include "Framework.h" -Sapphire::Network::Connection::Connection( HivePtr hive, FrameworkPtr pFw ) : +using namespace Sapphire; + +Network::Connection::Connection( HivePtr hive ) : m_hive( hive ), m_socket( hive->getService() ), m_io_strand( hive->getService() ), m_receive_buffer_size( 32000 ), - m_error_state( 0 ), - m_pFw( pFw ) + m_error_state( 0 ) { } -Sapphire::Network::Connection::~Connection() -{ -} +Network::Connection::~Connection() = default; -void Sapphire::Network::Connection::bind( const std::string& ip, uint16_t port ) +void Network::Connection::bind( const std::string& ip, uint16_t port ) { asio::ip::tcp::endpoint endpoint( asio::ip::address::from_string( ip ), port ); m_socket.open( endpoint.protocol() ); @@ -25,7 +23,7 @@ void Sapphire::Network::Connection::bind( const std::string& ip, uint16_t port ) m_socket.bind( endpoint ); } -void Sapphire::Network::Connection::startSend() +void Network::Connection::startSend() { if( !m_pending_sends.empty() ) { @@ -38,7 +36,7 @@ void Sapphire::Network::Connection::startSend() } } -void Sapphire::Network::Connection::startRecv( int32_t total_bytes ) +void Network::Connection::startRecv( int32_t total_bytes ) { if( total_bytes > 0 ) { @@ -61,7 +59,7 @@ void Sapphire::Network::Connection::startRecv( int32_t total_bytes ) } } -void Sapphire::Network::Connection::startError( const asio::error_code& error ) +void Network::Connection::startError( const asio::error_code& error ) { uint32_t v1 = 1; uint32_t v2 = 0; @@ -74,7 +72,7 @@ void Sapphire::Network::Connection::startError( const asio::error_code& error ) } } -void Sapphire::Network::Connection::handleConnect( const asio::error_code& error ) +void Network::Connection::handleConnect( const asio::error_code& error ) { if( error || hasError() || m_hive->hasStopped() ) { @@ -94,8 +92,8 @@ void Sapphire::Network::Connection::handleConnect( const asio::error_code& error } } -void Sapphire::Network::Connection::handleSend( const asio::error_code& error, - std::list< std::vector< uint8_t > >::iterator itr ) +void Network::Connection::handleSend( const asio::error_code& error, + std::list< std::vector< uint8_t > >::iterator itr ) { if( error || hasError() || m_hive->hasStopped() ) { @@ -109,7 +107,7 @@ void Sapphire::Network::Connection::handleSend( const asio::error_code& error, } } -void Sapphire::Network::Connection::handleRecv( const asio::error_code& error, int32_t actual_bytes ) +void Network::Connection::handleRecv( const asio::error_code& error, int32_t actual_bytes ) { if( error || hasError() || m_hive->hasStopped() ) { @@ -128,7 +126,7 @@ void Sapphire::Network::Connection::handleRecv( const asio::error_code& error, i } } -void Sapphire::Network::Connection::dispatchSend( std::vector< uint8_t > buffer ) +void Network::Connection::dispatchSend( std::vector< uint8_t > buffer ) { bool should_start_send = m_pending_sends.empty(); m_pending_sends.push_back( buffer ); @@ -138,7 +136,7 @@ void Sapphire::Network::Connection::dispatchSend( std::vector< uint8_t > buffer } } -void Sapphire::Network::Connection::dispatchRecv( int32_t total_bytes ) +void Network::Connection::dispatchRecv( int32_t total_bytes ) { bool should_start_receive = m_pending_recvs.empty(); m_pending_recvs.push_back( total_bytes ); @@ -149,7 +147,7 @@ void Sapphire::Network::Connection::dispatchRecv( int32_t total_bytes ) } -void Sapphire::Network::Connection::connect( const std::string& host, uint16_t port ) +void Network::Connection::connect( const std::string& host, uint16_t port ) { asio::ip::tcp::resolver resolver( m_hive->getService() ); asio::ip::tcp::resolver::query query( host, std::to_string( port ) ); @@ -160,48 +158,48 @@ void Sapphire::Network::Connection::connect( const std::string& host, uint16_t p } -void Sapphire::Network::Connection::disconnect() +void Network::Connection::disconnect() { onDisconnect(); m_socket.close(); } -void Sapphire::Network::Connection::recv( int32_t total_bytes ) +void Network::Connection::recv( int32_t total_bytes ) { m_io_strand.post( std::bind( &Connection::dispatchRecv, shared_from_this(), total_bytes ) ); } -void Sapphire::Network::Connection::send( const std::vector< uint8_t >& buffer ) +void Network::Connection::send( const std::vector< uint8_t >& buffer ) { m_io_strand.post( std::bind( &Connection::dispatchSend, shared_from_this(), buffer ) ); } -asio::ip::tcp::socket& Sapphire::Network::Connection::getSocket() +asio::ip::tcp::socket& Network::Connection::getSocket() { return m_socket; } -asio::strand& Sapphire::Network::Connection::getStrand() +asio::strand& Network::Connection::getStrand() { return m_io_strand; } -Sapphire::Network::HivePtr Sapphire::Network::Connection::getHive() +Network::HivePtr Network::Connection::getHive() { return m_hive; } -void Sapphire::Network::Connection::setReceiveBufferSize( int32_t size ) +void Network::Connection::setReceiveBufferSize( int32_t size ) { m_receive_buffer_size = size; } -int32_t Sapphire::Network::Connection::getReceiveBufferSize() const +int32_t Network::Connection::getReceiveBufferSize() const { return m_receive_buffer_size; } -bool Sapphire::Network::Connection::hasError() +bool Network::Connection::hasError() { uint32_t v1 = 1; uint32_t v2 = 1; diff --git a/src/common/Network/Connection.h b/src/common/Network/Connection.h index fbfc85c9..91f86aea 100644 --- a/src/common/Network/Connection.h +++ b/src/common/Network/Connection.h @@ -12,12 +12,6 @@ #include "Acceptor.h" #include -namespace Sapphire -{ - class Framework; - using FrameworkPtr = std::shared_ptr< Framework >; -} - namespace Sapphire::Network { @@ -41,9 +35,8 @@ namespace Sapphire::Network std::list< std::vector< uint8_t > > m_pending_sends; int32_t m_receive_buffer_size; std::atomic< uint32_t > m_error_state; - Sapphire::FrameworkPtr m_pFw; - Connection( HivePtr hive, FrameworkPtr pFw ); + Connection( HivePtr hive ); virtual ~Connection(); @@ -147,13 +140,13 @@ namespace Sapphire::Network //----------------------------------------------------------------------------- template< class T > - std::shared_ptr< T > addServerToHive( const std::string& listenIp, uint32_t port, HivePtr pHive, FrameworkPtr pFw ) + std::shared_ptr< T > addServerToHive( const std::string& listenIp, uint32_t port, HivePtr pHive ) { try { AcceptorPtr acceptor( new Acceptor( pHive ) ); acceptor->listen( listenIp, port ); - std::shared_ptr< T > connection( new T( pHive, acceptor, pFw ) ); + std::shared_ptr< T > connection( new T( pHive, acceptor ) ); acceptor->accept( connection ); return connection; } diff --git a/src/common/Network/GamePacket.h b/src/common/Network/GamePacket.h index f62c08ef..c1c06b76 100644 --- a/src/common/Network/GamePacket.h +++ b/src/common/Network/GamePacket.h @@ -257,7 +257,7 @@ namespace Sapphire::Network::Packets // The IPC type itself. m_ipcHdr.type = static_cast< ServerZoneIpcType >( m_data._ServerIpcType ); - m_ipcHdr.timestamp = Util::getTimeSeconds(); + m_ipcHdr.timestamp = Common::Util::getTimeSeconds(); m_segHdr.size = sizeof( T ) + sizeof( FFXIVARR_IPC_HEADER ) + sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); }; diff --git a/src/common/Network/GamePacketParser.cpp b/src/common/Network/GamePacketParser.cpp index 6a18b718..b14d2657 100644 --- a/src/common/Network/GamePacketParser.cpp +++ b/src/common/Network/GamePacketParser.cpp @@ -3,9 +3,10 @@ #include // memcpy +using namespace Sapphire; using namespace Sapphire::Network::Packets; -PacketParseResult Sapphire::Network::Packets::getHeader( const std::vector< uint8_t >& buffer, +PacketParseResult Network::Packets::getHeader( const std::vector< uint8_t >& buffer, const uint32_t offset, FFXIVARR_PACKET_HEADER& header ) { @@ -25,7 +26,7 @@ PacketParseResult Sapphire::Network::Packets::getHeader( const std::vector< uint return Success; } -PacketParseResult Sapphire::Network::Packets::getSegmentHeader( const std::vector< uint8_t >& buffer, +PacketParseResult Network::Packets::getSegmentHeader( const std::vector< uint8_t >& buffer, const uint32_t offset, FFXIVARR_PACKET_SEGMENT_HEADER& header ) { @@ -42,7 +43,7 @@ PacketParseResult Sapphire::Network::Packets::getSegmentHeader( const std::vecto return Success; } -PacketParseResult Sapphire::Network::Packets::getPackets( const std::vector< uint8_t >& buffer, +PacketParseResult Network::Packets::getPackets( const std::vector< uint8_t >& buffer, const uint32_t offset, const FFXIVARR_PACKET_HEADER& packetHeader, std::vector< FFXIVARR_PACKET_RAW >& packets ) @@ -81,7 +82,7 @@ PacketParseResult Sapphire::Network::Packets::getPackets( const std::vector< uin return Success; } -PacketParseResult Sapphire::Network::Packets::getPacket( const std::vector< uint8_t >& buffer, const uint32_t offset, +PacketParseResult Network::Packets::getPacket( const std::vector< uint8_t >& buffer, const uint32_t offset, FFXIVARR_PACKET_RAW& packet ) { // Copy segment header @@ -103,7 +104,7 @@ PacketParseResult Sapphire::Network::Packets::getPacket( const std::vector< uint return Success; } -bool Sapphire::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER& header ) +bool Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER& header ) { // Max size of the packet is capped at 1MB for now. if( header.size > 1 * 1024 * 1024 ) @@ -116,7 +117,7 @@ bool Sapphire::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER& head return true; } -bool Sapphire::Network::Packets::checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER& header ) +bool Network::Packets::checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER& header ) { // Max size of individual message is capped at 256KB for now. if( header.size > 256 * 1024 ) diff --git a/src/common/Network/Hive.cpp b/src/common/Network/Hive.cpp index 86460b2d..758c30d3 100644 --- a/src/common/Network/Hive.cpp +++ b/src/common/Network/Hive.cpp @@ -2,41 +2,43 @@ #include #include "Hive.h" +using namespace Sapphire; + //----------------------------------------------------------------------------- -Sapphire::Network::Hive::Hive() : +Network::Hive::Hive() : m_work_ptr( new asio::io_service::work( m_io_service ) ), m_shutdown( 0 ) { } -Sapphire::Network::Hive::~Hive() +Network::Hive::~Hive() { } -asio::io_service& Sapphire::Network::Hive::getService() +asio::io_service& Network::Hive::getService() { return m_io_service; } -bool Sapphire::Network::Hive::hasStopped() +bool Network::Hive::hasStopped() { uint32_t v1 = 1; uint32_t v2 = 1; return m_shutdown.compare_exchange_strong( v1, v2 ); } -void Sapphire::Network::Hive::poll() +void Network::Hive::poll() { m_io_service.poll(); } -void Sapphire::Network::Hive::run() +void Network::Hive::run() { m_io_service.run(); } -void Sapphire::Network::Hive::stop() +void Network::Hive::stop() { uint32_t v1 = 1; uint32_t v2 = 0; @@ -48,7 +50,7 @@ void Sapphire::Network::Hive::stop() } } -void Sapphire::Network::Hive::reset() +void Network::Hive::reset() { uint32_t v1 = 0; uint32_t v2 = 1; diff --git a/src/common/Network/Hive.h b/src/common/Network/Hive.h index c8ea62e5..8ac37328 100644 --- a/src/common/Network/Hive.h +++ b/src/common/Network/Hive.h @@ -5,7 +5,7 @@ #include #include -namespace Sapphire:: Network +namespace Sapphire::Network { class Hive : public std::enable_shared_from_this< Hive > diff --git a/src/common/Network/PacketContainer.cpp b/src/common/Network/PacketContainer.cpp index a61c38c0..0b6fa1b1 100644 --- a/src/common/Network/PacketContainer.cpp +++ b/src/common/Network/PacketContainer.cpp @@ -7,7 +7,9 @@ #include #include -Sapphire::Network::Packets::PacketContainer::PacketContainer( uint32_t segmentTargetOverride ) : +using namespace Sapphire; + +Network::Packets::PacketContainer::PacketContainer( uint32_t segmentTargetOverride ) : m_segmentTargetOverride( segmentTargetOverride ) { memset( &m_ipcHdr, 0, sizeof( FFXIVARR_PACKET_HEADER ) ); @@ -15,12 +17,12 @@ Sapphire::Network::Packets::PacketContainer::PacketContainer( uint32_t segmentTa m_ipcHdr.count = 0; } -Sapphire::Network::Packets::PacketContainer::~PacketContainer() +Network::Packets::PacketContainer::~PacketContainer() { m_entryList.clear(); } -void Sapphire::Network::Packets::PacketContainer::addPacket( Sapphire::Network::Packets::FFXIVPacketBasePtr entry ) +void Network::Packets::PacketContainer::addPacket( Network::Packets::FFXIVPacketBasePtr entry ) { m_entryList.push_back( entry ); @@ -28,7 +30,7 @@ void Sapphire::Network::Packets::PacketContainer::addPacket( Sapphire::Network:: m_ipcHdr.count++; } -void Sapphire::Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8_t >& sendBuffer ) +void Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8_t >& sendBuffer ) { std::vector< uint8_t > tempBuffer( m_ipcHdr.size ); memset( &tempBuffer[ 0 ], 0, m_ipcHdr.size ); @@ -67,7 +69,7 @@ void Sapphire::Network::Packets::PacketContainer::fillSendBuffer( std::vector< u } -std::string Sapphire::Network::Packets::PacketContainer::toString() +std::string Network::Packets::PacketContainer::toString() { std::vector< uint8_t > tmpBuffer; @@ -76,7 +78,7 @@ std::string Sapphire::Network::Packets::PacketContainer::toString() std::string str = "\n"; for( uint32_t i = 0; i < m_ipcHdr.size; i++ ) { - str += Util::intToHexString( static_cast< int32_t >( tmpBuffer[ i ] & 0xFF ) ) + " "; + str += Common::Util::intToHexString( static_cast< int32_t >( tmpBuffer[ i ] & 0xFF ) ) + " "; if( ( i + 1 ) % 16 == 0 ) str += "\n"; diff --git a/src/common/Network/PacketDef/Chat/ServerChatDef.h b/src/common/Network/PacketDef/Chat/ServerChatDef.h index 755ad3c8..a91004b7 100644 --- a/src/common/Network/PacketDef/Chat/ServerChatDef.h +++ b/src/common/Network/PacketDef/Chat/ServerChatDef.h @@ -4,10 +4,8 @@ #include #include -namespace Sapphire { -namespace Network { -namespace Packets { -namespace Server { +namespace Sapphire::Network::Packets::Server +{ /** * Structural representation of the packet sent by the server as response @@ -31,10 +29,37 @@ struct FFXIVIpcTellErrNotFound : FFXIVIpcBasePacket< TellErrNotFound > char receipientName[32]; }; -} /* Server */ -} /* Packets */ -} /* Network */ -} /* Sapphire */ +struct FFXIVIpcFreeCompanyEvent : FFXIVIpcBasePacket< FreeCompanyEvent > +{ + uint16_t unknown; + uint16_t unknown1; + uint16_t unknown2; + uint16_t unknown3; + uint16_t unknown4; + char padding[6]; + uint8_t eventID; + /* + * 0x0F Login + * 0x10 Logout + */ + uint8_t padding1; + char padding2[6]; + uint16_t unknown5; + char parameter[46]; + /** + * eventID | parameter usage + * 0x0F FC name + * 0x10 FC name + */ + char parameter1[32]; + /** + * eventID | parameter1 usage + * 0x0F Character name + * 0x10 Character name + */ +}; + +} /* Sapphire::Common::Network::Packets::Server */ diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index daed4d35..0b93fdaf 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -43,176 +43,219 @@ namespace Sapphire::Network::Packets */ enum ServerZoneIpcType : uint16_t { + Ping = 0x0219, // updated 5.35 hotfix + Init = 0x0185, // updated 5.35 hotfix - // static opcode ( the ones that rarely, if ever, change ) - Ping = 0x0065, - Init = 0x0066, + ActorFreeSpawn = 0x0239, // updated 5.35 hotfix + InitZone = 0x03CD, // updated 5.35 hotfix - ActorFreeSpawn = 0x0191, - InitZone = 0x019A, + EffectResult = 0x01C2, // updated 5.35 hotfix + ActorControl = 0x02A4, // updated 5.35 hotfix + ActorControlSelf = 0x02C8, // updated 5.35 hotfix + ActorControlTarget = 0x0209, // updated 5.35 hotfix - AddStatusEffect = 0x0141, - ActorControl142 = 0x0142, - ActorControl143 = 0x0143, - ActorControl144 = 0x0144, - UpdateHpMpTp = 0x0145, + /*! + * @brief Used when resting + */ + UpdateHpMpTp = 0x0319, // updated 5.35 hotfix /////////////////////////////////////////////////// - ChatBanned = 0x006B, - Playtime = 0x006C, // updated 4.5 - Logout = 0x0077, // updated 4.5 - CFNotify = 0x0078, + ChatBanned = 0xF06B, + Playtime = 0x03A4, // updated 5.35 hotfix + Logout = 0x02AD, // updated 5.35 hotfix + CFNotify = 0x02C4, // updated 5.35 hotfix CFMemberStatus = 0x0079, CFDutyInfo = 0x007A, - CFPlayerInNeed = 0x007F, + CFPlayerInNeed = 0xF07F, + CFPreferredRole = 0x0196, // updated 5.35 hotfix + CFCancel = 0x00EC, // updated 5.35 hotfix + SocialRequestError = 0xF0AD, - SocialRequestError = 0x00AD, - - CFRegistered = 0x00B8, // updated 4.1 - SocialRequestResponse = 0x00BB, // updated 4.1 + CFRegistered = 0x010C, // updated 5.35 hotfix + SocialRequestResponse = 0x01C7, // updated 5.35 hotfix + SocialMessage = 0x0308, // updated 5.35 hotfix + SocialMessage2 = 0x037C, // updated 5.35 hotfix CancelAllianceForming = 0x00C6, // updated 4.2 - Chat = 0x00F7, // updated 4.5? - SocialList = 0x0103, // updated 4.5 - - UpdateSearchInfo = 0x0106, // updated 4.5 - InitSearchInfo = 0x0107, // updated 4.4 - ExamineSearchComment = 0x0102, // updated 4.1 - - ServerNoticeShort = 0x010B, // added 4.5 - ServerNotice = 0x010C, // updated 4.5 - SetOnlineStatus = 0x010D, // updated 4.5 - - CountdownInitiate = 0x0114, // updated 4.5 - CountdownCancel = 0x0115, // updated 4.5 - - BlackList = 0x0118, // updated 4.5 - LogMessage = 0x00D0, - LinkshellList = 0x011F, // updated 4.5 + Chat = 0x0349, // updated 5.35 hotfix + PartyChat = 0x0065, - MailDeleteRequest = 0x0120, // updated 4.5 - ReqMoogleMailList = 0x0121, // updated 4.5 - ReqMoogleMailLetter = 0x0122, // updated 4.5 - MailLetterNotification = 0x0123, // updated 4.5 + WorldVisitList = 0xF0FE, // added 4.5 - MarketBoardItemListingCount = 0x0125, // updated 4.5 - MarketBoardItemListing = 0x0126, // updated 4.5 - MarketBoardItemListingHistory = 0x012A, // updated 4.5 - MarketBoardSearchResult = 0x0139, // updated 4.5 + SocialList = 0x0216, // updated 5.35 hotfix + ExamineSearchInfo = 0x03C3, // updated 5.35 hotfix + UpdateSearchInfo = 0x0121, // updated 5.35 hotfix + InitSearchInfo = 0x036F, // updated 5.35 hotfix + ExamineSearchComment = 0x0102, // updated 4.1 + + ServerNoticeShort = 0x0115, // updated 5.0 + ServerNotice = 0x02F8, // updated 5.35 hotfix + SetOnlineStatus = 0x03D7, // updated 5.35 hotfix + + CountdownInitiate = 0x0237, // updated 5.25 + CountdownCancel = 0x00D9, // updated 5.18 + + PlayerAddedToBlacklist = 0x033F, // updated 5.1 + PlayerRemovedFromBlacklist = 0x0385, // updated 5.1 + BlackList = 0x02DB, // updated 5.35 hotfix + + LinkshellList = 0x01F0, // updated 5.35 hotfix + + MailDeleteRequest = 0xF12B, // updated 5.0 + + // 12D - 137 - constant gap between 4.5x -> 5.0 + ReqMoogleMailList = 0xF138, // updated 5.0 + ReqMoogleMailLetter = 0xF139, // updated 5.0 + MailLetterNotification = 0x013A, // updated 5.0 + + MarketTaxRates = 0x01F8, // updated 5.35 hotfix + + MarketBoardSearchResult = 0x032C, // updated 5.35 hotfix + MarketBoardItemListingCount = 0x038F, // updated 5.35 hotfix + MarketBoardItemListingHistory = 0x0186, // updated 5.35 hotfix + MarketBoardItemListing = 0x025F, // updated 5.35 hotfix + CharaFreeCompanyTag = 0x013B, // updated 4.5 FreeCompanyBoardMsg = 0x013C, // updated 4.5 - FreeCompanyInfo = 0x013D, // updated 4.5 - ExamineFreeCompanyInfo = 0x013E, // updated 4.5 + FreeCompanyInfo = 0xF13D, // updated 4.5 + ExamineFreeCompanyInfo = 0xF13E, // updated 4.5 - StatusEffectList = 0x0151, // updated 4.5 - Effect = 0x0154, // updated 4.5 - AoeEffect8 = 0x0157, // updated 4.5 - AoeEffect16 = 0x0158, // updated 4.5 - AoeEffect24 = 0x0159, // updated 4.5 - AoeEffect32 = 0x015A, // updated 4.5 - PersistantEffect = 0x015B, // updated 4.5 + FreeCompanyUpdateShortMessage = 0xF157, // added 5.0 - GCAffiliation = 0x0165, // updated 4.5 + StatusEffectList = 0x0382, // updated 5.35 hotfix + EurekaStatusEffectList = 0x0167, // updated 5.18 + BossStatusEffectList = 0x0312, // added 5.1 + Effect = 0x0192, // updated 5.35 hotfix + AoeEffect8 = 0x012C, // updated 5.35 hotfix + AoeEffect16 = 0x03BF, // updated 5.3 + AoeEffect24 = 0x027E, // updated 5.3 + AoeEffect32 = 0x017E, // updated 5.3 + PersistantEffect = 0x0317, // updated 5.35 hotfix - PlayerSpawn = 0x0175, // updated 4.5 - NpcSpawn = 0x0176, // updated 4.5 - NpcSpawn2 = 0x0177, // ( Bigger statuseffectlist? ) updated 4.5 - ActorMove = 0x0178, // updated 4.5 + GCAffiliation = 0xF16F, // updated 5.0 - ActorSetPos = 0x017A, // updated 4.5 + PlayerSpawn = 0x0179, // updated 5.35 hotfix + NpcSpawn = 0x03A8, // updated 5.35 hotfix + NpcSpawn2 = 0x01CB, // ( Bigger statuseffectlist? ) updated 5.3 + ActorMove = 0x01BF, // updated 5.35 hotfix - ActorCast = 0x017C, // updated 4.5 + ActorSetPos = 0x03DF, // updated 5.35 hotfix - PartyList = 0x017E, // updated 4.5 + ActorCast = 0x0302, // updated 5.35 hotfix + SomeCustomiseChangePacketProbably = 0x00CD, // added 5.18 - HateList = 0x0180, // updated 4.5 - ObjectSpawn = 0x0181, // updated 4.5 - ObjectDespawn = 0x0182, // updated 4.5 - UpdateClassInfo = 0x0183, // updated 4.5 - SilentSetClassJob = 0x0184, // updated 4.5 - seems to be the case, not sure if it's actually used for anything - InitUI = 0x0185, // updated 4.5 - PlayerStats = 0x0186, // updated 4.5 - ActorOwner = 0x0187, // updated 4.5 - PlayerStateFlags = 0x0188, // updated 4.5 - PlayerClassInfo = 0x0189, // updated 4.5 + PartyList = 0x02B2, // updated 5.35 hotfix + PartyMessage = 0x00AE, // updated 5.35 hotfix + HateRank = 0x02CC, // updated 5.35 hotfix + HateList = 0x0198, // updated 5.35 hotfix + ObjectSpawn = 0x02B8, // updated 5.35 hotfix + ObjectDespawn = 0xF34B, // updated 5.18 + UpdateClassInfo = 0x0235, // updated 5.35 hotfix + SilentSetClassJob = 0x018E, // updated 5.0 - seems to be the case, not sure if it's actually used for anything + PlayerSetup = 0x0290, // updated 5.35 hotfix + PlayerStats = 0x023B, // updated 5.35 hotfix + ActorOwner = 0x00E8, // updated 5.35 hotfix + PlayerStateFlags = 0x00F8, // updated 5.35 hotfix + PlayerClassInfo = 0x02C3, // updated 5.35 hotfix + CharaVisualEffect = 0x02E2, // updated 5.35 hotfix - ModelEquip = 0x018B, // updated 4.5 - Examine = 0x018C, // updated 4.5 - CharaNameReq = 0x018D, // updated 4.5 + ModelEquip = 0x0277, // updated 5.35 hotfix + Examine = 0x00BC, // updated 5.35 hotfix + CharaNameReq = 0x008E, // updated 5.35 hotfix + + // nb: see #565 on github + UpdateRetainerItemSalePrice = 0xF19F, // updated 5.0 + RetainerSaleHistory = 0x020E, // updated 5.21 hotfix + RetainerInformation = 0x01F9, // updated 5.35 hotfix SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore - ItemInfo = 0x0196, // updated 4.5 - ContainerInfo = 0x0197, // updated 4.5 - InventoryTransactionFinish = 0x0198, // updated 4.5 - InventoryTransaction = 0x0199, // updated 4.5 + ItemInfo = 0x0214, // updated 5.35 hotfix + ContainerInfo = 0x00C5, // updated 5.35 hotfix + InventoryTransactionFinish = 0x02F0, // updated 5.35 hotfix + InventoryTransaction = 0x01FD, // updated 5.35 hotfix + CurrencyCrystalInfo = 0x0379, // updated 5.35 hotfix - CurrencyCrystalInfo = 0x019B, // updated 4.5 + InventoryActionAck = 0x03E4, // updated 5.35 hotfix + UpdateInventorySlot = 0x036A, // updated 5.35 hotfix - InventoryActionAck = 0x019D, // updated 4.5 - UpdateInventorySlot = 0x019E, // updated 4.5 + HuntingLogEntry = 0x0146, // updated 5.35 hotfix - HuntingLogEntry = 0x01A9, // added 4.5 + EventPlay = 0x00F3, // updated 5.35 hotfix + EventPlay4 = 0x00AC, // updated 5.35 hotfix + EventPlay8 = 0x023F, // updated 5.35 hotfix + EventPlay16 = 0x025B, // updated 5.35 hotfix + EventPlay32 = 0x029A, // updated 5.35 hotfix + EventPlay64 = 0x02C1, // updated 5.35 hotfix + EventPlay128 = 0x038A, // updated 5.35 hotfix + EventPlay255 = 0x034B, // updated 5.35 hotfix - EventPlay = 0x01AB, // updated 4.5 - DirectorPlayScene = 0x01AF, // updated 4.5 - EventOpenGilShop = 0x01B2, // updated 4.5 - - EventStart = 0x01B4, // updated 4.5 - EventFinish = 0x01B5, // updated 4.5 + EventStart = 0x009A, // updated 5.35 hotfix + EventFinish = 0x007E, // updated 5.35 hotfix EventLinkshell = 0x1169, - QuestActiveList = 0x01C8, // updated 4.5 - QuestUpdate = 0x01C9, // updated 4.5 - QuestCompleteList = 0x01CA, // updated 4.5 + QuestActiveList = 0x0117, // updated 5.35 hotfix + QuestUpdate = 0x0073, // updated 5.35 hotfix + QuestCompleteList = 0x0240, // updated 5.35 hotfix - QuestFinish = 0x01CB, // updated 4.5 - MSQTrackerComplete = 0x01CC, // updated 4.5 + QuestFinish = 0x00E9, // updated 5.35 hotfix + MSQTrackerComplete = 0xF1D6, // updated 5.0 MSQTrackerProgress = 0xF1CD, // updated 4.5 ? this actually looks like the two opcodes have been combined, see #474 - QuestMessage = 0x01D3, // updated 4.5 + QuestMessage = 0x0381, // updated 5.35 hotfix - QuestTracker = 0x01D8, // updated 4.5 + QuestTracker = 0x018B, // updated 5.35 hotfix - Mount = 0x01E8, // updated 4.5 + Mount = 0x01B5, // updated 5.35 hotfix - DirectorVars = 0x01EA, // updated 4.5 - DirectorPopUp = 0x01F5, // display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown + DirectorVars = 0x00E6, // updated 5.18 + SomeDirectorUnk1 = 0x0084, // updated 5.18 + SomeDirectorUnk2 = 0xF0C1, // updated 5.18 + SomeDirectorUnk4 = 0x0202, // updated 5.35 hotfix + SomeDirectorUnk8 = 0x028A, // updated 5.18 + SomeDirectorUnk16 = 0x028C, // updated 5.18 + DirectorPopUp = 0xF162, // updated 5.18 - display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown + DirectorPopUp4 = 0x0214, // updated 5.18 + DirectorPopUp8 = 0x00F8, // updated 5.18 CFAvailableContents = 0xF1FD, // updated 4.2 - WeatherChange = 0x0205, // updated 4.5 - PlayerTitleList = 0x0206, // updated 4.5? - Discovery = 0x0207, // updated 4.5? + WeatherChange = 0x027B, // updated 5.35 hotfix + PlayerTitleList = 0x037D, // updated 5.1 + Discovery = 0x031B, // updated 5.35 hotfix - EorzeaTimeOffset = 0x0209, // updated 4.5 + EorzeaTimeOffset = 0xF3B8, // updated 5.1 - EquipDisplayFlags = 0x0215, // updated 4.5 + EquipDisplayFlags = 0x00BE, // updated 5.35 hotfix + + MiniCactpotInit = 0x0286, // added 5.31 + ShopMessage = 0x0197, // updated 5.35 hotfix + LootMessage = 0x01B7, // updated 5.35 hotfix /// Housing ////////////////////////////////////// - LandSetInitialize = 0x0229, // updated 4.5 - LandUpdate = 0x022A, // updated 4.5 - YardObjectSpawn = 0x022B, // updated 4.5 - HousingIndoorInitialize = 0x022C, // updated 4.5 - LandPriceUpdate = 0x022D, // updated 4.5 - LandInfoSign = 0x022E, // updated 4.5 - LandRename = 0x022F, // updated 4.5 - HousingEstateGreeting = 0x0230, // updated 4.5 - HousingUpdateLandFlagsSlot = 0x0231, // updated 4.5 - HousingLandFlags = 0x0232, // updated 4.5 - HousingShowEstateGuestAccess = 0x0233, // updated 4.5 + LandSetInitialize = 0x0234, // updated 5.0 + LandUpdate = 0x0235, // updated 5.0 + YardObjectSpawn = 0xF236, // updated 5.0 + HousingIndoorInitialize = 0x0237, // updated 5.0 + LandPriceUpdate = 0x0238, // updated 5.0 + LandInfoSign = 0x023D, // updated 5.35 hotfix + LandRename = 0x023A, // updated 5.0 + HousingEstateGreeting = 0x023B, // updated 5.0 + HousingUpdateLandFlagsSlot = 0x023C, // updated 5.0 + HousingLandFlags = 0x022F, // updated 5.35 hotfix + HousingShowEstateGuestAccess = 0x023E, // updated 5.0 - HousingObjectInitialize = 0x0235, // updated 4.45 - HousingInternalObjectSpawn = 0x236, // updated 4.5 + HousingObjectInitialize = 0x01AA, // updated 5.35 hotfix + HousingInternalObjectSpawn = 0xF241, // updated 5.0 - HousingWardInfo = 0x0238, // updated 4.5 - HousingObjectMove = 0x0239, // updated 4.5 + HousingWardInfo = 0x02FD, // updated 5.35 hotfix + HousingObjectMove = 0xF244, // updated 5.0 SharedEstateSettingsResponse = 0x0245, // updated 4.5 @@ -225,16 +268,15 @@ namespace Sapphire::Network::Packets DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui PerformNote = 0x0286, // updated 4.3 - PrepareZoning = 0x0299, // updated 4.5 - ActorGauge = 0x0292, // updated 4.3 + PrepareZoning = 0x026C, // updated 5.35 hotfix + ActorGauge = 0x0112, // updated 5.35 hotfix - // Unknown IPC types that still need to be sent - // TODO: figure all these out properly - IPCTYPE_UNK_320 = 0x0253, // updated 4.5 - IPCTYPE_UNK_322 = 0x0255, // updated 4.5 + // daily quest info -> without them sent, login will take longer... + DailyQuests = 0x0139, // updated 5.35 hotfix + DailyQuestRepeatFlags = 0x024C, // updated 5.35 hotfix /// Doman Mahjong ////////////////////////////////////// - MahjongOpenGui = 0x02BC, // only available in mahjong instance + MahjongOpenGui = 0x02A4, // only available in mahjong instance MahjongNextRound = 0x02BD, // initial hands(baipai), # of riichi(wat), winds, honba, score and stuff MahjongPlayerAction = 0x02BE, // tsumo(as in drawing a tile) called chi/pon/kan/riichi MahjongEndRoundTsumo = 0x02BF, // called tsumo @@ -251,37 +293,43 @@ namespace Sapphire::Network::Packets */ enum ClientZoneIpcType : uint16_t { + PingHandler = 0x0219, // updated 5.35 hotfix + InitHandler = 0x0185, // updated 5.35 hotfix - PingHandler = 0x0065, // unchanged 4.5 - InitHandler = 0x0066, // unchanged 4.5 + FinishLoadingHandler = 0x01BE, // updated 5.35 hotfix - FinishLoadingHandler = 0x0069, // unchanged 4.5 + CFCommenceHandler = 0x0118, // updated 5.35 hotfix - CFCommenceHandler = 0x006F, - - - CFRegisterDuty = 0x0071, - CFRegisterRoulette = 0x0072, - PlayTimeHandler = 0x0073, // unchanged 4.5 - LogoutHandler = 0x0074, // unchanged 4.5 + CFCancelHandler = 0x0332, // updated 5.35 hotfix + CFRegisterDuty = 0x0289, // updated 5.35 hotfix + CFRegisterRoulette = 0x0088, // updated 5.35 hotfix + PlayTimeHandler = 0x02A8, // updated 5.35 hotfix + LogoutHandler = 0x00EC, // updated 5.35 hotfix + CancelLogout = 0x03DB, // updated 5.35 hotfix CFDutyInfoHandler = 0x0078, // updated 4.2 - SocialReqSendHandler = 0x00AE, // updated 4.1 + SocialReqSendHandler = 0x0387, // updated 5.35 hotfix + SocialResponseHandler = 0x028D, // updated 5.35 hotfix CreateCrossWorldLS = 0x00AF, // updated 4.3 - ChatHandler = 0x00D7, // updated 4.5 + ChatHandler = 0x0131, // updated 5.35 hotfix + PartyChatHandler = 0x0065, + PartySetLeaderHandler = 0x0208, // updated 5.35 hotfix + LeavePartyHandler = 0x0337, // updated 5.35 hotfix + KickPartyMemberHandler = 0x014C, // updated 5.35 hotfix + DisbandPartyHandler = 0x0205, // updated 5.35 hotfix - SocialListHandler = 0x00DF, // updated 4.5 - ReqSearchInfoHandler = 0x00E4, // updated 4.5 - ReqExamineSearchCommentHandler = 0x00E5, // updated 4.5 + SocialListHandler = 0x0340, // updated 5.35 hotfix + SetSearchInfoHandler = 0x0314, // updated 5.35 hotfix + ReqSearchInfoHandler = 0x01E9, // updated 5.35 hotfix + ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0 - SetSearchInfoHandler = 0x00E2, // unchanged 4.5 + ReqRemovePlayerFromBlacklist = 0x00F1, // updated 5.0 + BlackListHandler = 0x0079, // updated 5.35 hotfix + PlayerSearchHandler = 0x00F4, // updated 5.0 - BlackListHandler = 0x00F0, // updated 4.5 - PlayerSearchHandler = 0x00E6, // updated 4.5 - - LinkshellListHandler = 0x00F8, // updated 4.5 + LinkshellListHandler = 0x024B, // updated 5.35 hotfix MarketBoardRequestItemListingInfo = 0x0102, // updated 4.5 MarketBoardRequestItemListings = 0x0103, // updated 4.5 @@ -291,58 +339,63 @@ namespace Sapphire::Network::Packets FcInfoReqHandler = 0x011A, // updated 4.2 + FreeCompanyUpdateShortMessageHandler = 0x0123, // added 5.0 + ReqMarketWishList = 0x012C, // updated 4.3 ReqJoinNoviceNetwork = 0x0129, // updated 4.2 - ReqCountdownInitiate = 0x0133, // updated 4.5 - ReqCountdownCancel = 0x0134, // updated 4.5 - ClearWaymarks = 0x0135, // updated 4.5 + ReqCountdownInitiate = 0x009A, // updated 5.25 + ReqCountdownCancel = 0x0244, // updated 5.25 - ZoneLineHandler = 0x0137, // updated 4.5 - ClientTrigger = 0x0138, // updated 4.5 - DiscoveryHandler = 0x0139, // updated 4.5 + ZoneLineHandler = 0x0279, // updated 5.35 hotfix + ClientTrigger = 0x03D3, // updated 5.35 hotfix + DiscoveryHandler = 0x00E3, // updated 5.35 hotfix - AddWaymark = 0x013A, // updated 4.5 + PlaceFieldMarkerPreset = 0x023F, // updated 5.25 + PlaceFieldMarker = 0x01BA, // updated 5.25 + SkillHandler = 0x01CD, // updated 5.35 hotfix + GMCommand1 = 0x02AC, // updated 5.35 hotfix + GMCommand2 = 0x029F, // updated 5.35 hotfix + AoESkillHandler = 0x030C, // updated 5.35 hotfix - SkillHandler = 0x013B, // updated 4.5 - GMCommand1 = 0x013C, // updated 4.5 - GMCommand2 = 0x013D, // updated 4.5 - AoESkillHandler = 0x13E, // updated 4.5 + UpdatePositionHandler = 0x0236, // updated 5.35 hotfix - UpdatePositionHandler = 0x013F, // updated 4.5 - UpdatePositionInstance = 0x0183, // updated 4.3 + InventoryModifyHandler = 0x0135, // updated 5.35 hotfix + + InventoryEquipRecommendedItems = 0x0149, // updated 5.0 - InventoryModifyHandler = 0x0146, // updated 4.5 ( +4 ) + ReqPlaceHousingItem = 0x014B, // updated 5.0 + BuildPresetHandler = 0x0150, // updated 5.0 - ReqPlaceHousingItem = 0x149, // updated 4.5 + TalkEventHandler = 0x02A4, // updated 5.35 hotfix + EmoteEventHandler = 0x02C8, // updated 5.35 hotfix + WithinRangeEventHandler = 0x0209, // updated 5.35 hotfix + OutOfRangeEventHandler = 0x0319, // updated 5.35 hotfix + EnterTeriEventHandler = 0x0192, // updated 5.35 hotfix + ShopEventHandler = 0x0156, // updated 5.0 - BuildPresetHandler = 0x014E, // updated 4.5 - TalkEventHandler = 0x014F, // updated 4.5 - EmoteEventHandler = 0x0150, // updated 4.5 - WithinRangeEventHandler = 0x0151, // updated 4.5 - OutOfRangeEventHandler = 0x0152, // updated 4.5 - EnterTeriEventHandler = 0x0153, // updated 4.5 - - ShopEventHandler = 0x0155, // updated 4.5 - - ReturnEventHandler = 0x0158, // updated 4.5 - TradeReturnEventHandler = 0x0159, // updated 4.5 + ReturnEventHandler = 0x02B4, // updated 5.35 hotfix + TradeReturnEventHandler = 0x00A4, // updated 5.35 hotfix + TradeMultipleReturnEventHander = 0x035C, // updated 5.35 hotfix LinkshellEventHandler = 0x016B, // updated 4.5 LinkshellEventHandler1 = 0x016C, // updated 4.5 - LandRenameHandler = 0x0175, // updated 4.5 - HousingUpdateHouseGreeting = 0x0176, // updated 4.5 - HousingUpdateObjectPosition = 0x0177, // updated 4.5 + ReqEquipDisplayFlagsChange = 0x02F6, // updated 5.35 hotfix - SetSharedEstateSettings = 0x017B, // updated 4.5 + LandRenameHandler = 0xF177, // updated 5.0 + HousingUpdateHouseGreeting = 0x0178, // updated 5.0 + HousingUpdateObjectPosition = 0x0159, // updated 5.25 + + SetSharedEstateSettings = 0x017B, // updated 5.0 + + UpdatePositionInstance = 0x0345, // updated 5.35 hotfix PerformNoteHandler = 0x029B, // updated 4.3 - ReqEquipDisplayFlagsChange = 0x0173, // updated 4.5 - - + WorldInteractionHandler = 0x00A9, // updated 5.35 hotfix + Dive = 0x02CC, // updated 5.35 hotfix }; //////////////////////////////////////////////////////////////////////////////// @@ -354,6 +407,8 @@ namespace Sapphire::Network::Packets { Tell = 0x0064, // updated for sb TellErrNotFound = 0x0066, + + FreeCompanyEvent = 0x012C, // added 5.0 }; /** diff --git a/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h b/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h index 57948d4b..811a6e4f 100644 --- a/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h +++ b/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h @@ -4,10 +4,7 @@ #include #include -namespace Sapphire { -namespace Network { -namespace Packets { -namespace Server { +namespace Sapphire::Network::Packets::Server { struct FFXIVIpcRetainerList : FFXIVIpcBasePacket< LobbyRetainerList > @@ -152,7 +149,5 @@ struct FFXIVIpcLobbyError : FFXIVIpcBasePacket< LobbyError > }; } -} -} -} + #endif diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 3d439dc7..19b4fff5 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -4,10 +4,8 @@ #include #include -namespace Sapphire { -namespace Network { -namespace Packets { -namespace Client { +namespace Sapphire::Network::Packets::Client +{ struct FFXIVIpcGmCommand1 : FFXIVIpcBasePacket< GMCommand1 > @@ -51,14 +49,25 @@ struct FFXIVIpcUpdatePosition : FFXIVIpcBasePacket< UpdatePositionHandler > { /* 0000 */ float rotation; - /* 0004 */ uint8_t unk_1[ 3 ]; + /* 0004 */ uint8_t animationType; + /* 0005 */ uint8_t animationState; + /* 0006 */ uint8_t clientAnimationType; /* 0007 */ uint8_t headPosition; - /* 0008 */ uint8_t animationType; - /* 0009 */ uint8_t animationState; - /* 000A */ uint8_t clientAnimationType; - /* 000B */ uint8_t unk_2; - /* 000C */ Common::FFXIVARR_POSITION3 position; + /* 0008 */ Common::FFXIVARR_POSITION3 position; + /* 000C */ uint8_t unk[ 4 ]; // padding? }; + + struct FFXIVIpcUpdatePositionInstance : + FFXIVIpcBasePacket< UpdatePositionInstance > +{ + /* 0000 */ float rotation; + /* 0004 */ float interpolateRotation; + /* 0008 */ uint32_t flags; + /* 000C */ Common::FFXIVARR_POSITION3 position; + /* 0018 */ Common::FFXIVARR_POSITION3 interpolatePosition; + /* 0024 */ uint32_t unknown; +}; + struct FFXIVIpcSkillHandler : FFXIVIpcBasePacket< SkillHandler > @@ -198,6 +207,13 @@ struct FFXIVIpcChatHandler : /* 001A */ char message[1012]; }; +struct FFXIVIpcPartyChatHandler : + FFXIVIpcBasePacket< ChatHandler > +{ + uint64_t unknown; + char message[1024]; +}; + struct FFXIVIpcShopEventHandler : FFXIVIpcBasePacket< ShopEventHandler > { @@ -219,7 +235,7 @@ struct FFXIVIpcInventoryModifyHandler : { /* 0000 */ uint32_t seq; /* 0004 */ Common::InventoryOperation action; - /* 0005 */ uint8_t pad_0005[7]; + /* 0006 */ uint8_t pad_0006[6]; /* 000C */ uint16_t fromContainer; /* 000E */ uint8_t pad_000E[2]; /* 0010 */ uint8_t fromSlot; @@ -325,9 +341,91 @@ struct FFXIVIpcMarketBoardRequestItemListingInfo : /* 0000 */ uint32_t requestId; }; -} -} -} +struct FFXIVIpcFreeCompanyUpdateShortMessageHandler : + FFXIVIpcBasePacket< FreeCompanyUpdateShortMessageHandler > +{ + char shortMessage[104]; + uint8_t padding; + uint8_t unknown; + uint32_t unknown1; + uint16_t unknown2; +}; + +struct FFXIVIpcWorldInteractionHandler : + FFXIVIpcBasePacket< WorldInteractionHandler > +{ + uint32_t action; + uint32_t param1; + uint32_t param2; + uint32_t param3; + uint32_t param4; + Common::FFXIVARR_POSITION3 position; +}; + +struct FFXIVIpcSocialReqSendHandler : + FFXIVIpcBasePacket< SocialReqSendHandler > +{ + uint64_t unknown; + uint8_t p1; + uint8_t p2; + uint8_t socialType; + char name[32]; + uint8_t padding[5]; +}; + +struct FFXIVIpcSocialResponseHandler : + FFXIVIpcBasePacket< SocialResponseHandler > +{ + uint64_t contentId; + uint8_t p1; + uint8_t p2; + uint8_t socialType; + uint8_t response; + uint32_t unknown; +}; + +struct FFXIVIpcPartySetLeaderHandler : + FFXIVIpcBasePacket< PartySetLeaderHandler > +{ + uint64_t contentId; + uint8_t p1; + uint8_t p2; + char name[32]; + uint8_t padding[6]; +}; + +struct FFXIVIpcLeavePartyHandler : + FFXIVIpcBasePacket< LeavePartyHandler > +{ + uint64_t empty; +}; + +struct FFXIVIpcKickPartyMemberHander : + FFXIVIpcBasePacket< KickPartyMemberHandler > +{ + uint64_t contentId; + uint8_t p1; + uint8_t p2; + char name[32]; + uint8_t padding[6]; +}; + +struct FFXIVIpcDisbandPartyHandler : + FFXIVIpcBasePacket< DisbandPartyHandler > +{ + uint64_t empty; +}; + + +struct FFXIVIpcDive : + FFXIVIpcBasePacket< Dive > +{ + float unknown; + Common::FFXIVARR_POSITION3 posTarget; + Common::FFXIVARR_POSITION3 posOriginal; + uint32_t padding; +}; + } #endif //_CORE_NETWORK_PACKETS_ZONE_CLIENT_IPC_H diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 650979e4..f78a9cd3 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -46,12 +46,38 @@ namespace Sapphire::Network::Packets::Server char msg[1012]; }; + struct FFXIVIpcPartyChat : FFXIVIpcBasePacket< PartyChat > + { + uint64_t unknown; + uint64_t contentId; + uint32_t charaId; + uint8_t u1; + uint8_t u2; + uint8_t u3; + char name[32]; + char message[1024]; + uint8_t padding; + }; + struct FFXIVIpcChatBanned : FFXIVIpcBasePacket< ChatBanned > { uint8_t padding[4]; // I was not sure reinterpreting ZST is valid behavior in C++. // client doesn't care about the data (zero sized) for this opcode anyway. }; + /** + * Structural representation of the packet sent by the server + * to show a list of worlds for world visit + */ + struct FFXIVIpcWorldVisitList : FFXIVIpcBasePacket< WorldVisitList > + { + struct worldEntry + { + uint16_t id; // this is the id of the world from lobby + uint16_t status; // 1 = available (this is what retail sends) | 2+ = unavailable (this will need to be checked with retail if it's exactly 2 or not since it does not actually lock the option) + } world[16]; + }; + /** * Structural representation of the packet sent by the server * carrying chat messages @@ -107,6 +133,27 @@ namespace Sapphire::Network::Packets::Server PlayerEntry entries[10]; }; + struct FFXIVIpcExamineSearchInfo : FFXIVIpcBasePacket< ExamineSearchInfo > + { + uint32_t unknown; + uint16_t unknown1; + uint16_t unknown2; + char padding[16]; + uint32_t unknown3; + uint16_t unknown4; + uint16_t unknown5; + uint16_t unknown6; + uint8_t worldId; + char searchMessage[193]; + char fcName[24]; + uint8_t unknown7; + uint16_t padding1; + struct ClassJobEntry + { + uint16_t id; + uint16_t level; + } levelEntries[Common::CLASSJOB_TOTAL]; + }; struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket< UpdateSearchInfo > { @@ -210,6 +257,7 @@ namespace Sapphire::Network::Packets::Server uint8_t rank; uint16_t padding; uint8_t lsName[20]; + uint8_t unk[16]; } entry[8]; }; @@ -238,7 +286,7 @@ namespace Sapphire::Network::Packets::Server * Structural representation of the packet sent by the server * to show the mail delivery notification */ - struct FFXIVIpcMailLetterNotificationt : FFXIVIpcBasePacket< MailLetterNotification > + struct FFXIVIpcMailLetterNotification : FFXIVIpcBasePacket< MailLetterNotification > { uint32_t sendbackCount; // The amount of letters sent back since you ran out of room (moogle dialog changes based on this) uint16_t friendLetters; // The amount of letters in the friends section of the letterbox @@ -249,6 +297,108 @@ namespace Sapphire::Network::Packets::Server char unk2[0x4]; // This has probs something to do with the support desk (inquiry id?) }; + struct FFFXIVIpcMarketTaxRates : FFXIVIpcBasePacket< MarketTaxRates > + { + // Same handler as MiniCactpotInit + uint32_t type; + uint16_t category; + uint8_t unknown1; + uint8_t unknown2; + uint32_t taxRate[Common::TOWN_COUNT]; // In the order of Common::Town + uint64_t unknown3; + }; + + struct FFFXIVIpcMarketBoardItemListingCount : FFXIVIpcBasePacket< MarketBoardItemListingCount > + { + uint32_t itemCatalogId; + uint32_t unknown1; // does some shit if nonzero + uint16_t requestId; + uint16_t quantity; // high/low u8s read separately? + uint32_t unknown3; + }; + + struct FFXIVIpcMarketBoardItemListing : FFXIVIpcBasePacket< MarketBoardItemListing > + { + struct ItemListing // 152 bytes each + { + uint64_t listingId; + uint64_t retainerId; + uint64_t retainerOwnerId; + uint64_t artisanId; + uint32_t pricePerUnit; + uint32_t totalTax; + uint32_t itemQuantity; + uint32_t itemId; + uint16_t lastReviewTime; + uint16_t containerId; + uint32_t slotId; + uint16_t durability; + uint16_t spiritBond; + /** + * auto materiaId = (i & 0xFF0) >> 4; + * auto index = i & 0xF; + * auto leftover = i >> 8; + */ + uint16_t materiaValue[5]; + uint16_t padding1; + uint32_t padding2; + char retainerName[32]; + char playerName[32]; + bool hq; + uint8_t materiaCount; + uint8_t onMannequin; + Common::Town marketCity; + uint16_t dyeId; + uint16_t padding3; + uint32_t padding4; + } listing[10]; // Multiple packets are sent if there are more than 10 search results. + uint8_t listingIndexEnd; + uint8_t listingIndexStart; + uint16_t requestId; + char padding7[16]; + uint8_t unknown13; + uint16_t padding8; + uint8_t unknown14; + uint64_t padding9; + uint32_t unknown15; + uint32_t padding10; + }; + + struct FFXIVIpcMarketBoardItemListingHistory : FFXIVIpcBasePacket< MarketBoardItemListingHistory > + { + uint32_t itemCatalogId; + uint32_t itemCatalogId2; + + struct MarketListing + { + uint32_t salePrice; + uint32_t purchaseTime; + uint32_t quantity; + uint8_t isHq; + uint8_t padding; + uint8_t onMannequin; + + char buyerName[33]; + + uint32_t itemCatalogId; + } listing[20]; + }; + + struct FFXIVIpcMarketBoardSearchResult : FFXIVIpcBasePacket< MarketBoardSearchResult > + { + struct MarketBoardItem + { + uint32_t itemCatalogId; + uint16_t quantity; + uint16_t demand; + } items[20]; + + uint32_t itemIndexEnd; + uint32_t padding1; + uint32_t itemIndexStart; + uint32_t requestId; + }; + struct FFXIVIpcExamineFreeCompanyInfo : FFXIVIpcBasePacket< ExamineFreeCompanyInfo > { char unknown[0x20]; // likely fc allegiance/icon/housing info etc @@ -267,6 +417,16 @@ namespace Sapphire::Network::Packets::Server uint32_t padding4; }; + struct FFXIVIpcFreeCompanyUpdateShortMessage : FFXIVIpcBasePacket< FreeCompanyUpdateShortMessage > + { + uint32_t unknown; + uint16_t unknown1; + uint16_t unknown2; + uint32_t unknown3; + uint32_t unknown5; + char shortMessage[104]; + }; + struct FFXIVIpcStatusEffectList : FFXIVIpcBasePacket< StatusEffectList > { uint8_t classId; @@ -276,8 +436,9 @@ namespace Sapphire::Network::Packets::Server uint32_t max_hp; uint16_t current_mp; uint16_t max_mp; - uint16_t currentTp; - uint16_t unknown1; + uint8_t shieldPercentage; + uint8_t unknown1; + uint16_t unknown2; Common::StatusEffect effect[30]; uint32_t padding; }; @@ -292,34 +453,37 @@ namespace Sapphire::Network::Packets::Server * Structural representation of the packet sent by the server * add a status effect */ - struct FFXIVIpcAddStatusEffect : FFXIVIpcBasePacket< AddStatusEffect > + struct FFXIVIpcEffectResult : FFXIVIpcBasePacket< EffectResult > { - uint32_t unknown; + uint32_t globalSequence; uint32_t actor_id; - uint8_t unknown1; - uint8_t unknown2; - uint16_t padding1; uint32_t current_hp; - uint16_t current_mp; - uint16_t current_tp; uint32_t max_hp; - uint16_t max_mp; - uint16_t max_something; - uint8_t effect_index; // which position do i display this - uint8_t unknown3; - uint16_t effect_id; - uint16_t param; - uint16_t unknown5; // Sort this out (old right half of power/param property) - float duration; - uint32_t actor_id1; - uint8_t unknown4[52]; + uint16_t current_mp; + uint8_t unknown1; + uint8_t classId; + uint8_t shieldPercentage; + uint8_t entryCount; + uint16_t unknown2; + + struct StatusEntry + { + uint8_t index; // which position do i display this + uint8_t unknown3; + uint16_t id; + uint16_t param; + uint16_t unknown4; // Sort this out (old right half of power/param property) + float duration; + uint32_t sourceActorId; + } statusEntries[4]; + }; /** * Structural representation of the packet sent by the server * to update certain player details / status */ - struct FFXIVIpcActorControl142 : FFXIVIpcBasePacket< ActorControl142 > + struct FFXIVIpcActorControl : FFXIVIpcBasePacket< ActorControl > { /* 0000 */ uint16_t category; /* 0002 */ uint16_t padding; @@ -334,7 +498,7 @@ namespace Sapphire::Network::Packets::Server * Structural representation of the packet sent by the server * to update certain player details / status */ - struct FFXIVIpcActorControl143 : FFXIVIpcBasePacket< ActorControl143 > + struct FFXIVIpcActorControlSelf : FFXIVIpcBasePacket< ActorControlSelf > { /* 0000 */ uint16_t category; /* 0002 */ uint16_t padding; @@ -351,7 +515,7 @@ namespace Sapphire::Network::Packets::Server * Structural representation of the packet sent by the server * to update certain player details / status */ - struct FFXIVIpcActorControl144 : FFXIVIpcBasePacket< ActorControl144 > + struct FFXIVIpcActorControlTarget : FFXIVIpcBasePacket< ActorControlTarget > { /* 0000 */ uint16_t category; /* 0002 */ uint16_t padding; @@ -372,35 +536,9 @@ namespace Sapphire::Network::Packets::Server /* 0000 */ uint32_t hp; /* 0004 */ uint16_t mp; /* 0006 */ uint16_t tp; - /* 0008 */ uint32_t unknown_8; - /* 000C */ uint32_t unknown_12; - }; - - - /** - * Structural representation of the packet sent by the server - * for battle actions - */ - struct EffectHeader - { - uint64_t animationTargetId; // who the animation targets - - uint32_t actionId; // what the casting player casts, shown in battle log/ui - uint32_t globalEffectCounter; // seems to only increment on retail? - - float animationLockTime; // maybe? doesn't seem to do anything - uint32_t someTargetId; // always 00 00 00 E0, 0x0E000000 is the internal def for INVALID TARGET ID - - uint16_t hiddenAnimation; // if 0, always shows animation, otherwise hides it. counts up by 1 for each animation skipped on a caster - uint16_t rotation; - uint16_t actionAnimationId; // the animation that is played by the casting character - uint8_t variation; // variation in the animation - Common::ActionEffectDisplayType effectDisplayType; - - uint8_t unknown20; // is read by handler, runs code which gets the LODWORD of animationLockTime (wtf?) - uint8_t effectCount; // ignores effects if 0, otherwise parses all of them - uint16_t padding_21; - + /* 0008 */ uint16_t gp; + /* 0010 */ uint16_t unknown_10; + /* 0012 */ uint32_t unknown_12; }; struct FFXIVIpcEffect : FFXIVIpcBasePacket< Effect > @@ -408,12 +546,21 @@ namespace Sapphire::Network::Packets::Server uint64_t animationTargetId; // who the animation targets uint32_t actionId; // what the casting player casts, shown in battle log/ui - uint32_t sequence; // seems to only increment on retail? + /*! + * @brief Zone sequence for the effect. Used to link effects that are split across multiple packets as one + */ + uint32_t sequence; float animationLockTime; // maybe? doesn't seem to do anything - uint32_t someTargetId; // always 00 00 00 E0, 0x0E000000 is the internal def for INVALID TARGET ID + uint32_t someTargetId; // always 0x0E000000? - uint16_t hiddenAnimation; // if 0, always shows animation, otherwise hides it. counts up by 1 for each animation skipped on a caster + /*! + * @brief The cast sequence from the originating player. Should only be sent to the source, 0 for every other player. + * + * This needs to match the sequence sent from the player in the action start packet otherwise you'll cancel the + * initial animation and start a new one once the packet arrives. + */ + uint16_t sourceSequence; uint16_t rotation; uint16_t actionAnimationId; // the animation that is played by the casting character uint8_t variation; // variation in the animation @@ -438,17 +585,35 @@ namespace Sapphire::Network::Packets::Server template< int size > struct FFXIVIpcAoeEffect { - EffectHeader header; + uint64_t animationTargetId; // who the animation targets - Common::EffectEntry effects[size]; + uint32_t actionId; // what the casting player casts, shown in battle log/ui + uint32_t globalSequence; // seems to only increment on retail? + + float animationLockTime; // maybe? doesn't seem to do anything + uint32_t someTargetId; // always 00 00 00 E0, 0x0E000000 is the internal def for INVALID TARGET ID + + uint16_t sourceSequence; // if 0, always shows animation, otherwise hides it. counts up by 1 for each animation skipped on a caster + uint16_t rotation; + uint16_t actionAnimationId; // the animation that is played by the casting character + uint8_t variation; // variation in the animation + Common::ActionEffectDisplayType effectDisplayType; + + uint8_t unknown20; // is read by handler, runs code which gets the LODWORD of animationLockTime (wtf?) + uint8_t effectCount; // ignores effects if 0, otherwise parses all of them + uint16_t padding_21[3]; + uint16_t padding; + + struct + { + Common::EffectEntry entries[8]; + } effects[size]; uint16_t padding_6A[3]; - uint32_t effectTargetId[size]; - Common::FFXIVARR_POSITION3 position; - uint32_t effectFlags; - - uint32_t padding_78; + uint64_t effectTargetId[size]; + uint16_t unkFlag[3]; // all 0x7FFF + uint16_t unk[3]; }; struct FFXIVIpcAoeEffect8 : @@ -511,9 +676,8 @@ namespace Sapphire::Network::Packets::Server uint32_t displayFlags; uint16_t fateID; uint16_t mPCurr; - uint16_t tPCurr; uint16_t mPMax; - uint16_t tPMax; + uint16_t unk; // == 0 uint16_t modelChara; uint16_t rotation; uint16_t activeMinion; @@ -535,8 +699,11 @@ namespace Sapphire::Network::Packets::Server uint8_t mountFeet; uint8_t mountColor; uint8_t scale; - uint32_t u29b; - uint32_t u30b; + + //uint32_t elementalLevel; one of these two field changed to 16bit + //uint32_t element; + uint8_t elementData[6]; + Common::StatusEffect effect[30]; Common::FFXIVARR_POSITION3 pos; uint32_t models[10]; @@ -586,9 +753,8 @@ namespace Sapphire::Network::Packets::Server uint32_t displayFlags; uint16_t fateID; uint16_t mPCurr; - uint16_t tPCurr; - uint16_t mPMax; - uint16_t tPMax; + uint16_t unknown1; // 0 + uint16_t unknown2; // 0 or pretty big numbers > 30000 uint16_t modelChara; uint16_t rotation; uint16_t activeMinion; @@ -612,7 +778,6 @@ namespace Sapphire::Network::Packets::Server uint8_t scale; uint16_t elementalLevel; // Eureka uint16_t element; // Eureka - uint32_t u30b; Common::StatusEffect effect[30]; Common::FFXIVARR_POSITION3 pos; uint32_t models[10]; @@ -643,8 +808,8 @@ namespace Sapphire::Network::Packets::Server */ struct FFXIVIpcActorMove : FFXIVIpcBasePacket< ActorMove > { - /* 0000 */ uint8_t rotation; - /* 0001 */ uint8_t headRotation; + /* 0000 */ uint8_t headRotation; + /* 0001 */ uint8_t rotation; /* 0002 */ uint8_t animationType; /* 0003 */ uint8_t animationState; /* 0004 */ uint8_t animationSpeed; @@ -682,10 +847,11 @@ namespace Sapphire::Network::Packets::Server uint16_t action_id; Common::SkillType skillType; uint8_t unknown; - uint32_t unknown_1; // Also action id + uint32_t unknown_1; // action id or mount id float cast_time; uint32_t target_id; - float rotation; // In radians + uint16_t rotation; + uint16_t flag; // 1 = interruptible blinking cast bar uint32_t unknown_2; uint16_t posX; uint16_t posY; @@ -706,6 +872,17 @@ namespace Sapphire::Network::Packets::Server uint32_t padding; }; + struct FFXIVIpcHateRank : FFXIVIpcBasePacket< HateRank > + { + uint32_t numEntries; + struct + { + uint32_t actorId; + uint32_t hateAmount; + } entry[32]; + uint32_t padding; + }; + struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket< UpdateClassInfo > { uint8_t classId; @@ -760,8 +937,10 @@ namespace Sapphire::Network::Packets::Server uint32_t unknown10; uint32_t unknown11; uint32_t unknown12[4]; + uint32_t unknown13[3]; Common::FFXIVARR_POSITION3 pos; - uint32_t unknown13; + uint32_t unknown14[3]; + uint32_t unknown15; }; @@ -769,7 +948,7 @@ namespace Sapphire::Network::Packets::Server * Structural representation of the packet sent by the server to initialize * the client UI upon initial connection. */ - struct FFXIVIpcInitUI : FFXIVIpcBasePacket< InitUI > + struct FFXIVIpcPlayerSetup : FFXIVIpcBasePacket< PlayerSetup > { // plain C types for a bit until the packet is actually fixed. // makes conversion between different editors easier. @@ -808,6 +987,8 @@ namespace Sapphire::Network::Packets::Server unsigned char maxLevel; unsigned char expansion; unsigned char unknown76; + unsigned char unknown77; + unsigned char very_unknown; unsigned char race; unsigned char tribe; unsigned char gender; @@ -818,7 +999,7 @@ namespace Sapphire::Network::Packets::Server unsigned char namedayDay; unsigned char cityState; unsigned char homepoint; - unsigned char unknown81; + unsigned char unknown82; unsigned char petHotBar; unsigned char companionRank; unsigned char companionStars; @@ -832,16 +1013,17 @@ namespace Sapphire::Network::Packets::Server unsigned char relicBookId; unsigned char unknown90[4]; unsigned char craftingMasterMask; - unsigned char unknown95[10]; + unsigned char unknown95[9]; unsigned char unknown9F[2]; - unsigned char unknownA1[3]; - unsigned int exp[26]; + unsigned char unknownA1[6]; + unsigned int exp[Common::CLASSJOB_SLOTS]; unsigned int unknown108; unsigned int pvpTotalExp; unsigned int unknownPvp110; unsigned int pvpExp; unsigned int pvpFrontlineOverallRanks[3]; - unsigned short levels[26]; + unsigned short levels[Common::CLASSJOB_SLOTS]; + /* unsigned short unknown15C[9]; unsigned short u1; unsigned short u2; @@ -855,33 +1037,48 @@ namespace Sapphire::Network::Packets::Server unsigned char companionDefRank; unsigned char companionAttRank; unsigned char companionHealRank; - unsigned char u19[2]; - unsigned char mountGuideMask[17]; + unsigned char u19[8]; + unsigned char mountGuideMask[22]; + unsigned char u19_2; + */ + unsigned char unknown5_3a[176]; + unsigned char companionName[21]; + unsigned char companionDefRank; + unsigned char companionAttRank; + unsigned char companionHealRank; + unsigned char mountGuideMask[23]; + unsigned char maybeReservedMountSlots; + //== char name[32]; unsigned char unknownOword[16]; unsigned char unknownOw; unsigned char unlockBitmask[64]; - unsigned char aetheryte[17]; - unsigned char discovery[421]; + unsigned char aetheryte[21]; + unsigned char discovery[445]; unsigned char howto[34]; - unsigned char minions[42]; - unsigned char chocoboTaxiMask[8]; - unsigned char watchedCutscenes[118]; - unsigned char companionBardingMask[9]; + unsigned char minions[51]; + unsigned char chocoboTaxiMask[10]; + unsigned char watchedCutscenes[131]; + unsigned char companionBardingMask[10]; unsigned char companionEquippedHead; unsigned char companionEquippedBody; unsigned char companionEquippedLegs; + /* unsigned char unknown52A[4]; unsigned char unknownMask52E[11]; - unsigned char fishingGuideMask[89]; - unsigned char fishingSpotVisited[25]; - unsigned char unknown59A[15]; - unsigned char unknown5A9[5]; + unsigned char fishingGuideMask[105]; + unsigned char fishingSpotVisited[31]; + unsigned char unknown59A[27]; + unsigned char unknown5A9[7]; unsigned char beastRank[11]; unsigned char unknownPvp5AB[11]; unsigned char unknown5B9[5]; - unsigned char unknown5B91; + */ + unsigned char unknown5_3c[234]; + //== unsigned char pose; + /* + unsigned char unknown5B91; unsigned char challengeLogComplete[9]; unsigned char weaponPose; unsigned char unknownMask673[10]; @@ -894,24 +1091,30 @@ namespace Sapphire::Network::Packets::Server unsigned char u13; unsigned char aetherCurrentMask[22]; unsigned char u10[3]; + */ + unsigned char unknown5_3d[292]; + //== unsigned char orchestrionMask[40]; unsigned char hallOfNoviceCompletion[3]; unsigned char animaCompletion[11]; - unsigned char u14[16]; - unsigned char u15[13]; + unsigned char unknown5_3e[33]; unsigned char unlockedRaids[28]; unsigned char unlockedDungeons[18]; unsigned char unlockedGuildhests[10]; - unsigned char unlockedTrials[8]; + unsigned char unlockedTrials[9]; // 5.35 trial:pvp either 9:5 or 8:6 not confirmed unsigned char unlockedPvp[5]; unsigned char clearedRaids[28]; unsigned char clearedDungeons[18]; unsigned char clearedGuildhests[10]; - unsigned char clearedTrials[8]; + unsigned char clearedTrials[9]; unsigned char clearedPvp[5]; + /* unsigned short fishingRecordsFishWeight[26]; unsigned int exploratoryMissionNextTimestamp; unsigned char pvpLevel; + */ + unsigned char padding2[8]; + //== }; @@ -921,6 +1124,7 @@ namespace Sapphire::Network::Packets::Server */ struct FFXIVIpcPlayerStats : FFXIVIpcBasePacket< PlayerStats > { + // order comes from baseparam order column uint32_t strength; uint32_t dexterity; uint32_t vitality; @@ -930,45 +1134,30 @@ namespace Sapphire::Network::Packets::Server uint32_t hp; uint32_t mp; uint32_t tp; - uint32_t unknown; - uint32_t unknown_1; - uint32_t unknown_2; + uint32_t gp; + uint32_t cp; + uint32_t delay; uint32_t tenacity; - uint32_t attack; + uint32_t attackPower; uint32_t defense; - uint32_t accuracy; - uint32_t spellSpeed; + uint32_t directHitRate; + uint32_t evasion; uint32_t magicDefense; - uint32_t criticalHitRate; - uint32_t resistanceSlashing; - uint32_t resistancePiercing; - uint32_t resistanceBlunt; + uint32_t criticalHit; uint32_t attackMagicPotency; uint32_t healingMagicPotency; - uint32_t fire; - uint32_t ice; - uint32_t wind; - uint32_t earth; - uint32_t lightning; - uint32_t water; + uint32_t elementalBonus; uint32_t determination; uint32_t skillSpeed; - uint32_t spellSpeed1; - uint32_t spellSpeedMod; - uint32_t unknown_6; + uint32_t spellSpeed; + uint32_t haste; uint32_t craftsmanship; uint32_t control; uint32_t gathering; uint32_t perception; - uint32_t resistanceSlow; - uint32_t resistanceSilence; - uint32_t resistanceBlind; - uint32_t resistancePoison; - uint32_t resistanceStun; - uint32_t resistanceSleep; - uint32_t resistanceBind; - uint32_t resistanceHeavy; - uint32_t unknown_7[9]; // possibly level sync stats. + + // todo: what is here? + uint32_t unknown[26]; }; /** @@ -1049,7 +1238,8 @@ namespace Sapphire::Network::Packets::Server uint32_t appearanceCatalogId; uint64_t crafterId; uint8_t quality; - uint8_t unknown[3]; + uint8_t stain; + uint8_t unknown[2]; struct Materia { uint16_t materiaId; @@ -1144,8 +1334,7 @@ namespace Sapphire::Network::Packets::Server struct FFXIVIpcInventoryTransaction : FFXIVIpcBasePacket< InventoryTransaction > { uint32_t sequence; - uint8_t type; - uint8_t padding; + uint16_t type; uint16_t padding1; uint32_t ownerId; uint32_t storageId; @@ -1250,11 +1439,25 @@ namespace Sapphire::Network::Packets::Server uint8_t unknown[8]; }; + template< int ArgCount > + struct FFXIVIpcEventPlayN + { + uint64_t actorId; + uint32_t eventId; + uint16_t scene; + uint16_t padding; + uint32_t sceneFlags; + uint32_t unknown; + uint8_t paramSize; + uint8_t padding2[3]; + uint32_t params[ArgCount]; + }; + /** * Structural representation of the packet sent by the server * to play an event */ - struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket< DirectorPlayScene > + struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket< EventPlay32 > { uint64_t actorId; uint32_t eventId; @@ -1283,15 +1486,10 @@ namespace Sapphire::Network::Packets::Server /* 000C */ uint32_t padding1; }; - struct FFXIVIpcEventOpenGilShop : FFXIVIpcBasePacket< EventOpenGilShop > + struct FFXIVIpcEventPlay255 : + FFXIVIpcBasePacket< EventPlay255 >, + FFXIVIpcEventPlayN< 255 > { - uint64_t actorId; - uint32_t eventId; - uint16_t scene; - uint16_t padding; - uint32_t sceneFlags; - - uint32_t unknown_wtf[0x101]; }; @@ -1338,8 +1536,8 @@ namespace Sapphire::Network::Packets::Server */ struct FFXIVIpcQuestCompleteList : FFXIVIpcBasePacket< QuestCompleteList > { - uint8_t questCompleteMask[480]; - uint8_t unknownCompleteMask[32]; + uint8_t questCompleteMask[487]; + uint8_t unknownCompleteMask[73]; }; /** @@ -1390,19 +1588,18 @@ namespace Sapphire::Network::Packets::Server /** * Structural representation of the packet sent by the server - * to send a unviel a map + * to send a unveil a map */ struct FFXIVIpcDiscovery : FFXIVIpcBasePacket< Discovery > { - /* 0000 */ uint32_t map_part_id; - /* 0004 */ uint32_t map_id; + /* 0000 */ uint32_t mapPartId; + /* 0004 */ uint32_t mapId; }; - /** * UNKOWN TYPE */ - struct FFXIVARR_IPC_UNK322 : FFXIVIpcBasePacket< IPCTYPE_UNK_322 > + struct FFXIVARR_IPC_UNK322 : FFXIVIpcBasePacket< DailyQuestRepeatFlags > { /* 0000 */ uint8_t unk[8]; }; @@ -1410,7 +1607,7 @@ namespace Sapphire::Network::Packets::Server /** * UNKOWN TYPE */ - struct FFXIVARR_IPC_UNK320 : FFXIVIpcBasePacket< IPCTYPE_UNK_320 > + struct FFXIVARR_IPC_UNK320 : FFXIVIpcBasePacket< DailyQuests > { /* 0000 */ uint8_t unk[0x38]; }; @@ -1520,6 +1717,80 @@ namespace Sapphire::Network::Packets::Server uint8_t bitmask; }; + struct FFXIVIpcMiniCactPotInit : FFXIVIpcBasePacket< MiniCactpotInit > + { + /* + * Looks like this shares a handler with MarketTaxRates and a few + * other packets, so these first fields are most likely discriminators + * or other metadata for the handler itself. + */ + uint32_t type; + uint16_t category; + uint8_t unknown1; + uint8_t unknown2; + /* + * Always 18 for this packet, incidentally the number of payouts plus 1. + * Used similarly for MarketTaxRates => for (auto i = 0; i <= indexEnd; i++) {} + */ + uint8_t indexEnd; + uint8_t unknown3; + uint16_t padding1; + /* + * On clicking a number, the client sends a ClientTrigger (DirectorSync) with an unknown + * param2, param5; param1 session, param3 column, param4 row; zero param6, and the server + * replies with an ActorControlSelf (DirectorUpdate) with an unknown param2; param1 session, + * param3 column, param4 row, param5 digit; zero param6. After a line is selected, + * the server replies with 9 DirectorUpdate packets, in order (column, row), containing every + * number on the board (why tho). Finally, one last DirectorUpdate is sent with parameters + * param1 session, param3 payout index; unknown param2, param4; zero param5, param6. + */ + uint32_t column; // zero-based + uint32_t row; + uint32_t firstDigit; + uint32_t payouts[19]; // In in-game display order + uint32_t unknown4; + /* + * All of the below fields seem to be gibberish, and change completely between + * draws and characters. + */ + uint32_t unknown5; + uint32_t unknown6; + uint32_t unknown7; + uint32_t unknown8; + uint16_t unknown9; + uint16_t unknown10; + uint32_t unknown11; + uint64_t unknown12; + }; + + /** + * Structural representation of the packet sent by the server + * to place/remove field marker presets + */ + struct FFXIVIpcPlaceFieldMarkerPreset : FFXIVIpcBasePacket< PlaceFieldMarkerPreset > + { + /*! which fieldmarks to show */ + Common::FieldMarkerStatus status; + /*! A coordinates would be (float)Xints[0]/1000.0, (float)Yints[0]/1000.0, (float)Zints[0]/1000.0 */ + uint32_t Xints[8]; + uint32_t Yints[8]; + uint32_t Zints[8]; + }; + + /** + * Structural representation of the packet sent by the server + * to place/remove a field marker + */ + struct FFXIVIpcPlaceFieldMarker : FFXIVIpcBasePacket< PlaceFieldMarker > + { + Common::FieldMarkerId markerId; + uint8_t status; + uint8_t pad[2]; + uint32_t Xint; + uint32_t Yint; + uint32_t Zint; + }; + /** * Structural representation of the packet sent by the server * to mount a player @@ -1527,6 +1798,7 @@ namespace Sapphire::Network::Packets::Server struct FFXIVIpcMount : FFXIVIpcBasePacket< Mount > { uint32_t id; + uint32_t padding[3]; }; /** @@ -1744,7 +2016,7 @@ namespace Sapphire::Network::Packets::Server uint32_t housePrice; uint8_t infoFlags; Common::HousingAppeal houseAppeal[3]; - char estateOwnerName[30]; + char estateOwnerName[32]; } houseInfoEntry[60]; }; @@ -1832,51 +2104,140 @@ namespace Sapphire::Network::Packets::Server char otherName[32]; }; - - struct FFXIVIpcMarketBoardSearchResult : FFXIVIpcBasePacket< MarketBoardSearchResult > + + struct FFXIVIpcRetainerInformation : FFXIVIpcBasePacket< RetainerInformation > { - struct MarketBoardItem - { - uint32_t itemCatalogId; - uint16_t quantity; - uint16_t demand; - } items[20]; - - uint32_t itemIndexEnd; - uint32_t padding1; - uint32_t itemIndexStart; - uint32_t requestId; + uint8_t unknown0[8]; + uint64_t retainerId; + uint8_t hireOrder; + uint8_t itemCount; + uint8_t unknown5[2]; + uint32_t gil; + uint8_t sellingCount; + uint8_t cityId; + uint8_t classJob; + uint8_t level; + uint8_t unknown11[4]; + uint32_t retainerTask; + uint32_t retainerTaskComplete; + uint8_t unknown14; + char retainerName[20]; }; - struct FFFXIVIpcMarketBoardItemListingCount : FFXIVIpcBasePacket< MarketBoardItemListingCount > + struct FFXIVIpcCharaVisualEffect : FFXIVIpcBasePacket< CharaVisualEffect > { - uint32_t itemCatalogId; - uint32_t unknown1; // does some shit if nonzero - uint16_t requestId; - uint16_t quantity; // high/low u8s read separately? + uint32_t id; + uint32_t padding; + }; + + struct FFXIVIpcCFCancel : FFXIVIpcBasePacket< CFCancel > + { + uint32_t cancelReason; + uint32_t unknown2; + }; + + struct FFXIVIpcShopMessage : FFXIVIpcBasePacket< ShopMessage > + { + uint32_t shopId; + uint32_t msgType; + uint32_t unknown2; + uint32_t itemId; + uint32_t amount; + uint32_t price; + uint32_t unknown6; + uint32_t unknown7; + }; + + struct FFXIVIpcLootMessage : FFXIVIpcBasePacket< LootMessage > + { + Common::LootMessageType msgType; + uint8_t padding[3]; + uint32_t param1; + uint32_t param2; + uint32_t param3; + uint32_t param4; + uint32_t param5; + uint32_t param6; + uint32_t param7; + }; + + struct FFXIVIpcSocialMessage : FFXIVIpcBasePacket< SocialMessage > + { + uint64_t contentId; + uint32_t expireTime; + uint8_t p1; + uint8_t p2; + uint8_t socialType; + uint8_t padding; + uint8_t type; + uint8_t unknown4; + char name[32]; + uint8_t padding2[6]; + }; + + struct FFXIVIpcSocialMessage2 : FFXIVIpcBasePacket< SocialMessage2 > + { + uint64_t contentId; uint32_t unknown3; + uint8_t p1; + uint8_t p2; + uint8_t socialType; + uint8_t padding; + char name[32]; }; - struct FFXIVIpcMarketBoardItemListingHistory : FFXIVIpcBasePacket< MarketBoardItemListingHistory > + struct FFXIVIpcSocialRequestResponse : FFXIVIpcBasePacket< SocialRequestResponse > { - uint32_t itemCatalogId; - uint32_t itemCatalogId2; - - struct MarketListing - { - uint32_t salePrice; - uint32_t purchaseTime; - uint32_t quantity; - uint8_t isHq; - uint8_t padding; - uint8_t onMannequin; - - char buyerName[33]; - - uint32_t itemCatalogId; - } listing[20]; + uint64_t contentId; + uint32_t unknown3; + uint8_t u1AlwaysOne; + uint8_t response; + uint8_t u2AlwaysOne; + char name[32]; + uint8_t padding; }; + struct FFXIVIpcPartyList : FFXIVIpcBasePacket< PartyList > + { + struct + { + char name[32]; + uint64_t contentId; + uint32_t charaId; + uint32_t u1; + uint32_t u2; + uint32_t hp; + uint32_t maxHp; + uint16_t mp; + uint16_t maxMp; + uint16_t u3; + uint16_t zoneId; + uint8_t gposeSelectable; + uint8_t classId; + uint8_t u5; + uint8_t level; + uint8_t otherData[368]; + } member[8]; + uint64_t someContentId1; + uint64_t someContentId2; + uint8_t leaderIndex; + uint8_t partySize; + uint16_t padding1; + uint32_t padding2; + }; + + struct FFXIVIpcPartyMessage : FFXIVIpcBasePacket< PartyMessage > + { + uint64_t leaderContentId; + uint64_t memberContentId; + uint8_t u1; + uint8_t u2; + uint16_t type; + uint8_t partySize; // ? + char leaderName[32]; + char memberName[32]; + uint8_t padding[3]; + }; } #endif /*_CORE_NETWORK_PACKETS_SERVER_IPC_H*/ diff --git a/src/common/Service.h b/src/common/Service.h new file mode 100644 index 00000000..8cbb43a1 --- /dev/null +++ b/src/common/Service.h @@ -0,0 +1,115 @@ +#ifndef SAPPHIRE_SERVICE_H +#define SAPPHIRE_SERVICE_H + +#include +#include +#include + +// stolen from: https://github.com/skypjack/entt/blob/master/src/entt/locator/locator.hpp + +namespace Sapphire::Common +{ + /** + * @brief Service locator, nothing more. + * + * A service locator can be used to do what it promises: locate services.
+ * Usually service locators are tightly bound to the services they expose and + * thus it's hard to define a general purpose class to do that. This template + * based implementation tries to fill the gap and to get rid of the burden of + * defining a different specific locator for each application. + * + * @tparam SvcType Type of service managed by the locator. + */ + template< typename SvcType > + struct Service + { + /*! @brief Type of service offered. */ + using ServiceType = SvcType; + + /*! @brief Default constructor, deleted on purpose. */ + Service() = delete; + + /*! @brief Default destructor, deleted on purpose. */ + ~Service() = delete; + + /** + * @brief Tests if a valid service implementation is set. + * @return True if the service is set, false otherwise. + */ + static bool empty() noexcept + { + return !static_cast< bool >( service ); + } + + /** + * @brief Returns a weak pointer to a service implementation, if any. + * + * Clients of a service shouldn't retain references to it. The recommended + * way is to retrieve the service implementation currently set each and + * every time the need of using it arises. Otherwise users can incur in + * unexpected behaviors. + * + * @return A reference to the service implementation currently set, if any. + */ + static std::weak_ptr< SvcType > get() noexcept + { + return service; + } + + /** + * @brief Returns a weak reference to a service implementation, if any. + * + * Clients of a service shouldn't retain references to it. The recommended + * way is to retrieve the service implementation currently set each and + * every time the need of using it arises. Otherwise users can incur in + * unexpected behaviors. + * + * @warning + * In case no service implementation has been set, a call to this function + * results in undefined behavior. + * + * @return A reference to the service implementation currently set, if any. + */ + static SvcType& ref() noexcept + { + return *service; + } + + /** + * @brief Sets or replaces a service. + * @tparam Impl Type of the new service to use. + * @tparam Args Types of arguments to use to construct the service. + * @param args Parameters to use to construct the service. + */ + template< typename Impl = SvcType, typename... Args > + static void set( Args&& ... args ) + { + service = std::make_shared< Impl >( std::forward< Args >( args )... ); + } + + /** + * @brief Sets or replaces a service. + * @param ptr Service to use to replace the current one. + */ + static void set( std::shared_ptr< SvcType > ptr ) + { + assert( static_cast< bool >( ptr ) ); + service = std::move( ptr ); + } + + /** + * @brief Resets a service. + * + * The service is no longer valid after a reset. + */ + static void reset() + { + service.reset(); + } + + private: + inline static std::shared_ptr< SvcType > service = nullptr; + }; +} + +#endif //SAPPHIRE_SERVICE_H diff --git a/src/common/Util/CrashHandler.cpp b/src/common/Util/CrashHandler.cpp index 462c19ae..065256e5 100644 --- a/src/common/Util/CrashHandler.cpp +++ b/src/common/Util/CrashHandler.cpp @@ -7,18 +7,26 @@ #include #include #else -#include -class SapphireStackWalker : public StackWalker +#include +#include +#include + +#pragma comment(lib, "dbghelp.lib") + +inline std::string basename( const std::string& file ) { -public: - SapphireStackWalker() : StackWalker() {} -protected: - virtual void OnOutput( LPCSTR szText ) - { - Sapphire::Logger::fatal( "{}", szText ); - } -}; + size_t i = file.find_last_of( "\\/" ); + if ( i == std::string::npos ) + { + return file; + } + else + { + return file.substr( i + 1 ); + } +} + #endif using namespace Sapphire::Common; @@ -148,8 +156,74 @@ void Util::CrashHandler::printStackTrace( unsigned int max_frames ) #else - SapphireStackWalker sw; - sw.ShowCallstack(); + DWORD machine = IMAGE_FILE_MACHINE_AMD64; + + HANDLE process = GetCurrentProcess(); + HANDLE thread = GetCurrentThread(); + CONTEXT context = {}; + context.ContextFlags = CONTEXT_FULL; + RtlCaptureContext( &context ); + + SymInitialize( process, NULL, TRUE ); + SymSetOptions( SYMOPT_LOAD_LINES ); + + STACKFRAME frame = {}; + frame.AddrPC.Offset = context.Rip; + frame.AddrPC.Mode = AddrModeFlat; + frame.AddrFrame.Offset = context.Rbp; + frame.AddrFrame.Mode = AddrModeFlat; + frame.AddrStack.Offset = context.Rsp; + frame.AddrStack.Mode = AddrModeFlat; + + while( StackWalk( machine, process, thread, &frame, &context, NULL, SymFunctionTableAccess, SymGetModuleBase, NULL ) ) + { + auto moduleBase = SymGetModuleBase( process, frame.AddrPC.Offset ); + + std::string moduleName; + std::string funcName; + std::string fileName; + int lineNum = 0; + + char moduelBuff[MAX_PATH]; + if( moduleBase && GetModuleFileNameA( ( HINSTANCE ) moduleBase, moduelBuff, MAX_PATH ) ) + { + moduleName = basename( moduelBuff ); + } + else + { + moduleName = "Unknown Module"; + } + + + DWORD64 offset = 0; + char symbolBuffer[sizeof( IMAGEHLP_SYMBOL ) + 255]; + PIMAGEHLP_SYMBOL symbol = ( PIMAGEHLP_SYMBOL ) symbolBuffer; + symbol->SizeOfStruct = ( sizeof IMAGEHLP_SYMBOL ) + 255; + symbol->MaxNameLength = 254; + + if( SymGetSymFromAddr( process, frame.AddrPC.Offset, &offset, symbol ) ) + { + funcName = symbol->Name; + } + else + { + funcName = "Unknown Function"; + } + + IMAGEHLP_LINE line; + line.SizeOfStruct = sizeof( IMAGEHLP_LINE ); + + DWORD offset_ln = 0; + if( SymGetLineFromAddr( process, frame.AddrPC.Offset, &offset_ln, &line ) ) + { + fileName = line.FileName; + lineNum = line.LineNumber; + } + + Logger::fatal( "[{:x}] {}({}): {} ({})", frame.AddrPC.Offset, fileName, lineNum, funcName, moduleName ); + } + + SymCleanup( process ); #endif } \ No newline at end of file diff --git a/src/common/Util/LockedQueue.h b/src/common/Util/LockedQueue.h index 1e73f4ce..57397b59 100644 --- a/src/common/Util/LockedQueue.h +++ b/src/common/Util/LockedQueue.h @@ -7,7 +7,7 @@ #include #include -namespace Sapphire +namespace Sapphire::Common::Util { template< class T > diff --git a/src/common/Util/LockedWaitQueue.h b/src/common/Util/LockedWaitQueue.h index 122cfd1c..1a1ffdc3 100644 --- a/src/common/Util/LockedWaitQueue.h +++ b/src/common/Util/LockedWaitQueue.h @@ -8,7 +8,7 @@ #include #include -namespace Sapphire +namespace Sapphire::Common::Util { template< typename T > diff --git a/src/common/Util/SpawnIndexAllocator.h b/src/common/Util/SpawnIndexAllocator.h index f03951a3..27003e8f 100644 --- a/src/common/Util/SpawnIndexAllocator.h +++ b/src/common/Util/SpawnIndexAllocator.h @@ -5,7 +5,7 @@ #include #include -namespace Sapphire::Util +namespace Sapphire::Common::Util { template< typename T, typename ActorIdType = uint32_t > diff --git a/src/common/Util/Util.cpp b/src/common/Util/Util.cpp index f443ddf8..2be5d946 100644 --- a/src/common/Util/Util.cpp +++ b/src/common/Util/Util.cpp @@ -5,7 +5,9 @@ #include #include -std::string Sapphire::Util::binaryToHexString( uint8_t* pBinData, uint16_t size ) +using namespace Sapphire::Common; + +std::string Util::binaryToHexString( uint8_t* pBinData, uint16_t size ) { std::string outStr; @@ -17,26 +19,26 @@ std::string Sapphire::Util::binaryToHexString( uint8_t* pBinData, uint16_t size return outStr; } -std::string Sapphire::Util::toLowerCopy( const std::string& inStr ) +std::string Util::toLowerCopy( const std::string& inStr ) { std::string out = inStr; std::transform( inStr.begin(), inStr.end(), out.begin(), [](unsigned char c) -> unsigned char { return ::tolower(c); }); return out; } -void Sapphire::Util::eraseAll( std::string& inOutStr, char remove ) +void Util::eraseAll( std::string& inOutStr, char remove ) { inOutStr.erase( std::remove( inOutStr.begin(), inOutStr.end(), remove ), inOutStr.end() ); } -void Sapphire::Util::eraseAllIn( std::string& inOutStr, std::string& remove ) +void Util::eraseAllIn( std::string& inOutStr, std::string& remove ) { for( auto rem : remove ) inOutStr.erase( std::remove( inOutStr.begin(), inOutStr.end(), rem ), inOutStr.end() ); } -std::string Sapphire::Util::intToHexString( uint64_t intValue, uint8_t width ) +std::string Util::intToHexString( uint64_t intValue, uint8_t width ) { std::string hexStr; @@ -51,7 +53,7 @@ std::string Sapphire::Util::intToHexString( uint64_t intValue, uint8_t width ) return hexStr; } -std::string Sapphire::Util::binaryToHexDump( uint8_t* pBinData, uint16_t size ) +std::string Util::binaryToHexDump( uint8_t* pBinData, uint16_t size ) { int bytesPerLine = 16; constexpr char hexChars[] = "0123456789ABCDEF"; @@ -112,25 +114,25 @@ std::string Sapphire::Util::binaryToHexDump( uint8_t* pBinData, uint16_t size ) } -uint64_t Sapphire::Util::getTimeMs() +uint64_t Util::getTimeMs() { std::chrono::milliseconds epoch = std::chrono::duration_cast< std::chrono::milliseconds > ( std::chrono::system_clock::now().time_since_epoch() ); return epoch.count(); } -uint32_t Sapphire::Util::getTimeSeconds() +uint32_t Util::getTimeSeconds() { auto currClock = std::chrono::system_clock::now(); return std::chrono::time_point_cast< std::chrono::seconds >( currClock ).time_since_epoch().count(); } -uint64_t Sapphire::Util::getEorzeanTimeStamp() +uint64_t Util::getEorzeanTimeStamp() { return static_cast< uint64_t >( getTimeSeconds() * 20.571428571428573f ); } -void Sapphire::Util::valueToFlagByteIndexValue( uint32_t inVal, uint8_t& outVal, uint16_t& outIndex ) +void Util::valueToFlagByteIndexValue( uint32_t inVal, uint8_t& outVal, uint16_t& outIndex ) { uint32_t id = inVal; outIndex = id / 8; @@ -139,3 +141,15 @@ void Sapphire::Util::valueToFlagByteIndexValue( uint32_t inVal, uint8_t& outVal, outVal = 1 << bitIndex; } + +std::string Util::fmtUtcTime( const std::string& fmt ) +{ + auto t = std::time( nullptr ); + auto tm = std::gmtime( &t ); + + std::stringstream ss; + + ss << std::put_time( tm, fmt.c_str() ); + + return ss.str(); +} diff --git a/src/common/Util/Util.h b/src/common/Util/Util.h index 4c4a5a32..b498b5bc 100644 --- a/src/common/Util/Util.h +++ b/src/common/Util/Util.h @@ -5,7 +5,7 @@ #include #include -namespace Sapphire::Util +namespace Sapphire::Common::Util { std::string binaryToHexString( uint8_t* pBinData, uint16_t size ); @@ -19,6 +19,8 @@ namespace Sapphire::Util std::string toLowerCopy( const std::string& inStr ); + std::string fmtUtcTime( const std::string& fmt ); + uint64_t getTimeMs(); /*! diff --git a/src/common/Util/UtilMath.cpp b/src/common/Util/UtilMath.cpp index f2e8cc2c..ae61e171 100644 --- a/src/common/Util/UtilMath.cpp +++ b/src/common/Util/UtilMath.cpp @@ -1,7 +1,9 @@ #include #include "UtilMath.h" -float Sapphire::Util::distanceSq( float x, float y, float z, float x1, float y1, float z1 ) +using namespace Sapphire::Common; + +float Util::distanceSq( float x, float y, float z, float x1, float y1, float z1 ) { float deltaX = x - x1; float deltaY = y - y1; @@ -10,29 +12,30 @@ float Sapphire::Util::distanceSq( float x, float y, float z, float x1, float y1, return ( deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ ); } -float Sapphire::Util::distance( float x, float y, float z, float x1, float y1, float z1 ) +float Util::distance( float x, float y, float z, float x1, float y1, float z1 ) { return sqrtf( distanceSq( x, y, z, x1, y1, z1 ) ); } -float Sapphire::Util::distance( const Common::FFXIVARR_POSITION3& pos1, const Common::FFXIVARR_POSITION3& pos2 ) +float Util::distance( const Sapphire::Common::FFXIVARR_POSITION3& pos1, + const Sapphire::Common::FFXIVARR_POSITION3& pos2 ) { return sqrtf( distanceSq( pos1.x, pos1.y, pos1.z, pos2.x, pos2.y, pos2.z ) ); } -float Sapphire::Util::distance2DSq( float x, float y, float x1, float y1 ) +float Util::distance2DSq( float x, float y, float x1, float y1 ) { float deltaX = x - x1; float deltaY = y - y1; return ( deltaX * deltaX + deltaY * deltaY ); } -float Sapphire::Util::distance2D( float x, float y, float x1, float y1 ) +float Util::distance2D( float x, float y, float x1, float y1 ) { return sqrtf( distance2DSq( x, y, x1, y1 ) ); } -float Sapphire::Util::calcAngTo( float x, float y, float x1, float y1 ) +float Util::calcAngTo( float x, float y, float x1, float y1 ) { float dx = x - x1; float dy = y - y1; @@ -46,7 +49,7 @@ float Sapphire::Util::calcAngTo( float x, float y, float x1, float y1 ) } } -float Sapphire::Util::calcAngFrom( float x, float y, float x1, float y1 ) +float Util::calcAngFrom( float x, float y, float x1, float y1 ) { float dx = x - x1; float dy = y - y1; @@ -60,17 +63,17 @@ float Sapphire::Util::calcAngFrom( float x, float y, float x1, float y1 ) } } -uint16_t Sapphire::Util::floatToUInt16( float val ) +uint16_t Util::floatToUInt16( float val ) { return static_cast< uint16_t >( 0x8000 + val * 32.767f ); } -uint16_t Sapphire::Util::floatToUInt16Rot( float val ) +uint16_t Util::floatToUInt16Rot( float val ) { return static_cast< uint16_t >( 0x8000 * ( ( val + PI ) ) / PI ); } -uint8_t Sapphire::Util::floatToUInt8Rot( float val ) +uint8_t Util::floatToUInt8Rot( float val ) { return static_cast< uint8_t >( 0x80 * ( ( val + PI ) ) / PI ); } \ No newline at end of file diff --git a/src/common/Util/UtilMath.h b/src/common/Util/UtilMath.h index 5d34ee92..c35ef6be 100644 --- a/src/common/Util/UtilMath.h +++ b/src/common/Util/UtilMath.h @@ -5,7 +5,7 @@ #define PI 3.14159265358979323846f -namespace Sapphire::Util +namespace Sapphire::Common::Util { float distanceSq( float x, float y, float z, float x1, float y1, float z1 ); diff --git a/src/common/Vector3.cpp b/src/common/Vector3.cpp index b2f7f993..e364fc99 100644 --- a/src/common/Vector3.cpp +++ b/src/common/Vector3.cpp @@ -1,6 +1,8 @@ #include "Vector3.h" -inline bool Sapphire::Common::FFXIVARR_POSITION3::operator == ( const FFXIVARR_POSITION3& target ) const +using namespace Sapphire::Common; + +inline bool FFXIVARR_POSITION3::operator == ( const FFXIVARR_POSITION3& target ) const { return x == target.x && y == target.y && z == target.z; } diff --git a/src/common/Version.cpp.in b/src/common/Version.cpp.in index 9f973861..cd011ae5 100644 --- a/src/common/Version.cpp.in +++ b/src/common/Version.cpp.in @@ -1,10 +1,9 @@ #include "Version.h" -namespace Sapphire { -namespace Version { +namespace Sapphire::Version +{ -const std::string GIT_HASH = "@GIT_SHA1@"; -const std::string VERSION = "@VERSION@"; + const std::string GIT_HASH = "@GIT_SHA1@"; + const std::string VERSION = "@VERSION@"; -} /* Version */ -} /* Sapphire */ +} /* Sapphire::Version */ diff --git a/src/dbm/DbManager.cpp b/src/dbm/DbManager.cpp index 1be6b172..4b7a7783 100644 --- a/src/dbm/DbManager.cpp +++ b/src/dbm/DbManager.cpp @@ -4,6 +4,15 @@ #include #include #include +#include +#include + +#include + +using namespace Sapphire; +using namespace Sapphire::Common; + +namespace fs = std::filesystem; DbManager::DbManager( const std::string& host, const std::string& database, const std::string& user, const std::string& pw, uint16_t port ) : m_host( host ), @@ -17,10 +26,7 @@ DbManager::DbManager( const std::string& host, const std::string& database, cons { } -DbManager::~DbManager() -{ - -} +DbManager::~DbManager() = default; bool DbManager::execute( const std::string& sql ) { @@ -110,9 +116,14 @@ bool DbManager::performAction() case Mode::LIQUIDATE: result = modeLiquidate(); break; - case Mode::UPDATE: + case Mode::MIGRATE: + result = modeMigrate(); break; case Mode::CHECK: + result = modeCheck(); + break; + case Mode::ADD_MIGRATION: + result = modeAddMigration(); break; case Mode::CLEAN_CHARS: break; @@ -198,8 +209,8 @@ bool DbManager::modeInit() content.erase( 0, pos + delimiter.length() ); } - std::cout << "======================================================" << std::endl; - std::cout << "Inserting default values..." << std::endl; + Logger::info( "======================================================" ); + Logger::info( "Inserting default values..." ); std::ifstream t1( m_iFile ); @@ -228,7 +239,10 @@ bool DbManager::modeInit() content1.erase( 0, pos_ + delimiter1.length() ); } - return true; + Logger::info( "======================================================" ); + Logger::info( "Running migrations..." ); + + return modeMigrate(); } bool promptForChar( const char* prompt, char& readch ) @@ -276,7 +290,7 @@ bool DbManager::modeLiquidate() while( resultSet->next() ) { - std::cout << "DROP TABLE `" + resultSet->getString( 1 ) + "`;" << "\n"; + Logger::info( "DROP TABLE `{}`;", resultSet->getString( 1 ) ); if( !execute( "DROP TABLE `" + resultSet->getString( 1 ) + "`;" ) ) return false; } @@ -300,4 +314,175 @@ void DbManager::setSchemaFile( const std::string& sFile ) m_sFile = sFile; } +void DbManager::setMigratioName( const std::string& name ) +{ + m_migrationName = name; +} + +bool DbManager::modeCheck() +{ + if( !selectSchema() ) + return false; + + std::string query = "SELECT MigrationName FROM __Migration;"; + + std::vector< std::string > appliedMigrations; + + try + { + auto stmt = m_pConnection->createStatement(); + auto resultSet = stmt->executeQuery( query ); + + while( resultSet->next() ) + { + appliedMigrations.emplace_back( resultSet->getString( 1 ) ); + } + } + catch( std::runtime_error& e ) + { + m_lastError = e.what(); + return false; + } + + uint32_t missing = 0; + for( auto& entry : fs::directory_iterator( "sql/migrations" ) ) + { + auto& path = entry.path(); + + // just in case... + if( path.extension() != ".sql" ) + continue; + + if( std::find( appliedMigrations.begin(), appliedMigrations.end(), path.filename().string() ) == appliedMigrations.end() ) + { + Logger::info( "Missing migration: {}", path.filename().string() ); + missing++; + } + } + + if( missing > 0 ) + { + Logger::warn( "Database is missing {} migration(s).", missing ); + } + else + { + Logger::info( "All available migrations have been applied." ); + } + + return true; +} + +bool DbManager::modeMigrate() +{ + if( !selectSchema() ) + return false; + + std::string query = "SELECT MigrationName FROM __Migration;"; + + std::vector< std::string > appliedMigrations; + + try + { + auto stmt = m_pConnection->createStatement(); + auto resultSet = stmt->executeQuery( query ); + + while( resultSet->next() ) + { + appliedMigrations.emplace_back( resultSet->getString( 1 ) ); + } + } + catch( std::runtime_error& e ) + { + m_lastError = e.what(); + return false; + } + + std::vector< std::string > migrations; + for( auto& entry : fs::directory_iterator( "sql/migrations" ) ) + { + auto& path = entry.path(); + + // just in case... + if( path.extension() != ".sql" ) + continue; + + migrations.emplace_back( path.string() ); + } + + std::sort( migrations.begin(), migrations.end() ); + + for( auto& entry : migrations ) + { + auto path = fs::path( entry ); + + if( std::find( appliedMigrations.begin(), appliedMigrations.end(), path.filename().string() ) == appliedMigrations.end() ) + { + Logger::info( "Applying migration: {}", path.filename().string() ); + + std::ifstream mFile( path.string() ); + if( !mFile.is_open() ) + { + m_lastError = "File " + path.string() + " does not exist!"; + return false; + } + std::string sql( ( std::istreambuf_iterator< char >( mFile ) ), + ( std::istreambuf_iterator< char >( ) ) ); + + try + { + auto stmt = m_pConnection->createStatement(); + stmt->executeQuery( sql ); + } + catch( std::runtime_error& e ) + { + m_lastError = e.what(); + return false; + } + + // insert into migrations table + if( !execute( fmt::format( "INSERT INTO __Migration (`MigrationName`) VALUES ('{}');", path.filename().string() ) ) ) + return false; + } + } + + + + return true; +} + +bool DbManager::modeAddMigration() +{ + if( !selectSchema() ) + return false; + + fs::create_directories( "sql/migrations" ); + + auto filename = fmt::format( "{}_{}.sql", Util::fmtUtcTime( "%Y%m%d%H%M%S" ), m_migrationName ); + + if( filename.size() > 250 ) + { + Logger::error( "Migration name '{}' is longer than 250 characters, please shorten its name.", filename ); + return false; + } + + auto path = fmt::format( "sql/migrations/{}", filename ); + + if( fs::exists( path ) ) + { + Logger::error( "Migration '{}' already exists.", filename ); + return false; + } + + std::ofstream mFile( path ); + + mFile << fmt::format( "-- Migration generated at {}", Util::fmtUtcTime( "%Y/%m/%d %H:%M:%S" ) ) << std::endl; + mFile << fmt::format( "-- {}", filename ) << std::endl << std::endl; + + mFile.close(); + + Logger::info( "New migration created: {}", path ); + + return true; +} + diff --git a/src/dbm/DbManager.h b/src/dbm/DbManager.h index 302a5422..f5c1d632 100644 --- a/src/dbm/DbManager.h +++ b/src/dbm/DbManager.h @@ -13,9 +13,10 @@ enum class Mode { INIT, LIQUIDATE, - UPDATE, + MIGRATE, CHECK, - CLEAN_CHARS + CLEAN_CHARS, + ADD_MIGRATION, }; class DbManager @@ -37,6 +38,12 @@ class DbManager bool modeLiquidate(); + bool modeCheck(); + + bool modeMigrate(); + + bool modeAddMigration(); + virtual ~DbManager(); const std::string& getLastError(); @@ -49,6 +56,8 @@ class DbManager void setForceMode( bool mode ); + void setMigratioName( const std::string& name ); + private: std::string m_host; std::string m_database; @@ -61,6 +70,8 @@ class DbManager std::string m_iFile; std::string m_sFile; bool m_force; + + std::string m_migrationName; }; diff --git a/src/dbm/main.cpp b/src/dbm/main.cpp index dacf13f5..ed6c09d4 100644 --- a/src/dbm/main.cpp +++ b/src/dbm/main.cpp @@ -3,11 +3,14 @@ #include #include #include -#include +#include #include +#include +#include +[[maybe_unused]] Sapphire::Common::Util::CrashHandler crashHandler; -namespace filesys = std::experimental::filesystem; +namespace fs = std::filesystem; #include #include @@ -27,19 +30,19 @@ std::vector< std::string > getAllFilesInDir( const std::string& dirPath, try { // Check if given path exists and points to a directory - if( filesys::exists( dirPath ) && filesys::is_directory( dirPath ) ) + if( fs::exists( dirPath ) && fs::is_directory( dirPath ) ) { // Create a Recursive Directory Iterator object and points to the starting of directory - filesys::recursive_directory_iterator iter( dirPath ); + fs::recursive_directory_iterator iter( dirPath ); // Create a Recursive Directory Iterator object pointing to end. - filesys::recursive_directory_iterator end; + fs::recursive_directory_iterator end; // Iterate till end while( iter != end ) { // Check if current entry is a directory and if exists in skip list - if( filesys::is_directory( iter->path() ) && + if( fs::is_directory( iter->path() ) && ( std::find( dirSkipList.begin(), dirSkipList.end(), iter->path().filename() ) != dirSkipList.end() ) ) { // Skip the iteration of current directory pointed by iterator @@ -77,13 +80,14 @@ std::string delChar( std::string &str, char del ) void printUsage() { - Logger::info( " Usage: sapphire_dbm " ); + Logger::info( " Usage: dbm " ); Logger::info( "\t --mode" ); Logger::info( "\t\t initialize -> Creates DB if not present and inserts default tables/data" ); Logger::info( "\t\t check -> Checks if Sapphire DB-Version matches your DB-Version" ); - Logger::info( "\t\t update -> Updates your DB-Version to Sapphire DB-Version" ); + Logger::info( "\t\t migrate -> Updates your DB-Version to Sapphire DB-Version" ); Logger::info( "\t\t clearchars -> Removes all character data from DB. Accounts will stay untouched" ); Logger::info( "\t\t liquidate -> Removes all tables and deletes the DB" ); + Logger::info( "\t\t add-migration -> Creates a new migration with the assoicated up/down sql files" ); Logger::info( "\t --user " ); Logger::info( "\t --pass ( default empty )" ); Logger::info( "\t --host ( default 127.0.0.1 )" ); @@ -91,6 +95,7 @@ void printUsage() Logger::info( "\t --database " ); Logger::info( "\t --sfile ( default sql/schema/schema.sql )" ); Logger::info( "\t --force ( skips user input / auto Yes )" ); + Logger::info( "\t --name " ); } int main( int32_t argc, char* argv[] ) @@ -109,8 +114,21 @@ int main( int32_t argc, char* argv[] ) std::string sFile; std::string iFile; + std::string migrationName; + bool force = false; + // load config first so it can still be overridden if required + Common::ConfigMgr configMgr; + Common::Config::GlobalConfig globalConfig; + if( configMgr.loadGlobalConfig( globalConfig ) ) + { + host = globalConfig.database.host; + database = globalConfig.database.database; + user = globalConfig.database.user; + pass = globalConfig.database.password; + } + std::vector< std::string > args( argv + 1, argv + argc ); for( uint32_t i = 0; i + 1 < args.size(); i += 2 ) { @@ -137,6 +155,8 @@ int main( int32_t argc, char* argv[] ) iFile = val; else if( arg == "force" ) force = true; + else if( arg == "name" ) + migrationName = val; } if( host.empty() ) @@ -155,6 +175,12 @@ int main( int32_t argc, char* argv[] ) dbm.setInsertFile( iFile ); dbm.setSchemaFile( sFile ); } + + if( !migrationName.empty() ) + { + dbm.setMigratioName( migrationName ); + } + if( force ) dbm.setForceMode( true ); //initialize|check|update|clearchars|liquidate @@ -166,9 +192,9 @@ int main( int32_t argc, char* argv[] ) { dbm.setMode( Mode::CHECK ); } - else if( mode.find( "update" ) != std::string::npos ) + else if( mode.find( "migrate" ) != std::string::npos ) { - dbm.setMode( Mode::UPDATE ); + dbm.setMode( Mode::MIGRATE ); } else if( mode.find( "clearchars" ) != std::string::npos ) { @@ -178,6 +204,10 @@ int main( int32_t argc, char* argv[] ) { dbm.setMode( Mode::LIQUIDATE ); } + else if( mode.find( "add-migration" ) != std::string::npos ) + { + dbm.setMode( Mode::ADD_MIGRATION ); + } else { Logger::fatal( "Not a valid mode: {0} !", mode ); diff --git a/src/lobby/Forwards.h b/src/lobby/Forwards.h index 9cc3ac76..2e2d4e36 100644 --- a/src/lobby/Forwards.h +++ b/src/lobby/Forwards.h @@ -12,9 +12,10 @@ x ## Ptr make_ ## x( Args &&...args ) { \ return std::make_shared< x >( std::forward< Args >( args ) ... ); }\ typedef std::vector< x > x ## PtrList; -namespace Sapphire +namespace Sapphire::Lobby { TYPE_FORWARD( LobbySession ); + TYPE_FORWARD( GameConnection ); } namespace Sapphire::Network @@ -22,7 +23,6 @@ namespace Sapphire::Network TYPE_FORWARD( Hive ); TYPE_FORWARD( Acceptor ); TYPE_FORWARD( Connection ); - TYPE_FORWARD( GameConnection ); } namespace Sapphire::Network::Packets diff --git a/src/lobby/GameConnection.cpp b/src/lobby/GameConnection.cpp index 076bb9f6..6bc2e174 100644 --- a/src/lobby/GameConnection.cpp +++ b/src/lobby/GameConnection.cpp @@ -15,49 +15,50 @@ #include "RestConnector.h" #include "LobbySession.h" -extern Sapphire::ServerLobby g_serverLobby; -extern Sapphire::Network::RestConnector g_restConnector; +#include "Forwards.h" -using namespace Sapphire::Common; +using namespace Sapphire; using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::Server; -Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pHive, - Sapphire::Network::AcceptorPtr pAcceptor, - FrameworkPtr pFw ) : - Connection( pHive, pFw ), +extern Lobby::ServerLobby g_serverLobby; +extern Lobby::RestConnector g_restConnector; + +Lobby::GameConnection::GameConnection( Sapphire::Network::HivePtr pHive, + Sapphire::Network::AcceptorPtr pAcceptor ) : + Sapphire::Network::Connection( pHive ), m_pAcceptor( pAcceptor ), m_bEncryptionInitialized( false ) { } -Sapphire::Network::GameConnection::~GameConnection() +Lobby::GameConnection::~GameConnection() { } // overwrite the parents onConnect for our game socket needs -void Sapphire::Network::GameConnection::onAccept( const std::string& host, uint16_t port ) +void Lobby::GameConnection::onAccept( const std::string& host, uint16_t port ) { - auto connection = make_GameConnection( m_hive, m_pAcceptor, m_pFw ); + auto connection = make_GameConnection( m_hive, m_pAcceptor ); m_pAcceptor->accept( connection ); Logger::info( "Connect from {0}", m_socket.remote_endpoint().address().to_string() ); } -void Sapphire::Network::GameConnection::onDisconnect() +void Lobby::GameConnection::onDisconnect() { Logger::debug( "DISCONNECT" ); } -void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer ) +void Lobby::GameConnection::onRecv( std::vector< uint8_t >& buffer ) { m_packets.insert( std::end( m_packets ), std::begin( buffer ), std::end( buffer ) ); // This is assumed packet always start with valid FFXIVARR_PACKET_HEADER for now. - Packets::FFXIVARR_PACKET_HEADER packetHeader{}; - const auto headerResult = Packets::getHeader( m_packets, 0, packetHeader ); + FFXIVARR_PACKET_HEADER packetHeader{}; + const auto headerResult = getHeader( m_packets, 0, packetHeader ); if( headerResult == Incomplete ) return; @@ -70,9 +71,9 @@ void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer ) } // Dissect packet list - std::vector< Packets::FFXIVARR_PACKET_RAW > packetList; - const auto packetResult = Packets::getPackets( m_packets, sizeof( struct FFXIVARR_PACKET_HEADER ), - packetHeader, packetList ); + std::vector< FFXIVARR_PACKET_RAW > packetList; + const auto packetResult = getPackets( m_packets, sizeof( struct FFXIVARR_PACKET_HEADER ), + packetHeader, packetList ); if( packetResult == Incomplete ) return; @@ -90,31 +91,31 @@ void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer ) } -void Sapphire::Network::GameConnection::onError( const asio::error_code& error ) +void Lobby::GameConnection::onError( const asio::error_code& error ) { Logger::info( "GameConnection closed: {0}", error.message() ); } void -Sapphire::Network::GameConnection::sendError( uint64_t sequence, uint32_t errorcode, uint16_t messageId, uint32_t tmpId ) +Lobby::GameConnection::sendError( uint64_t sequence, uint32_t errorcode, uint16_t messageId, uint32_t tmpId ) { auto errorPacket = makeLobbyPacket< FFXIVIpcLobbyError >( tmpId ); errorPacket->data().seq = sequence; errorPacket->data().error_id = errorcode; errorPacket->data().message_id = messageId; - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); pRP.addPacket( errorPacket ); sendPacket( pRP ); } -void Sapphire::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) +void Lobby::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) { uint64_t sequence = *reinterpret_cast< uint64_t* >( &packet.data[ 0 ] + 0x10 ); Logger::info( "Sequence [{0}]", sequence ); Logger::info( "[{0}] ReqCharList", m_pSession->getAccountID() ); - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); auto serverListPacket = makeLobbyPacket< FFXIVIpcServerList >( tmpId ); serverListPacket->data().seq = 1; @@ -178,21 +179,21 @@ void Sapphire::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet // TODO: Eventually move to account info storage if( i == 3 ) { - charListPacket->data().entitledExpansion = 2; + charListPacket->data().entitledExpansion = Common::CURRENT_EXPANSION_ID; charListPacket->data().maxCharOnWorld = 25; charListPacket->data().unknown8 = 8; charListPacket->data().veteranRank = 12; charListPacket->data().counter = ( i * 4 ) + 1; charListPacket->data().unknown4 = 128; } - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); pRP.addPacket( charListPacket ); sendPacket( pRP ); } } -void Sapphire::Network::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) +void Lobby::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) { uint64_t sequence = *reinterpret_cast< uint64_t* >( &packet.data[ 0 ] + 0x10 ); Logger::info( "Sequence [{0}]", sequence ); @@ -221,7 +222,7 @@ void Sapphire::Network::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet, Logger::info( "[{0}] Logging in as {1} ({2})", m_pSession->getAccountID(), logInCharName, logInCharId ); - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); auto enterWorldPacket = makeLobbyPacket< FFXIVIpcEnterWorld >( tmpId ); enterWorldPacket->data().contentId = lookupId; @@ -234,7 +235,7 @@ void Sapphire::Network::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet, sendPacket( pRP ); } -bool Sapphire::Network::GameConnection::sendServiceAccountList( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) +bool Lobby::GameConnection::sendServiceAccountList( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) { LobbySessionPtr pSession = g_serverLobby.getSession( ( char* ) &packet.data[ 0 ] + 0x22 ); @@ -259,13 +260,13 @@ bool Sapphire::Network::GameConnection::sendServiceAccountList( FFXIVARR_PACKET_ serviceIdInfoPacket->data().u2 = 0x99; serviceIdInfoPacket->data().serviceAccount[ 0 ].id = 0x002E4A2B; - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); pRP.addPacket( serviceIdInfoPacket ); sendPacket( pRP ); } else { - Logger::info( "Could not retrieve session: {0}", std::string( ( char* ) &packet.data[ 0 ] + 0x20 ) ); + Logger::info( "Could not retrieve session: {0}", std::string( ( char* ) &packet.data[ 0 ] + 0x22 ) ); sendError( 1, 5006, 13001, tmpId ); return true; @@ -273,7 +274,7 @@ bool Sapphire::Network::GameConnection::sendServiceAccountList( FFXIVARR_PACKET_ return false; } -bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) +bool Lobby::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ) { uint64_t sequence = *reinterpret_cast< uint64_t* >( &packet.data[ 0 ] + 0x10 ); uint8_t type = *reinterpret_cast< uint8_t* >( &packet.data[ 0 ] + 0x29 ); @@ -292,7 +293,7 @@ bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& Logger::info( "[{0}] Type 1: {1}", m_pSession->getAccountID(), name ); - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); m_pSession->newCharName = name; @@ -323,7 +324,7 @@ bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& if( g_restConnector.createCharacter( ( char* ) m_pSession->getSessionId(), m_pSession->newCharName, charDetails ) != -1 ) { - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); auto charCreatePacket = makeLobbyPacket< FFXIVIpcCharCreate >( tmpId ); charCreatePacket->data().content_id = newContentId; @@ -365,7 +366,7 @@ bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& charCreatePacket->data().unknown_7 = 1; charCreatePacket->data().unknown_8 = 1; - Packets::LobbyPacketContainer pRP( m_encKey ); + LobbyPacketContainer pRP( m_encKey ); pRP.addPacket( charCreatePacket ); sendPacket( pRP ); } @@ -381,7 +382,7 @@ bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW& return false; } -void Sapphire::Network::GameConnection::handleGamePacket( Packets::FFXIVARR_PACKET_RAW& packet ) +void Lobby::GameConnection::handleGamePacket( Network::Packets::FFXIVARR_PACKET_RAW& packet ) { uint32_t tmpId = packet.segHdr.target_actor; @@ -419,7 +420,7 @@ void Sapphire::Network::GameConnection::handleGamePacket( Packets::FFXIVARR_PACK } -void Sapphire::Network::GameConnection::sendPacket( Packets::LobbyPacketContainer& pLpc ) +void Lobby::GameConnection::sendPacket( LobbyPacketContainer& pLpc ) { uint16_t size = pLpc.getSize(); uint8_t* dataPtr = pLpc.getRawData( false ); @@ -428,7 +429,7 @@ void Sapphire::Network::GameConnection::sendPacket( Packets::LobbyPacketContaine send( sendBuffer ); } -void Sapphire::Network::GameConnection::sendPackets( Packets::PacketContainer* pPacket ) +void Lobby::GameConnection::sendPackets( Network::Packets::PacketContainer* pPacket ) { std::vector< uint8_t > sendBuffer; @@ -436,14 +437,14 @@ void Sapphire::Network::GameConnection::sendPackets( Packets::PacketContainer* p send( sendBuffer ); } -void Sapphire::Network::GameConnection::sendSinglePacket( FFXIVPacketBasePtr pPacket ) +void Lobby::GameConnection::sendSinglePacket( FFXIVPacketBasePtr pPacket ) { PacketContainer pRP = PacketContainer(); pRP.addPacket( pPacket ); sendPackets( &pRP ); } -void Sapphire::Network::GameConnection::generateEncryptionKey( uint32_t key, const std::string& keyPhrase ) +void Lobby::GameConnection::generateEncryptionKey( uint32_t key, const std::string& keyPhrase ) { memset( m_baseKey, 0, 0x2C ); m_baseKey[ 0 ] = 0x78; @@ -451,14 +452,14 @@ void Sapphire::Network::GameConnection::generateEncryptionKey( uint32_t key, con m_baseKey[ 2 ] = 0x34; m_baseKey[ 3 ] = 0x12; memcpy( m_baseKey + 0x04, &key, 4 ); - m_baseKey[ 8 ] = 0xC6; - m_baseKey[ 9 ] = 0x11; + m_baseKey[ 8 ] = 0x88; + m_baseKey[ 9 ] = 0x13; memcpy( ( char* ) m_baseKey + 0x0C, keyPhrase.c_str(), keyPhrase.size() ); - Sapphire::Util::md5( m_baseKey, m_encKey, 0x2C ); + Common::Util::md5( m_baseKey, m_encKey, 0x2C ); } -void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network::Packets::FFXIVARR_PACKET_HEADER& ipcHeader, - const std::vector< Sapphire::Network::Packets::FFXIVARR_PACKET_RAW >& packetData ) +void Lobby::GameConnection::handlePackets( const Network::Packets::FFXIVARR_PACKET_HEADER& ipcHeader, + const std::vector< Network::Packets::FFXIVARR_PACKET_RAW >& packetData ) { for( auto inPacket : packetData ) diff --git a/src/lobby/GameConnection.h b/src/lobby/GameConnection.h index 6bcb7122..a98c01c5 100644 --- a/src/lobby/GameConnection.h +++ b/src/lobby/GameConnection.h @@ -16,10 +16,10 @@ #define DECLARE_HANDLER( x ) void x( Packets::GamePacketPtr pInPacket, Entity::PlayerPtr pPlayer ) -namespace Sapphire::Network +namespace Sapphire::Lobby { - class GameConnection : public Connection + class GameConnection : public Network::Connection { private: @@ -32,16 +32,16 @@ namespace Sapphire::Network bool m_bEncryptionInitialized; - AcceptorPtr m_pAcceptor; + Network::AcceptorPtr m_pAcceptor; LobbySessionPtr m_pSession; - LockedQueue< Packets::GamePacketPtr > m_inQueue; - LockedQueue< Packets::GamePacketPtr > m_outQueue; + Common::Util::LockedQueue< Network::Packets::GamePacketPtr > m_inQueue; + Common::Util::LockedQueue< Network::Packets::GamePacketPtr > m_outQueue; std::vector< uint8_t > m_packets; public: - GameConnection( HivePtr pHive, AcceptorPtr pAcceptor, FrameworkPtr pFw ); + GameConnection( Network::HivePtr pHive, Network::AcceptorPtr pAcceptor ); ~GameConnection(); @@ -58,26 +58,26 @@ namespace Sapphire::Network void sendError( uint64_t sequence, uint32_t errorcode, uint16_t messageId, uint32_t tmpId ); - void getCharList( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); + void getCharList( Network::Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); - void enterWorld( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); + void enterWorld( Network::Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); - bool sendServiceAccountList( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); + bool sendServiceAccountList( Network::Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); - bool createOrModifyChar( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); + bool createOrModifyChar( Network::Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId ); - void handlePackets( const Packets::FFXIVARR_PACKET_HEADER& ipcHeader, - const std::vector< Packets::FFXIVARR_PACKET_RAW >& packetData ); + void handlePackets( const Network::Packets::FFXIVARR_PACKET_HEADER& ipcHeader, + const std::vector< Network::Packets::FFXIVARR_PACKET_RAW >& packetData ); - void handleGamePacket( Packets::FFXIVARR_PACKET_RAW& pPacket ); + void handleGamePacket( Network::Packets::FFXIVARR_PACKET_RAW& pPacket ); - void handlePacket( Packets::FFXIVPacketBasePtr pPacket ); + void handlePacket( Network::Packets::FFXIVPacketBasePtr pPacket ); - void sendPackets( Packets::PacketContainer* pPacket ); + void sendPackets( Network::Packets::PacketContainer* pPacket ); - void sendPacket( Packets::LobbyPacketContainer& pLpc ); + void sendPacket( Network::Packets::LobbyPacketContainer& pLpc ); - void sendSinglePacket( Packets::FFXIVPacketBasePtr pPacket ); + void sendSinglePacket( Network::Packets::FFXIVPacketBasePtr pPacket ); }; diff --git a/src/lobby/LobbyPacketContainer.cpp b/src/lobby/LobbyPacketContainer.cpp index 2d217436..fcd4e459 100644 --- a/src/lobby/LobbyPacketContainer.cpp +++ b/src/lobby/LobbyPacketContainer.cpp @@ -4,10 +4,11 @@ #include #include +using namespace Sapphire; using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; -Sapphire::Network::Packets::LobbyPacketContainer::LobbyPacketContainer( uint8_t* encKey ) +LobbyPacketContainer::LobbyPacketContainer( uint8_t* encKey ) { memset( &m_header, 0, sizeof( Sapphire::Network::Packets::FFXIVARR_PACKET_HEADER ) ); m_header.size = sizeof( Sapphire::Network::Packets::FFXIVARR_PACKET_HEADER ); @@ -17,12 +18,12 @@ Sapphire::Network::Packets::LobbyPacketContainer::LobbyPacketContainer( uint8_t* memset( m_dataBuf, 0, 0x1570 ); } -Sapphire::Network::Packets::LobbyPacketContainer::~LobbyPacketContainer() +LobbyPacketContainer::~LobbyPacketContainer() { m_entryList.clear(); } -void Sapphire::Network::Packets::LobbyPacketContainer::addPacket( FFXIVPacketBasePtr pEntry ) +void LobbyPacketContainer::addPacket( FFXIVPacketBasePtr pEntry ) { memcpy( m_dataBuf + m_header.size, &pEntry->getData()[ 0 ], pEntry->getSize() ); @@ -38,17 +39,17 @@ void Sapphire::Network::Packets::LobbyPacketContainer::addPacket( FFXIVPacketBas m_header.count++; } -uint16_t Sapphire::Network::Packets::LobbyPacketContainer::getSize() const +uint16_t LobbyPacketContainer::getSize() const { return m_header.size; } -uint8_t* Sapphire::Network::Packets::LobbyPacketContainer::getRawData( bool addstuff ) +uint8_t* LobbyPacketContainer::getRawData( bool addstuff ) { if( addstuff ) { m_header.unknown_0 = 0xff41a05252; - m_header.timestamp = Sapphire::Util::getTimeMs(); + m_header.timestamp = Common::Util::getTimeMs(); } memcpy( m_dataBuf, &m_header, sizeof( Sapphire::Network::Packets::FFXIVARR_PACKET_HEADER ) ); return m_dataBuf; diff --git a/src/lobby/LobbyPacketContainer.h b/src/lobby/LobbyPacketContainer.h index 9f40ef93..0ac3d0b5 100644 --- a/src/lobby/LobbyPacketContainer.h +++ b/src/lobby/LobbyPacketContainer.h @@ -12,7 +12,7 @@ namespace Sapphire::Network::Packets { - using FFXIVPacketBasePtr = std::shared_ptr< FFXIVPacketBase >; + using FFXIVPacketBasePtr = std::shared_ptr< Sapphire::Network::Packets::FFXIVPacketBase >; class LobbyPacketContainer { diff --git a/src/lobby/LobbySession.cpp b/src/lobby/LobbySession.cpp index 4cdd58b8..dc30fae2 100644 --- a/src/lobby/LobbySession.cpp +++ b/src/lobby/LobbySession.cpp @@ -1,6 +1,7 @@ #include "LobbySession.h" -namespace Sapphire { +using namespace Sapphire::Lobby; + LobbySession::LobbySession( void ) { //setSocket(NULL); @@ -11,5 +12,4 @@ LobbySession::~LobbySession( void ) { } -} diff --git a/src/lobby/LobbySession.h b/src/lobby/LobbySession.h index 95eeb5f8..66a77c27 100644 --- a/src/lobby/LobbySession.h +++ b/src/lobby/LobbySession.h @@ -7,7 +7,7 @@ #include #include -namespace Sapphire +namespace Sapphire::Lobby { class LobbySession diff --git a/src/lobby/RestConnector.cpp b/src/lobby/RestConnector.cpp index 94c988f0..a8ee459f 100644 --- a/src/lobby/RestConnector.cpp +++ b/src/lobby/RestConnector.cpp @@ -8,19 +8,21 @@ #include +using namespace Sapphire; + typedef std::vector< std::tuple< std::string, uint32_t, uint64_t, std::string > > CharList; -Sapphire::Network::RestConnector::RestConnector() +Lobby::RestConnector::RestConnector() { } -Sapphire::Network::RestConnector::~RestConnector() +Lobby::RestConnector::~RestConnector() { } -HttpResponse Sapphire::Network::RestConnector::requestApi( std::string endpoint, std::string data ) +HttpResponse Lobby::RestConnector::requestApi( std::string endpoint, std::string data ) { HttpClient client( restHost ); @@ -39,7 +41,7 @@ HttpResponse Sapphire::Network::RestConnector::requestApi( std::string endpoint, return r; } -Sapphire::LobbySessionPtr Sapphire::Network::RestConnector::getSession( char* sId ) +Lobby::LobbySessionPtr Lobby::RestConnector::getSession( char* sId ) { std::string json_string = "{\"sId\": \"" + std::string( sId ) + "\",\"secret\": \"" + serverSecret + "\"}"; @@ -65,7 +67,7 @@ Sapphire::LobbySessionPtr Sapphire::Network::RestConnector::getSession( char* sI if( content.find( "invalid" ) == std::string::npos ) { - LobbySessionPtr pSession( new Sapphire::LobbySession() ); + LobbySessionPtr pSession( new Lobby::LobbySession() ); pSession->setAccountID( json["result"].get< uint32_t >() ); pSession->setSessionId( ( uint8_t* ) sId ); return pSession; @@ -81,7 +83,7 @@ Sapphire::LobbySessionPtr Sapphire::Network::RestConnector::getSession( char* sI } } -bool Sapphire::Network::RestConnector::checkNameTaken( std::string name ) +bool Lobby::RestConnector::checkNameTaken( std::string name ) { std::string json_string = "{\"name\": \"" + name + "\",\"secret\": \"" + serverSecret + "\"}"; @@ -115,7 +117,7 @@ bool Sapphire::Network::RestConnector::checkNameTaken( std::string name ) } } -uint32_t Sapphire::Network::RestConnector::getNextCharId() +uint32_t Lobby::RestConnector::getNextCharId() { std::string json_string = "{\"secret\": \"" + serverSecret + "\"}"; @@ -154,7 +156,7 @@ uint32_t Sapphire::Network::RestConnector::getNextCharId() } } -uint64_t Sapphire::Network::RestConnector::getNextContentId() +uint64_t Lobby::RestConnector::getNextContentId() { std::string json_string = "{\"secret\": \"" + serverSecret + "\"}"; @@ -193,7 +195,7 @@ uint64_t Sapphire::Network::RestConnector::getNextContentId() } } -CharList Sapphire::Network::RestConnector::getCharList( char* sId ) +CharList Lobby::RestConnector::getCharList( char* sId ) { std::string json_string = "{\"sId\": \"" + std::string( sId, 56 ) + "\",\"secret\": \"" + serverSecret + "\"}"; @@ -249,7 +251,7 @@ CharList Sapphire::Network::RestConnector::getCharList( char* sId ) } } -bool Sapphire::Network::RestConnector::deleteCharacter( char* sId, std::string name ) +bool Lobby::RestConnector::deleteCharacter( char* sId, std::string name ) { std::string json_string = "{\"sId\": \"" + std::string( sId, 56 ) + "\",\"secret\": \"" + serverSecret + "\",\"name\": \"" + name + "\"}"; @@ -283,11 +285,11 @@ bool Sapphire::Network::RestConnector::deleteCharacter( char* sId, std::string n } } -int Sapphire::Network::RestConnector::createCharacter( char* sId, std::string name, std::string infoJson ) +int Lobby::RestConnector::createCharacter( char* sId, std::string name, std::string infoJson ) { std::string json_string = "{\"sId\": \"" + std::string( sId, 56 ) + "\",\"secret\": \"" + serverSecret + "\",\"name\": \"" + name + - "\",\"infoJson\": \"" + Sapphire::Util::base64Encode( ( uint8_t* ) infoJson.c_str(), infoJson.length() ) + "\"}"; + "\",\"infoJson\": \"" + Common::Util::base64Encode( ( uint8_t* ) infoJson.c_str(), infoJson.length() ) + "\"}"; HttpResponse r = requestApi( "createCharacter", json_string ); diff --git a/src/lobby/RestConnector.h b/src/lobby/RestConnector.h index b8c2935c..f361416c 100644 --- a/src/lobby/RestConnector.h +++ b/src/lobby/RestConnector.h @@ -15,7 +15,7 @@ namespace Sapphire class Session; } -namespace Sapphire::Network +namespace Sapphire::Lobby { class LobbySession; diff --git a/src/lobby/ServerLobby.cpp b/src/lobby/ServerLobby.cpp index 9d243624..97a252fa 100644 --- a/src/lobby/ServerLobby.cpp +++ b/src/lobby/ServerLobby.cpp @@ -10,7 +10,6 @@ #include #include -#include "Framework.h" #include "ServerLobby.h" @@ -21,9 +20,11 @@ #include -Sapphire::Network::RestConnector g_restConnector; +using namespace Sapphire; -namespace Sapphire +Sapphire::Lobby::RestConnector g_restConnector; + +namespace Sapphire::Lobby { @@ -31,7 +32,7 @@ namespace Sapphire m_configPath( configPath ), m_numConnections( 0 ) { - m_pConfig = std::make_shared< ConfigMgr >(); + m_pConfig = std::make_shared< Sapphire::Common::ConfigMgr >(); } LobbySessionPtr ServerLobby::getSession( char* sessionId ) @@ -63,15 +64,14 @@ namespace Sapphire Logger::setLogLevel( m_config.global.general.logLevel ); - auto pFw = std::make_shared< Framework >(); - Network::HivePtr hive( new Network::Hive() ); - Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive, pFw ); + auto hive = Network::make_Hive(); + Network::addServerToHive< GameConnection >( m_ip, m_port, hive ); Logger::info( "Lobby server running on {0}:{1}", m_ip, m_port ); std::vector< std::thread > threadGroup; - threadGroup.emplace_back( std::bind( &Network::Hive::run, hive.get() ) ); + threadGroup.emplace_back( std::bind( &Sapphire::Network::Hive::run, hive.get() ) ); for( auto& thread : threadGroup ) if( thread.joinable() ) diff --git a/src/lobby/ServerLobby.h b/src/lobby/ServerLobby.h index 99e091ef..c258257a 100644 --- a/src/lobby/ServerLobby.h +++ b/src/lobby/ServerLobby.h @@ -9,10 +9,14 @@ const std::string LOBBY_VERSION = "0.0.5"; -namespace Sapphire +namespace Sapphire::Common +{ + class ConfigMgr; +} + +namespace Sapphire::Lobby { class LobbySession; - class ConfigMgr; using LobbySessionMap = std::map< std::string, LobbySessionPtr >; @@ -29,7 +33,7 @@ namespace Sapphire uint16_t m_port; std::string m_ip; - std::shared_ptr< ConfigMgr > m_pConfig; + std::shared_ptr< Sapphire::Common::ConfigMgr > m_pConfig; public: ServerLobby( const std::string& configPath ); diff --git a/src/lobby/client_http.hpp b/src/lobby/client_http.hpp index fc30d950..f22cb8d2 100644 --- a/src/lobby/client_http.hpp +++ b/src/lobby/client_http.hpp @@ -17,16 +17,16 @@ class case_insensitive_equals { public: bool operator()(const std::string &key1, const std::string &key2) const { - return Sapphire::Util::toLowerCopy( key1 ) == Sapphire::Util::toLowerCopy( key2 ); + return Sapphire::Common::Util::toLowerCopy( key1 ) == Sapphire::Common::Util::toLowerCopy( key2 ); } }; class case_insensitive_hash { public: - size_t operator()( const std::string &key ) const + size_t operator()( const std::string &key ) const { std::size_t seed=0; for( auto &c : key ) - Sapphire::Util::hashCombine< char >( seed, std::tolower( c ) ); + Sapphire::Common::Util::hashCombine< char >( seed, std::tolower( c ) ); return seed; } }; diff --git a/src/lobby/mainLobbyServer.cpp b/src/lobby/mainLobbyServer.cpp index 957604c8..0b16ff26 100644 --- a/src/lobby/mainLobbyServer.cpp +++ b/src/lobby/mainLobbyServer.cpp @@ -2,9 +2,9 @@ #include -Sapphire::Common::Util::CrashHandler crashHandler; +[[maybe_unused]] Sapphire::Common::Util::CrashHandler crashHandler; -Sapphire::ServerLobby g_serverLobby( "lobby.ini" ); +Sapphire::Lobby::ServerLobby g_serverLobby( "lobby.ini" ); int main( int32_t argc, char* argv[] ) { diff --git a/src/scripts/action/common/ActionDye2472.cpp b/src/scripts/action/common/ActionDye2472.cpp new file mode 100644 index 00000000..b1049a8d --- /dev/null +++ b/src/scripts/action/common/ActionDye2472.cpp @@ -0,0 +1,27 @@ +#include +#include +#include +#include + +class ActionDye2472 : + public Sapphire::ScriptAPI::ActionScript +{ +public: + ActionDye2472() : + Sapphire::ScriptAPI::ActionScript( 2472 ) + { + } + + void onExecute( Sapphire::World::Action::Action& action ) override + { + auto sourceChara = action.getSourceChara(); + + if( !sourceChara->isPlayer() ) + return; + + //TODO: Effect + sourceChara->getAsPlayer()->dyeItemFromDyeingInfo(); + } +}; + +EXPOSE_SCRIPT(ActionDye2472); \ No newline at end of file diff --git a/src/scripts/action/common/ActionReturn6.cpp b/src/scripts/action/common/ActionReturn6.cpp index 9831c7e3..aedb0a38 100644 --- a/src/scripts/action/common/ActionReturn6.cpp +++ b/src/scripts/action/common/ActionReturn6.cpp @@ -12,7 +12,7 @@ public: { } - void onExecute( Sapphire::Action::Action& action ) override + void onExecute( Sapphire::World::Action::Action& action ) override { if( !action.getSourceChara()->isPlayer() ) return; diff --git a/src/scripts/action/common/ActionSprint3.cpp b/src/scripts/action/common/ActionSprint3.cpp index 0067dcac..4a442ad7 100644 --- a/src/scripts/action/common/ActionSprint3.cpp +++ b/src/scripts/action/common/ActionSprint3.cpp @@ -11,13 +11,15 @@ public: { } - void onExecute( Sapphire::Action::Action& action ) override + void onExecute( Sapphire::World::Action::Action& action ) override { auto sourceChara = action.getSourceChara(); if( !sourceChara->isPlayer() ) return; + action.getEffectbuilder()->applyStatusEffect( sourceChara, 50, 30 ); + sourceChara->getAsPlayer()->addStatusEffectByIdIfNotExist( 50, 20000, *sourceChara, 30 ); } }; diff --git a/src/scripts/action/common/ActionTeleport5.cpp b/src/scripts/action/common/ActionTeleport5.cpp index e08afda6..1a2fcd77 100644 --- a/src/scripts/action/common/ActionTeleport5.cpp +++ b/src/scripts/action/common/ActionTeleport5.cpp @@ -14,7 +14,7 @@ public: { } - void onExecute( Sapphire::Action::Action& action ) override + void onExecute( Sapphire::World::Action::Action& action ) override { auto player = action.getSourceChara()->getAsPlayer(); diff --git a/src/scripts/action/playeractions/archer/ActionHeavyShot97.cpp b/src/scripts/action/playeractions/archer/ActionHeavyShot97.cpp deleted file mode 100644 index 882d4549..00000000 --- a/src/scripts/action/playeractions/archer/ActionHeavyShot97.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include