// 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 g_mapExtFolderPath; wstring g_strNation; string g_strNationExtFolder; string g_strTableName; extern CEtActionCoreMng g_ActionCoreMng; // ÇØ´ç ±¹°¡ Æú´õ ¾È¿¡¼­¸¸ °¡Á®¿Àµµ·Ï ±¸Çö»çÇ× º¯°æµÊ. void GatherConcernedExt( /*IN*/ const char* pTableFileFullName, /*IN OUT*/ vector& vlFilePathsToVerify, /*IN OUT*/ string& strTableFullPath ) { // ¿ì¼± ¸ÞÀÎ ¸®¼Ò½º¿¡ ÀÖ´Â Å×ÀÌºí ÆÄÀÏ ¸®½ºÆ®¿Í ÁöÁ¤µÈ ±¹°¡ Æú´õ¿¡ ÀÖ´Â ¸®½ºÆ®¸¦ ºÒ·¯µé¿©¼­ // ƯÁ¤ ±¹°¡ Æú´õ¿¡ ÀÖ´Â ÆÄÀÏÀÌ ¿ì¼±ÀÌ°í °Å±â ¾øÀ¸¸é ¸ÞÀÎ ¸®¼Ò½º¿¡ ÀÖ´Â ÆÄÀÏÀ» °¡Á®´Ù »ç¿ëÇÏ¸é µÈ´Ù. // _ ºÙÀº ³ª´²Áø ÆÄÀϸ¸ id Áߺ¹ °ËÁõ ´ë»óÀÌ´Ù. string strNationExtFolder = g_strNationExtFolder; strTableFullPath.clear(); // ÁöÁ¤µÈ ±¹°¡ÀÇ ext Æú´õ¸¸ »ç¿ëÇÑ´Ù. // ¸®¼Ò½º ¸Å´ÏÁ® ³»ºÎÀûÀ¸·Î ¸ÕÀú µî·ÏµÈ Æú´õ ±âÁØÀ¸·Î °Ë»öÇϵµ·Ï ±¸ÇöµÇ¾î ÀÖÀ½. //map::iterator iter = g_mapExtFolderPath.begin(); //for( iter; iter != g_mapExtFolderPath.end(); ++iter ) // CEtResourceMng::GetInstance().AddResourcePath( iter->second.c_str() ); //vector vlBaseFileList; //CEtResourceMng::GetInstance().FindFileListInFolder( g_mapExtFolderPath[ L"KOR" ].c_str(), "*.ext", vlBaseFileList ); vector 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 vlFileNamesToVerify; // ¿ì¼± Ÿ°Ù ±¹°¡ÀÇ Æú´õ¿¡¼­ ³ª´²Áø ÆÄÀϵéÀÇ Ç® ÆÐ½º¸¦ ÀüºÎ ¸ðÀº´Ù. for( DWORD i = 0; i::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() ); // } //} //// ¿ø»ó º¹±¸. //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 vlFileSeriesFilePaths; string strTableFullPath; // ¾ÆÀÌÅÛ Å×À̺íÀ̶ó¸é ItemTable_Quest, ItemTable_Event, ItemTable_Equipment, ItemTable_Cash ½Ã¸®Á·Î ¸ðµÎ ¸ð¾Æ¼­ ·Îµå µÊ. GatherConcernedExt( pTableFileFullName, vlFileSeriesFilePaths, strTableFullPath ); //_ASSERT( false == strTableFullPath.empty() ); pTable = new DNTableFileFormat; pTable->Load( strTableFullPath.c_str() ); // dnt Æ÷¸Ë¿¡¼­´Â ¿ªÀ¸·Î ã¾Æ¾ß ÇÏ´Â°É ³Ö¾îÁà¾ß ÇÔ. (GetItemIDListFromField() ÇÔ¼ö·Î ã´Â °Í) pTable->SetGenerationInverseLabel( pInverseSearchLabelFilter ); for( int i = 0; i < (int)vlFileSeriesFilePaths.size(); ++i ) { pTable->Load( vlFileSeriesFilePaths.at(i).c_str(), false ); } return pTable; } // ±Û·Î¹ú ȯ°æ ¼³Á¤ 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::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(); }; }; // ±¸±Û Å×½ºÆ® ¹× Verifier ÀÚüÀûÀ¸·Î ó¸®ÇÏ´Â ÀÎÀÚ ¹æ½ÄÀº ´ÙÀ½°ú °°À½. // R:\GameRes JPN GachaJP --gtest_filter=gachapon_test.* --gtest_output="xml:result.xml" // [¸®¼Ò½º Æú´õ] [°Ë»çÇÒ ±¹°¡] [°Ë»çÇÒ Å×ÀÌºí ÆÄÀϸí] [gtest ÀÎÀÚµé] // [°Ë»çÇÒ Å×ÀÌºí ÆÄÀϸí] Àº multitable id duplicate test ÀÎ °æ¿ì¿£ °ü·ÃµÈ Å×À̺íÀ» ¸ðµÎ ¸ð¾Æ¼­ Å×½ºÆ® ÇÑ´Ù. ; ¸¦ ±¸ºÐÀÚ·Î ¿©·¯ Å×À̺íÀ» ÀԷ¹޴´Ù. (aaa;bbb ...) // R:\GameRes MAIN aaa;ItemTable --gtest_filter=multitable_id_duplicate_test.* --gtest_output="xml:result.xml" // ¸¶Áö¸·À¸·Î ¹Ý¿µµÈ À̽´ #26504 // ¾ÆÀÌÅÛ Å×À̺í id Áߺ¹ °Ë»ç ¹× ¸ðµç Å×½ºÆ® ¼öÇà. // 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" ) ); // ÀÎÀÚ¿¡¼­ ±¹°¡ ¼³Á¤À» ¹Þ¾Æ¼­ Àß¶ó³½ ´ÙÀ½¿¡ ³Ñ°ÜÁÜ. map::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; }