mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 06:27:45 +00:00
Merge https://github.com/SapphireMordred/Sapphire into SQL_REWRITE_OWN
This commit is contained in:
commit
692f5fbf2f
15 changed files with 130 additions and 34 deletions
|
@ -136,6 +136,7 @@ namespace Packets {
|
||||||
IPCTYPE_UNK_320 = 0x0207, // updated 4.1
|
IPCTYPE_UNK_320 = 0x0207, // updated 4.1
|
||||||
IPCTYPE_UNK_322 = 0x0209, // updated 4.1
|
IPCTYPE_UNK_322 = 0x0209, // updated 4.1
|
||||||
|
|
||||||
|
ActorGauge = 0x249
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: Include structures for the individual packet segment types
|
// TODO: Include structures for the individual packet segment types
|
||||||
|
|
|
@ -1314,6 +1314,12 @@ struct FFXIVIpcMount : FFXIVIpcBasePacket<Mount>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct FFXIVIpcActorGauge : FFXIVIpcBasePacket<ActorGauge>
|
||||||
|
{
|
||||||
|
uint8_t classJobId;
|
||||||
|
uint8_t data[15]; // depends on classJobId
|
||||||
|
};
|
||||||
|
|
||||||
} /* Server */
|
} /* Server */
|
||||||
} /* Packets */
|
} /* Packets */
|
||||||
} /* Network */
|
} /* Network */
|
||||||
|
|
|
@ -18,6 +18,7 @@ set_target_properties(server_lobby PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
||||||
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
||||||
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${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)
|
if (UNIX)
|
||||||
|
|
|
@ -139,7 +139,7 @@ void Core::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet, ui
|
||||||
serverListPacket.data().server[0].id = g_serverLobby.getConfig()->getValue<uint16_t>( "Settings.Parameters.WorldID", 1 );
|
serverListPacket.data().server[0].id = g_serverLobby.getConfig()->getValue<uint16_t>( "Settings.Parameters.WorldID", 1 );
|
||||||
serverListPacket.data().server[0].index = 0;
|
serverListPacket.data().server[0].index = 0;
|
||||||
serverListPacket.data().final = 1;
|
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 );
|
pRP.addPacket( serverListPacket );
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,17 @@ set_target_properties(server_rest PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
||||||
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
||||||
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${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)
|
if (UNIX)
|
||||||
target_link_libraries (server_rest Common xivdat pthread mysqlclient mysqlConnector dl z)
|
target_link_libraries (server_rest Common xivdat pthread mysqlclient mysqlConnector dl z)
|
||||||
else()
|
else()
|
||||||
|
# ignore unchecked iterators warnings from msvc
|
||||||
|
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
|
||||||
|
|
||||||
target_link_libraries (server_rest Common xivdat libmysql mysqlConnector zlib1)
|
target_link_libraries (server_rest Common xivdat libmysql mysqlConnector zlib1)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries( server_rest ${Boost_LIBRARIES} ${Boost_LIBRARIES} )
|
target_link_libraries( server_rest ${Boost_LIBRARIES} ${Boost_LIBRARIES} )
|
||||||
|
|
|
@ -33,6 +33,7 @@ set_target_properties(server_zone PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
||||||
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/"
|
||||||
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${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)
|
if (UNIX)
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
|
|
||||||
#include <Server_Common/Database/DatabaseDef.h>
|
#include <Server_Common/Database/DatabaseDef.h>
|
||||||
|
|
||||||
|
#include <cinttypes>
|
||||||
|
|
||||||
extern Core::Scripting::ScriptManager g_scriptMgr;
|
extern Core::Scripting::ScriptManager g_scriptMgr;
|
||||||
extern Core::Data::ExdData g_exdData;
|
extern Core::Data::ExdData g_exdData;
|
||||||
extern Core::Logger g_log;
|
extern Core::Logger g_log;
|
||||||
|
@ -256,7 +258,7 @@ void Core::DebugCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlaye
|
||||||
else if ( subCommand == "eorzeatime" )
|
else if ( subCommand == "eorzeatime" )
|
||||||
{
|
{
|
||||||
uint64_t timestamp;
|
uint64_t timestamp;
|
||||||
sscanf( params.c_str(), "%llu", ×tamp );
|
sscanf( params.c_str(), "%" SCNu64, ×tamp );
|
||||||
|
|
||||||
pPlayer->setEorzeaTimeOffset( timestamp );
|
pPlayer->setEorzeaTimeOffset( timestamp );
|
||||||
pPlayer->sendNotice( "Eorzea time offset: " + std::to_string( timestamp ) );
|
pPlayer->sendNotice( "Eorzea time offset: " + std::to_string( timestamp ) );
|
||||||
|
|
|
@ -328,7 +328,11 @@ void Core::Network::GameConnection::injectPacket( const std::string& packetpath,
|
||||||
fseek( fp, 0, SEEK_END );
|
fseek( fp, 0, SEEK_END );
|
||||||
int32_t size = ftell( fp );
|
int32_t size = ftell( fp );
|
||||||
rewind( 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 );
|
fclose( fp );
|
||||||
|
|
||||||
// cycle through the packet entries and queue each one
|
// cycle through the packet entries and queue each one
|
||||||
|
|
|
@ -333,7 +333,7 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
|
||||||
GamePacketNew< FFXIVIpcSetSearchInfo, ServerZoneIpcType > searchInfoPacket( targetPlayer->getId() );
|
GamePacketNew< FFXIVIpcSetSearchInfo, ServerZoneIpcType > searchInfoPacket( targetPlayer->getId() );
|
||||||
searchInfoPacket.data().onlineStatusFlags = param1;
|
searchInfoPacket.data().onlineStatusFlags = param1;
|
||||||
searchInfoPacket.data().selectRegion = targetPlayer->getSearchSelectRegion();
|
searchInfoPacket.data().selectRegion = targetPlayer->getSearchSelectRegion();
|
||||||
sprintf( searchInfoPacket.data().searchMessage, targetPlayer->getSearchMessage() );
|
strcpy( searchInfoPacket.data().searchMessage, targetPlayer->getSearchMessage() );
|
||||||
targetPlayer->queuePacket( searchInfoPacket );
|
targetPlayer->queuePacket( searchInfoPacket );
|
||||||
|
|
||||||
targetPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatusIcon,
|
targetPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatusIcon,
|
||||||
|
|
|
@ -84,7 +84,7 @@ void Core::Network::GameConnection::setSearchInfoHandler( const Packets::GamePac
|
||||||
GamePacketNew< FFXIVIpcSetSearchInfo, ServerZoneIpcType > searchInfoPacket( pPlayer->getId() );
|
GamePacketNew< FFXIVIpcSetSearchInfo, ServerZoneIpcType > searchInfoPacket( pPlayer->getId() );
|
||||||
searchInfoPacket.data().onlineStatusFlags = status;
|
searchInfoPacket.data().onlineStatusFlags = status;
|
||||||
searchInfoPacket.data().selectRegion = pPlayer->getSearchSelectRegion();
|
searchInfoPacket.data().selectRegion = pPlayer->getSearchSelectRegion();
|
||||||
sprintf( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() );
|
strcpy( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() );
|
||||||
queueOutPacket( searchInfoPacket );
|
queueOutPacket( searchInfoPacket );
|
||||||
|
|
||||||
pPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatusIcon,
|
pPlayer->sendToInRangeSet( ActorControlPacket142( pPlayer->getId(), SetStatusIcon,
|
||||||
|
@ -98,7 +98,7 @@ void Core::Network::GameConnection::reqSearchInfoHandler( const Packets::GamePac
|
||||||
GamePacketNew< FFXIVIpcInitSearchInfo, ServerZoneIpcType > searchInfoPacket( pPlayer->getId() );
|
GamePacketNew< FFXIVIpcInitSearchInfo, ServerZoneIpcType > searchInfoPacket( pPlayer->getId() );
|
||||||
searchInfoPacket.data().onlineStatusFlags = pPlayer->getOnlineStatusMask();
|
searchInfoPacket.data().onlineStatusFlags = pPlayer->getOnlineStatusMask();
|
||||||
searchInfoPacket.data().selectRegion = pPlayer->getSearchSelectRegion();
|
searchInfoPacket.data().selectRegion = pPlayer->getSearchSelectRegion();
|
||||||
sprintf( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() );
|
strcpy( searchInfoPacket.data().searchMessage, pPlayer->getSearchMessage() );
|
||||||
queueOutPacket( searchInfoPacket );
|
queueOutPacket( searchInfoPacket );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ private:
|
||||||
|
|
||||||
memset( &m_data.name[0], 0, sizeof( m_data.name ) );
|
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 ) );
|
memcpy( m_data.aetheryte, player->getAetheryteArray(), sizeof ( m_data.aetheryte ) );
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,7 @@ void Core::Session::update()
|
||||||
m_pZoneConnection->processOutQueue();
|
m_pZoneConnection->processOutQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_pZoneConnection )
|
if( m_pChatConnection )
|
||||||
{
|
{
|
||||||
m_pChatConnection->processInQueue();
|
m_pChatConnection->processInQueue();
|
||||||
m_pChatConnection->processOutQueue();
|
m_pChatConnection->processOutQueue();
|
||||||
|
|
24
src/tools/pcb_reader/README.md
Normal file
24
src/tools/pcb_reader/README.md
Normal file
|
@ -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 "<path/to/game/sqpack/ffxiv>" <territory>
|
||||||
|
- standalone
|
||||||
|
- compile main.cpp with STANDALONE defined in build arg
|
||||||
|
- download ffxivexplorer <http://ffxivexplorer.fragmenterworks.com/>
|
||||||
|
- 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 "" <territory>
|
||||||
|
|
|
@ -1,21 +1,23 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <chrono>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
#include "pcb.h"
|
#include "pcb.h"
|
||||||
#include "lgb.h"
|
#include "lgb.h"
|
||||||
#include "sgb.h"
|
#include "sgb.h"
|
||||||
|
|
||||||
|
#ifndef STANDALONE
|
||||||
#include <GameData.h>
|
#include <GameData.h>
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <DatCat.h>
|
#include <DatCat.h>
|
||||||
#include <ExdData.h>
|
#include <ExdData.h>
|
||||||
#include <ExdCat.h>
|
#include <ExdCat.h>
|
||||||
#include <Exd.h>
|
#include <Exd.h>
|
||||||
|
//#include <boost/algorithm/string.hpp>
|
||||||
#include <iostream>
|
#endif
|
||||||
#include <boost/algorithm/string.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
|
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
|
@ -117,6 +119,24 @@ std::string zoneNameToPath( const std::string& name )
|
||||||
return ret;
|
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[] )
|
int main( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
auto startTime = std::chrono::system_clock::now();
|
auto startTime = std::chrono::system_clock::now();
|
||||||
|
@ -136,21 +156,35 @@ int main( int argc, char* argv[] )
|
||||||
|
|
||||||
try
|
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::dat::GameData data1( gamePath );
|
||||||
xiv::exd::ExdData eData( data1 );
|
xiv::exd::ExdData eData( data1 );
|
||||||
|
|
||||||
const xiv::dat::Cat& test = data1.get_category( "bg" );
|
const xiv::dat::Cat& test = data1.get_category( "bg" );
|
||||||
|
|
||||||
auto test_file = data1.get_file( "bg/ffxiv/" + zonePath + "/level/bg.lgb" );
|
auto test_file = data1.get_file( bgLgbPath );
|
||||||
auto section = test_file->access_data_sections().at( 0 );
|
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 list_offset = *( uint32_t* )§ion[0x18];
|
||||||
int32_t size = *( uint32_t* )§ion[4];
|
int32_t size = *( uint32_t* )§ion[4];
|
||||||
|
|
||||||
std::vector< std::string > stringList;
|
std::vector< std::string > 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;
|
uint32_t offset1 = 0x20;
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
|
@ -158,7 +192,7 @@ int main( int argc, char* argv[] )
|
||||||
uint16_t trId = *(uint16_t*)§ion1[offset1];
|
uint16_t trId = *(uint16_t*)§ion1[offset1];
|
||||||
|
|
||||||
char someString[200];
|
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 ) );
|
stringList.push_back( std::string( someString ) );
|
||||||
//std::cout << someString << "\n";
|
//std::cout << someString << "\n";
|
||||||
offset1 += 0x20;
|
offset1 += 0x20;
|
||||||
|
@ -198,11 +232,17 @@ int main( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
char* dataSection = nullptr;
|
||||||
//std::cout << fileName << " ";
|
//std::cout << fileName << " ";
|
||||||
|
#ifndef STANDALONE
|
||||||
auto file = data1.get_file( fileName );
|
auto file = data1.get_file( fileName );
|
||||||
auto sections = file->get_data_sections();
|
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";
|
//std::cout << sections.size() << "\n";
|
||||||
|
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
|
@ -244,9 +284,17 @@ int main( int argc, char* argv[] )
|
||||||
SGB_FILE sgbFile;
|
SGB_FILE sgbFile;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
char* dataSection = nullptr;
|
||||||
|
//std::cout << fileName << " ";
|
||||||
|
#ifndef STANDALONE
|
||||||
auto file = data1.get_file( fileName );
|
auto file = data1.get_file( fileName );
|
||||||
auto sections = file->get_data_sections();
|
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] );
|
sgbFile = SGB_FILE( &dataSection[0] );
|
||||||
sgbFiles.insert( std::make_pair( fileName, sgbFile ) );
|
sgbFiles.insert( std::make_pair( fileName, sgbFile ) );
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -303,7 +303,11 @@ int main()
|
||||||
outputFile1.write(§ion[0], section.size());
|
outputFile1.write(§ion[0], section.size());
|
||||||
outputFile1.close();
|
outputFile1.close();
|
||||||
std::string command= std::string("java -jar unluac_2015_06_13.jar ") + "generated/" + questInfo->name_intern + ".luab" + ">> " + "generated/" + questInfo->name_intern + ".lua";
|
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( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue