DragonNest/Client/DnTableVerifier/DnTableVerifier.cpp

269 lines
12 KiB
C++
Raw Permalink Normal View History

// DnTableVerifier.cpp : Defines the entry point for the console application.
//
// R:\GameRes KOR SkillTable --gtest_filter=skill_data_test.* --gtest_output="xml:result.xml"
#include "stdafx.h"
#include "EtActionCoreMng.h"
wstring g_strResourcePath;
string g_strResourcePathA;
map<wstring, string> g_mapExtFolderPath;
wstring g_strNation;
string g_strNationExtFolder;
string g_strTableName;
extern CEtActionCoreMng g_ActionCoreMng;
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
void GatherConcernedExt( /*IN*/ const char* pTableFileFullName, /*IN OUT*/ vector<string>& vlFilePathsToVerify, /*IN OUT*/ string& strTableFullPath )
{
// <20><20><><EFBFBD><EFBFBD> <20><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ҷ<EFBFBD><D2B7><EFBFBD><E9BFA9>
// Ư<><C6AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>̰<EFBFBD> <20>ű<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȴ<EFBFBD>.
// _ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD> id <20>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
string strNationExtFolder = g_strNationExtFolder;
strTableFullPath.clear();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ext <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// <20><><EFBFBD>ҽ<EFBFBD> <20>Ŵ<EFBFBD><C5B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD>.
//map<wstring, string>::iterator iter = g_mapExtFolderPath.begin();
//for( iter; iter != g_mapExtFolderPath.end(); ++iter )
// CEtResourceMng::GetInstance().AddResourcePath( iter->second.c_str() );
//vector<CFileNameString> vlBaseFileList;
//CEtResourceMng::GetInstance().FindFileListInFolder( g_mapExtFolderPath[ L"KOR" ].c_str(), "*.ext", vlBaseFileList );
vector<CFileNameString> vlTargetNationFileList;
CEtResourceMng::GetInstance().FindFileListInFolder( strNationExtFolder.c_str(), "*.dnt", vlTargetNationFileList );
char acTableFileName[ MAX_PATH ] = { 0 };
_GetFileName( acTableFileName, _countof(acTableFileName), pTableFileFullName );
char acFilePrefixToVerify[ MAX_PATH ] = { 0 };
_GetFileName( acFilePrefixToVerify, _countof(acFilePrefixToVerify), pTableFileFullName );
_strlwr_s( acFilePrefixToVerify );
int nLength = (int)strlen(acFilePrefixToVerify);
acFilePrefixToVerify[nLength] = '_';
acFilePrefixToVerify[nLength+1] = 0;
vlFilePathsToVerify.clear();
vector<string> vlFileNamesToVerify;
// <20>켱 Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> Ǯ <20>н<EFBFBD><D0BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
for( DWORD i = 0; i<vlTargetNationFileList.size(); i++ )
{
char acTargetNationFileName[ MAX_PATH ] = { 0 };
_GetFileName( acTargetNationFileName, _countof(acTargetNationFileName), vlTargetNationFileList[ i ].c_str() );
_strlwr_s( acTargetNationFileName );
string strTargetNationFileName( acTargetNationFileName );
string::size_type iPrefixPos = strTargetNationFileName.find_first_of( '_' );
string strTargetNationFilePrefix;
if( string::npos != iPrefixPos )
strTargetNationFilePrefix = strTargetNationFileName.substr( 0, iPrefixPos+1 );
if( strTargetNationFilePrefix == acFilePrefixToVerify )
//if( strstr( acTargetNationFileName, acFilePrefixToVerify ) )
{
CFileNameString szFullPath;
szFullPath = CEtResourceMng::GetInstance().GetFullName( vlTargetNationFileList[i].c_str() );
vlFilePathsToVerify.push_back( szFullPath.c_str() );
vlFileNamesToVerify.push_back( acTargetNationFileName );
}
if( strTableFullPath.empty() && (0 == _stricmp( acTargetNationFileName, acTableFileName )) )
{
CFileNameString szFullPath;
szFullPath = CEtResourceMng::GetInstance().GetFullName( pTableFileFullName );
strTableFullPath.assign( szFullPath.c_str() );
}
}
//// <20><><EFBFBD>̽<EFBFBD> <20><><EFBFBD>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>.
//// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8>̶<EFBFBD><CCB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD> <20><EFBFBD>̹Ƿ<CCB9> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
//for( DWORD i = 0; i < vlBaseFileList.size(); ++i )
//{
// char acBaseFileName[ MAX_PATH ] = { 0 };
// _GetFileName( acBaseFileName, vlBaseFileList[ i ].c_str() );
// _strlwr_s( acBaseFileName );
// if( strstr( acBaseFileName, acFilePrefixToVerify ) && strcmp( acBaseFileName, acFilePrefixToVerify ) )
// {
// vector<string>::iterator iter = find( vlFileNamesToVerify.begin(), vlFileNamesToVerify.end(), acBaseFileName );
// if( iter == vlFileNamesToVerify.end() )
// {
// CFileNameString szFullPath;
// szFullPath = CEtResourceMng::GetInstance().GetFullName( vlBaseFileList[i].c_str() );
// vlFilePathsToVerify.push_back( szFullPath.c_str() );
// }
// }
// if( strTableFullPath.empty() && (0 == _stricmp( acBaseFileName, acTableFileName )) )
// {
// CFileNameString szFullPath;
// szFullPath = CEtResourceMng::GetInstance().GetFullName( pTableFileFullName );
// strTableFullPath.assign( szFullPath.c_str() );
// }
//}
//// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
//iter = g_mapExtFolderPath.begin();
//for( iter; iter != g_mapExtFolderPath.end(); ++iter )
//{
// if( iter->first != g_strNation )
// CEtResourceMng::GetInstance().RemoveResourcePath( iter->second.c_str() );
//}
}
DNTableFileFormat* LoadExtFile( const char* pTableFileFullName, char* pInverseSearchLabelFilter/* = NULL*/ )
{
DNTableFileFormat* pTable = NULL;
vector<string> vlFileSeriesFilePaths;
string strTableFullPath;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA>̶<EFBFBD><CCB6><EFBFBD> ItemTable_Quest, ItemTable_Event, ItemTable_Equipment, ItemTable_Cash <20>ø<EFBFBD><C3B8><EFBFBD><EEBAB0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20>ε<EFBFBD> <20><>.
GatherConcernedExt( pTableFileFullName, vlFileSeriesFilePaths, strTableFullPath );
//_ASSERT( false == strTableFullPath.empty() );
pTable = new DNTableFileFormat;
pTable->Load( strTableFullPath.c_str() );
// dnt <20><><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƾ<EFBFBD> <20>ϴ°<CFB4> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><>. (GetItemIDListFromField() <20>Լ<EFBFBD><D4BC><EFBFBD> ã<><C3A3> <20><>)
pTable->SetGenerationInverseLabel( pInverseSearchLabelFilter );
for( int i = 0; i < (int)vlFileSeriesFilePaths.size(); ++i )
{
pTable->Load( vlFileSeriesFilePaths.at(i).c_str(), false );
}
return pTable;
}
// <20>۷ι<DBB7> ȯ<><C8AF> <20><><EFBFBD><EFBFBD>
class gtest_global_environment : public ::testing::Environment
{
virtual void SetUp()
{
CEtResourceMng::CreateInstance();
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\SharedEffect" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource\\Prop", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource\\Envi" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource\\Sound", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Char", true );
char acBuffer[ MAX_PATH ] = { 0 };
WideCharToMultiByte( CP_ACP, NULL, g_strResourcePath.c_str(), (int)_tcslen(g_strResourcePath.c_str()),
acBuffer, sizeof(acBuffer), NULL, NULL );
string strResourcePath( acBuffer );
//map<wstring, string>::iterator iter = g_mapExtFolderPath.begin();
//for( iter; iter != g_mapExtFolderPath.end(); ++iter )
// CEtResourceMng::GetInstance().AddResourcePath( iter->second.c_str() );
CEtResourceMng::GetInstance().AddResourcePath( strResourcePath+"\\Resource\\Char", true );
CEtResourceMng::GetInstance().AddResourcePath( g_strNationExtFolder.c_str() );
//CEtResourceMng::GetInstance().AddResourcePathByCodePage( "R:\\GameRes\\Resource\\Ext" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Weapon" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Item", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Sound", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Particle" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\UI", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Effect" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\fonts" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Script", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Dmv" );
//CEtResourceMng::GetInstance().AddResourcePathByCodePage( "R:\\GameRes\\Resource\\Npc" );
//CEtResourceMng::GetInstance().AddResourcePathByCodePage( "R:\\GameRes\\Resource\\Quest" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\StateEffect" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\UIString" );
g_ActionCoreMng.Initialize();
};
};
// <20><><EFBFBD><EFBFBD> <20>׽<EFBFBD>Ʈ <20><> Verifier <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
// R:\GameRes JPN GachaJP --gtest_filter=gachapon_test.* --gtest_output="xml:result.xml"
// [<5B><><EFBFBD>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>] [<5B>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD><EFBFBD>] [<5B>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD>ϸ<EFBFBD>] [gtest <20><><EFBFBD>ڵ<EFBFBD>]
// [<5B>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD>ϸ<EFBFBD>] <20><> multitable id duplicate test <20><> <20><><EFBFBD><20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20>׽<EFBFBD>Ʈ <20>Ѵ<EFBFBD>. ; <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20>Է¹޴´<DEB4>. (aaa;bbb ...)
// R:\GameRes MAIN aaa;ItemTable --gtest_filter=multitable_id_duplicate_test.* --gtest_output="xml:result.xml"
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݿ<EFBFBD><DDBF><EFBFBD> <20>̽<EFBFBD> #26504
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> id <20>ߺ<EFBFBD> <20>˻<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>׽<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>.
// R:\Gameres MAIN EnchantJewelTable;ItemCompoundGroupTable;ItemCompoundTable;ItemDropGroupTable;ItemDropTable;ItemTable;MonsterGroupTable;MonsterSkillTable;MonsterTable;PartsTable;PotentialJewelTable;PotentialTable;SetItemTable;SkillLevelTable;SkillTable;testtable;VehicleTable;WeaponTable --gtest_filter=*.* --gtest_output="xml:D:\testresult.xml
int _tmain(int argc, _TCHAR* argv[])
{
g_strResourcePath.assign( argv[ 1 ] );
char acBuffer[ MAX_PATH ] = { 0 };
WideCharToMultiByte( CP_ACP, NULL, g_strResourcePath.c_str(), (int)_tcslen(g_strResourcePath.c_str()),
acBuffer, sizeof(acBuffer), NULL, NULL );
g_strResourcePathA.assign( acBuffer );
g_mapExtFolderPath.insert( make_pair( L"MAIN", g_strResourcePathA+"\\Resource\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"KOR", g_strResourcePathA+"\\Resource_KOR\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"JPN", g_strResourcePathA+"\\Resource_JPN\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"CHN", g_strResourcePathA+"\\Resource_CHN\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"USA", g_strResourcePathA+"\\Resource_USA\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"TWN", g_strResourcePathA+"\\Resource_TWN\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"SIN", g_strResourcePathA+"\\Resource_SIN\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"THA", g_strResourcePathA+"\\Resource_THA\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"IDN", g_strResourcePathA+"\\Resource_IDN\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"RUS", g_strResourcePathA+"\\Resource_RUS\\Ext" ) );
g_mapExtFolderPath.insert( make_pair( L"EU", g_strResourcePathA+"\\Resource_EU\\Ext" ) );
// <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޾Ƽ<DEBE> <20>߶<EFBFBD><DFB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѱ<EFBFBD><D1B0><EFBFBD>.
map<wstring, string>::iterator iter = g_mapExtFolderPath.find( argv[ 2 ] );
if( g_mapExtFolderPath.end() != iter )
g_strNationExtFolder = iter->second;
else
{
_tprintf( _T("[DnTableVerifier] Invalid nation setting!! Running with korea resource path!!\n\n") );
g_strNationExtFolder = g_mapExtFolderPath[ L"KOR" ];
}
g_strNation = iter->first;
char* pTableName = acBuffer;
int iTableNameLength = (int)_tcslen(argv[ 3 ]);
bool bTableNameBufferAllocated = false;
if( sizeof(acBuffer) <= iTableNameLength )
{
pTableName = new char[ iTableNameLength+1 ];
bTableNameBufferAllocated = true;
}
SecureZeroMemory( pTableName, (iTableNameLength+1) );
WideCharToMultiByte( CP_ACP, NULL, argv[ 3 ], (int)_tcslen(argv[ 3 ]),
pTableName, iTableNameLength, NULL, NULL );
g_strTableName.assign( pTableName );
::testing::AddGlobalTestEnvironment( new gtest_global_environment );
printf( "[DnTableVerifier] Running with \"%s\" table folder\n", g_strNationExtFolder.c_str() );
::testing::InitGoogleTest( &argc, argv );
int iExitCode = RUN_ALL_TESTS();
g_ActionCoreMng.Finalize();
if( bTableNameBufferAllocated )
delete [] pTableName;
return iExitCode;
}