From 9aeda0dadc7b558cb86bf219878ca3bd16eb6e00 Mon Sep 17 00:00:00 2001 From: ShelbyZ Date: Mon, 30 Oct 2017 19:11:54 -0700 Subject: [PATCH 1/7] Silence unchecked iterators for server_rest - couldnt't find a better way to find the subpath or a root - can't pass other iter length or it fails to view them as main and subdir --- src/servers/Server_REST/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/servers/Server_REST/CMakeLists.txt b/src/servers/Server_REST/CMakeLists.txt index 59de42a2..509944cc 100644 --- a/src/servers/Server_REST/CMakeLists.txt +++ b/src/servers/Server_REST/CMakeLists.txt @@ -22,6 +22,9 @@ set_target_properties(server_rest PROPERTIES if (UNIX) target_link_libraries (server_rest Common xivdat pthread mysqlclient dl z) else() + # ignore unchecked iterators warnings from msvc + add_definitions(-D_SCL_SECURE_NO_WARNINGS) + target_link_libraries (server_rest Common xivdat libmysql zlib1) endif() From c23860a61d9786568bfbb0bd1b65ad4e23329960 Mon Sep 17 00:00:00 2001 From: goaaats Date: Tue, 31 Oct 2017 13:36:03 +0100 Subject: [PATCH 2/7] Set debug working path for generated solutions --- src/servers/Server_Lobby/CMakeLists.txt | 1 + src/servers/Server_REST/CMakeLists.txt | 1 + src/servers/Server_Zone/CMakeLists.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/src/servers/Server_Lobby/CMakeLists.txt b/src/servers/Server_Lobby/CMakeLists.txt index 57e57488..2a00e114 100644 --- a/src/servers/Server_Lobby/CMakeLists.txt +++ b/src/servers/Server_Lobby/CMakeLists.txt @@ -18,6 +18,7 @@ set_target_properties(server_lobby PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" ) if (UNIX) diff --git a/src/servers/Server_REST/CMakeLists.txt b/src/servers/Server_REST/CMakeLists.txt index 59de42a2..bcc818c4 100644 --- a/src/servers/Server_REST/CMakeLists.txt +++ b/src/servers/Server_REST/CMakeLists.txt @@ -17,6 +17,7 @@ set_target_properties(server_rest PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" ) if (UNIX) diff --git a/src/servers/Server_Zone/CMakeLists.txt b/src/servers/Server_Zone/CMakeLists.txt index 50a34131..cfe376b8 100644 --- a/src/servers/Server_Zone/CMakeLists.txt +++ b/src/servers/Server_Zone/CMakeLists.txt @@ -33,6 +33,7 @@ set_target_properties(server_zone PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" ) if (UNIX) From 33da12a8d364f7d280b7ebda142dad66824e8540 Mon Sep 17 00:00:00 2001 From: ShelbyZ Date: Wed, 1 Nov 2017 22:24:50 -0700 Subject: [PATCH 3/7] gcc warnings - uint64_t format errors using define SCNu64 - sprintf without format string replacing with strcpy (might be better to move to strncpy or something else) - use return value of fread(...) - use return value of system(...) --- src/servers/Server_Common/Database/Database.h | 14 ++++---------- src/servers/Server_Lobby/GameConnection.cpp | 2 +- src/servers/Server_Zone/Actor/PlayerSql.cpp | 2 +- .../DebugCommand/DebugCommandHandler.cpp | 4 +++- src/servers/Server_Zone/Network/GameConnection.cpp | 6 +++++- .../Network/Handlers/GMCommandHandlers.cpp | 2 +- .../Network/Handlers/PacketHandlers.cpp | 4 ++-- .../Network/PacketWrappers/InitUIPacket.h | 2 +- src/tools/quest_parser/main.cpp | 6 +++++- 9 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/servers/Server_Common/Database/Database.h b/src/servers/Server_Common/Database/Database.h index cce94691..b40d0394 100644 --- a/src/servers/Server_Common/Database/Database.h +++ b/src/servers/Server_Common/Database/Database.h @@ -3,6 +3,7 @@ #include #include +#include #include @@ -38,18 +39,11 @@ namespace Db { { if( m_pValue ) { - #ifdef _WIN32 uint64_t value; - sscanf( m_pValue, "%I64d", &value ); + sscanf( m_pValue, "%" SCNu64, &value ); return value; - #else - uint64_t value; - sscanf( m_pValue, "%Lu", &value ); - return value; - - #endif - } - else + } + else return 0; } diff --git a/src/servers/Server_Lobby/GameConnection.cpp b/src/servers/Server_Lobby/GameConnection.cpp index a2b0d0b2..1256dca2 100644 --- a/src/servers/Server_Lobby/GameConnection.cpp +++ b/src/servers/Server_Lobby/GameConnection.cpp @@ -139,7 +139,7 @@ void Core::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet, ui serverListPacket.data().server[0].id = g_serverLobby.getConfig()->getValue( "Settings.Parameters.WorldID", 1 ); serverListPacket.data().server[0].index = 0; serverListPacket.data().final = 1; - sprintf( serverListPacket.data().server[0].name, g_serverLobby.getConfig()->getValue< std::string >( "Settings.Parameters.WorldName", "Sapphire" ).c_str() ); + strcpy( serverListPacket.data().server[0].name, g_serverLobby.getConfig()->getValue< std::string >( "Settings.Parameters.WorldName", "Sapphire" ).c_str() ); pRP.addPacket( serverListPacket ); diff --git a/src/servers/Server_Zone/Actor/PlayerSql.cpp b/src/servers/Server_Zone/Actor/PlayerSql.cpp index 23ed16f0..8c8be85e 100644 --- a/src/servers/Server_Zone/Actor/PlayerSql.cpp +++ b/src/servers/Server_Zone/Actor/PlayerSql.cpp @@ -273,7 +273,7 @@ bool Core::Entity::Player::loadSearchInfo() m_searchSelectClass = field[1].get< uint8_t >(); m_searchSelectRegion = field[2].get< uint8_t >(); - sprintf( m_searchMessage, field[3].getString().c_str() ); + strcpy( m_searchMessage, field[3].getString().c_str() ); return true; } diff --git a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp index 0284a1e9..de49442f 100644 --- a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp @@ -31,6 +31,8 @@ #include "src/servers/Server_Zone/Session.h" #include +#include + extern Core::Db::Database g_database; extern Core::Scripting::ScriptManager g_scriptMgr; extern Core::Data::ExdData g_exdData; @@ -256,7 +258,7 @@ void Core::DebugCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlaye else if ( subCommand == "eorzeatime" ) { uint64_t timestamp; - sscanf( params.c_str(), "%llu", ×tamp ); + sscanf( params.c_str(), "%" SCNu64, ×tamp ); pPlayer->setEorzeaTimeOffset( timestamp ); pPlayer->sendNotice( "Eorzea time offset: " + std::to_string( timestamp ) ); diff --git a/src/servers/Server_Zone/Network/GameConnection.cpp b/src/servers/Server_Zone/Network/GameConnection.cpp index a9ce9353..b5f046a3 100644 --- a/src/servers/Server_Zone/Network/GameConnection.cpp +++ b/src/servers/Server_Zone/Network/GameConnection.cpp @@ -329,7 +329,11 @@ void Core::Network::GameConnection::injectPacket( const std::string& packetpath, fseek( fp, 0, SEEK_END ); int32_t size = ftell( fp ); rewind( fp ); - fread( packet, sizeof( char ), size, fp ); + if ( fread( packet, sizeof( char ), size, fp ) != size ) + { + g_log.error( "Packet " + packetpath + " did not read full size: " + std::to_string( size ) ); + return; + } fclose( fp ); // cycle through the packet entries and queue each one diff --git a/src/servers/Server_Zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/GMCommandHandlers.cpp index 3d79409e..c1d855b0 100644 --- a/src/servers/Server_Zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/GMCommandHandlers.cpp @@ -335,7 +335,7 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac GamePacketNew< FFXIVIpcSetSearchInfo, ServerZoneIpcType > searchInfoPacket( targetPlayer->getId() ); searchInfoPacket.data().onlineStatusFlags = param1; searchInfoPacket.data().selectRegion = targetPlayer->getSearchSelectRegion(); - sprintf( searchInfoPacket.data().searchMessage, targetPlayer->getSearchMessage() ); + strcpy( searchInfoPacket.data().searchMessage, targetPlayer->getSearchMessage() ); targetPlayer->queuePacket( searchInfoPacket ); targetPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatusIcon, diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index fc8add9f..7db524a6 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -84,7 +84,7 @@ void Core::Network::GameConnection::setSearchInfoHandler( const Packets::GamePac GamePacketNew< FFXIVIpcSetSearchInfo, ServerZoneIpcType > searchInfoPacket( pPlayer->getId() ); searchInfoPacket.data().onlineStatusFlags = status; searchInfoPacket.data().selectRegion = pPlayer->getSearchSelectRegion(); - sprintf( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() ); + strcpy( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() ); queueOutPacket( searchInfoPacket ); pPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatusIcon, @@ -98,7 +98,7 @@ void Core::Network::GameConnection::reqSearchInfoHandler( const Packets::GamePac GamePacketNew< FFXIVIpcInitSearchInfo, ServerZoneIpcType > searchInfoPacket( pPlayer->getId() ); searchInfoPacket.data().onlineStatusFlags = pPlayer->getOnlineStatusMask(); searchInfoPacket.data().selectRegion = pPlayer->getSearchSelectRegion(); - sprintf( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() ); + strcpy( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() ); queueOutPacket( searchInfoPacket ); } diff --git a/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h b/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h index e28f87e1..f7feaeee 100644 --- a/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h +++ b/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h @@ -51,7 +51,7 @@ private: memset( &m_data.name[0], 0, sizeof( m_data.name ) ); - sprintf( &m_data.name[0], player->getName().c_str() ); + strcpy( &m_data.name[0], player->getName().c_str() ); memcpy( m_data.aetheryte, player->getAetheryteArray(), sizeof ( m_data.aetheryte ) ); diff --git a/src/tools/quest_parser/main.cpp b/src/tools/quest_parser/main.cpp index ff5bc70b..acd644ef 100644 --- a/src/tools/quest_parser/main.cpp +++ b/src/tools/quest_parser/main.cpp @@ -303,7 +303,11 @@ int main() outputFile1.write(§ion[0], section.size()); outputFile1.close(); std::string command= std::string("java -jar unluac_2015_06_13.jar ") + "generated/" + questInfo->name_intern + ".luab" + ">> " + "generated/" + questInfo->name_intern + ".lua"; - system(command.c_str()); + if ( system( command.c_str() ) == -1 ) + { + g_log.error( "Error executing java command:\n" + command + "\nerrno: " + std::strerror( errno ) ); + return errno; + } for( ; ; ) { From 41579d3c6f07269c3914e0ca4997b4fa4cab1033 Mon Sep 17 00:00:00 2001 From: Tahir Akhlaq Date: Fri, 3 Nov 2017 20:22:11 +0000 Subject: [PATCH 4/7] added STANDALONE compile flag for pcb_reader which doesnt require boost or sapphire dependencies --- src/tools/pcb_reader/README.md | 24 +++++++++++ src/tools/pcb_reader/main.cpp | 74 ++++++++++++++++++++++++++++------ 2 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 src/tools/pcb_reader/README.md diff --git a/src/tools/pcb_reader/README.md b/src/tools/pcb_reader/README.md new file mode 100644 index 00000000..ec422bd4 --- /dev/null +++ b/src/tools/pcb_reader/README.md @@ -0,0 +1,24 @@ +collision data exporter for sapphire + +compile with STANDALONE defined to compile without boost and sapphire dependencies + +usage: +- regular + - compile with root sapphire dir cmakelists + - sapphire/src/tools/bin/pcb_reader2 "" +- standalone + - compile main.cpp with STANDALONE defined in build arg + - download ffxivexplorer + - ffxivexplorer > path/to/ffxiv's/game/sqpack/ffxiv/020000.dat + - ctrl click the following: + - `bg/ffxiv/[REGION]/common/collision` + - `bg/ffxiv/[REGION]/[dun|fld|twn|etc..]/common/collision/` + - `bg/ffxiv/[REGION]/[dun|fld|twn|etc..]/collision/` + - `bg/ffxiv/region/shared/[for_bg|for_hou]/` + - `bg/ffxiv/[REGION]/[dun|fld|twn|etc..]/ZONE/level/` + - `bg/ffxiv/[REGION]/[dun|fld|twn|etc..]/ZONE/collision/` + - `bgcommon/world/sys/shared/for_bg/` + and `File > Export Raw` to pcb_reader exe dir (common and shared files are optional but you will be missing a lot of objects if you skip them) + - note: at this time ffxivexplorer is still missing some hashes, though any tool which can export the exds should work fine + - main "" + diff --git a/src/tools/pcb_reader/main.cpp b/src/tools/pcb_reader/main.cpp index 647d08e5..381c1c6e 100644 --- a/src/tools/pcb_reader/main.cpp +++ b/src/tools/pcb_reader/main.cpp @@ -6,15 +6,19 @@ #include "lgb.h" #include "sgb.h" +#ifndef STANDALONE #include #include #include #include #include #include +#include +#else +#include +#endif #include -#include #include using namespace std::chrono_literals; @@ -117,6 +121,24 @@ std::string zoneNameToPath( const std::string& name ) return ret; } +void readFileToBuffer( const std::string& path, std::vector< char >& buf ) +{ + auto inFile = std::ifstream( path, std::ios::binary ); + if( inFile.good() ) + { + inFile.seekg( 0, inFile.end ); + int32_t fileSize = inFile.tellg(); + buf.resize( fileSize ); + inFile.seekg( 0, inFile.beg ); + inFile.read( &buf[0], fileSize ); + inFile.close(); + } + else + { + throw std::runtime_error( "Unable to open " + path ); + } +} + int main( int argc, char* argv[] ) { auto startTime = std::chrono::system_clock::now(); @@ -136,21 +158,35 @@ int main( int argc, char* argv[] ) try { + std::string listPcbPath( "bg/ffxiv/" + zonePath + "/collision/list.pcb" ); + std::string bgLgbPath( "bg/ffxiv/" + zonePath + "/level/bg.lgb" ); + std::string collisionFilePath = "bg/ffxiv/" + zonePath + "/collision/"; + std::vector< char > section; + std::vector< char > section1; + + #ifndef STANDALONE xiv::dat::GameData data1( gamePath ); xiv::exd::ExdData eData( data1 ); const xiv::dat::Cat& test = data1.get_category( "bg" ); - auto test_file = data1.get_file( "bg/ffxiv/" + zonePath + "/level/bg.lgb" ); - auto section = test_file->access_data_sections().at( 0 ); - int32_t list_offset = *(uint32_t*)§ion[0x18]; - int32_t size = *(uint32_t*)§ion[4]; + auto test_file = data1.get_file( bgLgbPath ); + section = test_file->access_data_sections().at( 0 ); + + auto test_file1 = data1.get_file( listPcbPath ); + section1 = test_file1->access_data_sections().at( 0 ); + #else + { + readFileToBuffer( bgLgbPath, section ); + readFileToBuffer( listPcbPath, section1 ); + } + #endif + + int32_t list_offset = *( uint32_t* )§ion[0x18]; + int32_t size = *( uint32_t* )§ion[4]; std::vector stringList; - auto test_file1 = data1.get_file( "bg/ffxiv/" + zonePath + "/collision/list.pcb" ); - auto section1 = test_file1->access_data_sections().at( 0 ); - std::string path = "bg/ffxiv/" + zonePath + "/collision/"; uint32_t offset1 = 0x20; for( ; ; ) { @@ -158,7 +194,7 @@ int main( int argc, char* argv[] ) uint16_t trId = *(uint16_t*)§ion1[offset1]; char someString[200]; - sprintf( someString, "%str%04d.pcb", path.c_str(), trId ); + sprintf( someString, "%str%04d.pcb", collisionFilePath.c_str(), trId ); stringList.push_back( std::string( someString ) ); //std::cout << someString << "\n"; offset1 += 0x20; @@ -198,11 +234,17 @@ int main( int argc, char* argv[] ) { try { + char* dataSection = nullptr; //std::cout << fileName << " "; + #ifndef STANDALONE auto file = data1.get_file( fileName ); auto sections = file->get_data_sections(); - auto dataSection = §ions.at( 0 )[0]; - + dataSection = §ions.at( 0 )[0]; + #else + std::vector< char > buf; + readFileToBuffer( fileName, buf ); + dataSection = &buf[0]; + #endif //std::cout << sections.size() << "\n"; uint32_t offset = 0; @@ -244,9 +286,17 @@ int main( int argc, char* argv[] ) SGB_FILE sgbFile; try { + char* dataSection = nullptr; + //std::cout << fileName << " "; + #ifndef STANDALONE auto file = data1.get_file( fileName ); auto sections = file->get_data_sections(); - auto dataSection = §ions.at( 0 )[0]; + dataSection = §ions.at( 0 )[0]; + #else + std::vector< char > buf; + readFileToBuffer( fileName, buf ); + dataSection = &buf[0]; + #endif sgbFile = SGB_FILE( &dataSection[0] ); sgbFiles.insert( std::make_pair( fileName, sgbFile ) ); return true; From 466a9cc926838c31529fa96dcf90e81c4c847016 Mon Sep 17 00:00:00 2001 From: Tahir Akhlaq Date: Sat, 4 Nov 2017 08:13:35 +0000 Subject: [PATCH 5/7] fix pcb_reader linux build, changed line endings --- src/tools/pcb_reader/main.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/tools/pcb_reader/main.cpp b/src/tools/pcb_reader/main.cpp index 381c1c6e..783df6a9 100644 --- a/src/tools/pcb_reader/main.cpp +++ b/src/tools/pcb_reader/main.cpp @@ -1,6 +1,9 @@ #include #include #include +#include +#include +#include #include "pcb.h" #include "lgb.h" @@ -13,14 +16,9 @@ #include #include #include -#include -#else -#include +//#include #endif -#include -#include - using namespace std::chrono_literals; struct face From a20d5f594678a3e034ce2fb3d105f07dda8210e9 Mon Sep 17 00:00:00 2001 From: Tahir Akhlaq Date: Sat, 4 Nov 2017 10:03:46 +0000 Subject: [PATCH 6/7] clean up some style issues --- src/tools/pcb_reader/main.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/tools/pcb_reader/main.cpp b/src/tools/pcb_reader/main.cpp index 783df6a9..9d5bb22a 100644 --- a/src/tools/pcb_reader/main.cpp +++ b/src/tools/pcb_reader/main.cpp @@ -88,7 +88,7 @@ std::string zoneNameToPath( const std::string& name ) char region = name[1]; char type = name[2]; char zone = name[3]; - static std::map teriMap + static std::map< char, std::string > teriMap { { 'r', "roc" }, { 'w', "wil" }, @@ -100,7 +100,7 @@ std::string zoneNameToPath( const std::string& name ) { 'z', "zon" } }; - static std::map typeMap + static std::map< char, std::string > typeMap { { 'f', "fld" }, { 't', "twn" }, @@ -158,7 +158,7 @@ int main( int argc, char* argv[] ) { std::string listPcbPath( "bg/ffxiv/" + zonePath + "/collision/list.pcb" ); std::string bgLgbPath( "bg/ffxiv/" + zonePath + "/level/bg.lgb" ); - std::string collisionFilePath = "bg/ffxiv/" + zonePath + "/collision/"; + std::string collisionFilePath( "bg/ffxiv/" + zonePath + "/collision/" ); std::vector< char > section; std::vector< char > section1; @@ -183,7 +183,7 @@ int main( int argc, char* argv[] ) int32_t list_offset = *( uint32_t* )§ion[0x18]; int32_t size = *( uint32_t* )§ion[4]; - std::vector stringList; + std::vector< std::string > stringList; uint32_t offset1 = 0x20; for( ; ; ) @@ -225,9 +225,9 @@ int main( int argc, char* argv[] ) fp_out = fopen( ( zoneName + ".obj" ).c_str(), "ab+" ); if( fp_out ) { - std::map pcbFiles; - std::map sgbFiles; - std::map objCount; + std::map< std::string, PCB_FILE > pcbFiles; + std::map< std::string, SGB_FILE > sgbFiles; + std::map< std::string, uint32_t > objCount; auto loadPcbFile = [&]( const std::string& fileName ) -> bool { try @@ -404,8 +404,8 @@ int main( int argc, char* argv[] ) totalGroups++; for( const auto& pEntry : group.entries ) { - auto pGimmick = dynamic_cast( pEntry.get() ); - auto pBgParts = dynamic_cast( pEntry.get() ); + auto pGimmick = dynamic_cast< LGB_GIMMICK_ENTRY* >( pEntry.get() ); + auto pBgParts = dynamic_cast< LGB_BGPARTS_ENTRY* >( pEntry.get() ); std::string fileName( "" ); fileName.resize( 256 ); @@ -458,7 +458,7 @@ int main( int argc, char* argv[] ) { for( const auto& pEntry : group.entries ) { - auto pModel = dynamic_cast( pEntry.get() ); + auto pModel = dynamic_cast< SGB_MODEL_ENTRY* >( pEntry.get() ); fileName = pModel->collisionFileName; writeOutput( fileName, &pGimmick->header.scale, &pGimmick->header.rotation, &pGimmick->header.translation, pModel ); } @@ -471,7 +471,7 @@ int main( int argc, char* argv[] ) std::cout << "Total Groups " << totalGroups << " Total entries " << totalGroupEntries << "\n"; } std::cout << "Finished exporting " << zoneName << " in " << - std::chrono::duration_cast( std::chrono::system_clock::now() - startTime ).count() << " seconds\n"; + std::chrono::duration_cast< std::chrono::seconds >( std::chrono::system_clock::now() - startTime ).count() << " seconds\n"; } catch( std::exception& e ) { From ddbdf5a4090baa7a8792e028f7fa2b7b293717ea Mon Sep 17 00:00:00 2001 From: Perize Date: Mon, 6 Nov 2017 23:41:04 +0900 Subject: [PATCH 7/7] Add a struct def of job gauge --- src/servers/Server_Common/Network/PacketDef/Ipcs.h | 1 + .../Server_Common/Network/PacketDef/Zone/ServerZoneDef.h | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/servers/Server_Common/Network/PacketDef/Ipcs.h b/src/servers/Server_Common/Network/PacketDef/Ipcs.h index be752a6c..3ffcf95b 100644 --- a/src/servers/Server_Common/Network/PacketDef/Ipcs.h +++ b/src/servers/Server_Common/Network/PacketDef/Ipcs.h @@ -134,6 +134,7 @@ namespace Packets { IPCTYPE_UNK_320 = 0x0207, // updated 4.1 IPCTYPE_UNK_322 = 0x0209, // updated 4.1 + ActorGauge = 0x249 }; // TODO: Include structures for the individual packet segment types diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index d5cb7675..49628de9 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1314,6 +1314,12 @@ struct FFXIVIpcMount : FFXIVIpcBasePacket }; +struct FFXIVIpcActorGauge : FFXIVIpcBasePacket +{ + uint8_t classJobId; + uint8_t data[15]; // depends on classJobId +}; + } /* Server */ } /* Packets */ } /* Network */