#include "StdAfx.h" #include "gachapon_test.h" #include "DnCommonDef.h" DNTableFileFormat* gachapon_test::s_pItemTable = NULL; DNTableFileFormat* gachapon_test::s_pGachaTable = NULL; DNTableFileFormat* gachapon_test::s_pItemDropTable = NULL; DNTableFileFormat* gachapon_test::s_pPartsTable = NULL; #define ITEM_T gachapon_test::s_pItemTable #define GACHA_T gachapon_test::s_pGachaTable #define ITEMDROP_T gachapon_test::s_pItemDropTable #define PARTS_T gachapon_test::s_pPartsTable // ÇöÀç °¡Â÷Æù Å×ÀÌºí¿¡ Á¤ÀǵǾîÀÖ´Â ÆÄÃ÷ °¹¼ö const int NUM_GACHA_PARTS = 6; gachapon_test::gachapon_test(void) { } gachapon_test::~gachapon_test(void) { } void gachapon_test::SetUpTestCase( void ) { // ÁöÁ¤µÈ ±¹°¡ ¿ì¼±À¸·Î °Ë»öÇÏ°í ¾øÀ¸¸é ±âº» ¸®¼Ò½º Æú´õ¿¡¼­ ã´Â´Ù. // ItemTable_Quest, ItemTable_Event, ItemTable_Equipment, ItemTable_Cash ½Ã¸®Á·Î ¸ðµÎ ¸ð¾Æ¼­ ·Îµå µÊ. s_pItemTable = LoadExtFile( "ItemTable.dnt" ); s_pGachaTable = LoadExtFile( "GachaJP.dnt", "_GachaNum" ); s_pItemDropTable = LoadExtFile( "ItemDropTable.dnt" ); // PartsTable_Event, PartsTable_Equipment, PartsTable_Cash ½Ã¸®Áî ÀüºÎ ¸ð¾Æ¼­ ·Îµå µÊ. s_pPartsTable = LoadExtFile( "PartsTable.dnt" ); } void gachapon_test::TearDownTestCase( void ) { SAFE_DELETE( s_pItemTable ); SAFE_DELETE( s_pGachaTable ); SAFE_DELETE( s_pItemDropTable ); SAFE_DELETE( s_pPartsTable ); } void gachapon_test::SetUp( void ) { } void gachapon_test::TearDown( void ) { } TEST_F( gachapon_test, GACHAPON_RESULT_ITEM_MATCH_JOB ) { // ÀϺ»°ú ´ë¸¸ÀÎ °æ¿ì¿¡¸¸ ¼öÇà. if( false == ( g_strNation == _T("JPN") || g_strNation == _T("TWN") ) ) return; char acBuffer[ 256 ] = { 0 }; // °¡Ã­Æù Å×À̺íÀ» µÚÁ®¼­ Á¸ÀçÇÏ´Â ¼¥ ¾ÆÀ̵𸦠´Ù ¹Þ¾Æ¿Â´Ù. vector vlShopIDs; set setShopIDs; for( int i = 0; i < GACHA_T->GetItemCount(); ++i ) { int iItemID = GACHA_T->GetItemID( i ); vlShopIDs.push_back( GACHA_T->GetFieldFromLablePtr( iItemID, "_GachaNum" )->GetInteger() ); setShopIDs.insert( vlShopIDs.back() ); } TCHAR atcBuf[ 256 ] = { 0 }; { _stprintf_s( atcBuf, _T("{GachaShopID:%d, Note:°¡Ã­Æù ¼¥ ¾ÆÀ̵ð´Â Á÷¾÷º°·Î 4°³°¡ µÇ¾î¾ß ÇÕ´Ï´Ù.}"), vlShopIDs.front() ); SCOPED_TRACE( atcBuf ); EXPECT_TRUE( (vlShopIDs.size() % 4) == 0 ); } set::iterator iter = setShopIDs.begin(); for( iter; iter != setShopIDs.end(); ++iter ) { int iShopID = *iter; // µå¶ø ±×·ì Å×À̺íÀ» µðº­¼­ ³ª¿Ã ¼ö ÀÖ´Â ¸ðµç ¾ÆÀÌÅÛµéÀ» ¸ð¾ÆµÐ´Ù. vector vlGachaTableIDs; GACHA_T->GetItemIDListFromField( "_GachaNum", iShopID, vlGachaTableIDs ); // °°Àº °¡Ã­Æù ¹øÈ£ ¾È¿¡¼­´Â ¹Ýµå½Ã À§¿¡¼­ ¾Æ·¡·Î Á÷¾÷ Ŭ·¡½º ¾ÆÀÌµð ¼øÀ¸·Î µ¥ÀÌÅͰ¡ ÀԷµǾî¾ß ÇÕ´Ï´Ù!! int iNumTableIDs = (int)vlGachaTableIDs.size(); for( int iTableID = 0; iTableID < iNumTableIDs; ++iTableID ) { int iGachaTableID = vlGachaTableIDs.at( iTableID ); int iNeedJobClassID = iTableID+1; for( int iPart = 0; iPart < NUM_GACHA_PARTS; ++iPart ) { sprintf_s( acBuffer, "_LinkedDrop%d", iPart+1 ); int iLinkedDropTableID = GACHA_T->GetFieldFromLablePtr( iGachaTableID, acBuffer )->GetInteger(); if( 0 == iLinkedDropTableID || 1 == iLinkedDropTableID ) // ¾ø´Â Å×ÀÌºí ·¹À̺í·Î ãÀ¸¸é 1ÀÌ ³ª¿È...(??) continue; // TODO: µå¶ø Å×À̺í Àç±Í°ªÀº 8´Ü°è ±îÁöÀÓ.. ÃßÈÄ¿¡ ÇÊ¿äÇϸé ó¸®ÇØ¾ß ¾öû³­ ·çÇÁ¿¡ ºüÁöÁö ¾ÊÀ½. vector vlToCalcDropTableIDs; vlToCalcDropTableIDs.push_back( iLinkedDropTableID ); for( int i = 0; i < (int)vlToCalcDropTableIDs.size(); ++i ) { int iDropTableID = vlToCalcDropTableIDs.at( i ); // µå¶øÅ×À̺íÀº Ç׸ñÀÌ 20°³ for( int iLabel = 0; iLabel <= 20; ++iLabel ) { sprintf_s( acBuffer, "_IsGroup%d", iLabel ); int iIsGroup = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuffer )->GetInteger(); if( iIsGroup == 1 ) { sprintf_s( acBuffer, "_Item%dIndex", iLabel ); int iReferenceDropTableID = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuffer )->GetInteger(); if( 0 == iReferenceDropTableID ) continue; vlToCalcDropTableIDs.push_back( iReferenceDropTableID ); } else { sprintf_s( acBuffer, "_Item%dIndex", iLabel ); int iItemTableID = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuffer )->GetInteger(); if( 0 == iItemTableID ) continue; // ½ÇÁ¦ ÇÊ¿äÁ÷¾÷ÀÌ ¹ºÁö ¾ÆÀÌÅÛ Å×ÀÌºí¿¡¼­ °®°í ¿Â´Ù. // 0ÀÎ °æ¿ì´Â ¸ðµÎ »ç¿ë °¡´ÉÇÑ °ÍÀ̱⿡ ÆÐ½ºÇϰí ÇöÀç ¼ÂÆÃµÇ°í ÀÖ´Â Á÷¾÷°ú ½ÇÁ¦ ¾ÆÀÌÅÛÀÇ Á÷¾÷ÀÌ ¸Â´Â°¡ È®ÀÎÇÑ´Ù. int iItemNeedJobClassID = 0; string strNeedJobClassID = ITEM_T->GetFieldFromLablePtr( iItemTableID, "_NeedJobClass" )->GetString(); { SecureZeroMemory( atcBuf, sizeof(atcBuf) ); _stprintf_s( atcBuf, _T("{ItemTableID:%d, Note:°¡Ã­Æù ¾ÆÀÌÅÛÀº Á÷¾÷Äڵ尡 Çϳª¸¸ ÀÖ¾î¾ß ÇÕ´Ï´Ù.}"), iItemTableID ); SCOPED_TRACE( atcBuf ); EXPECT_TRUE( string::npos == strNeedJobClassID.find_first_of( ';' ) || strNeedJobClassID == "0" ); } iItemNeedJobClassID = atoi( strNeedJobClassID.c_str() ); if( 0 != iItemNeedJobClassID ) { SecureZeroMemory( atcBuf, sizeof(atcBuf) ); _stprintf_s( atcBuf, _T("{GachaTableID:%d, GachaTableJobID:%d, ItemTableID:%d, ItemTableJobID:%d, Note:°¡Ã­Æù Å×À̺íÀÇ Á÷¾÷ À§Ä¡¿Í ½ÇÁ¦ ¾ÆÀÌÅÛÀÇ Á÷¾÷ ¹øÈ£°¡ ¸ÂÁö ¾Ê½À´Ï´Ù.}"), iGachaTableID, iNeedJobClassID, iItemTableID, iItemNeedJobClassID ); SCOPED_TRACE( atcBuf ); EXPECT_TRUE( iNeedJobClassID == iItemNeedJobClassID ); } // ¾î¶² ÆÄÃ÷ÀÎÁö ŸÀÔÀ» ¾ò¾î¿È. ÇöÀç ·çÇÁµµ´Â ÆÄÃ÷ ŸÀÔ°ú ¸Â¾Æ¾ß ÇÔ. int iPartIndexInTable = PARTS_T->GetFieldFromLablePtr( iItemTableID, "_Parts" )->GetInteger(); EXPECT_TRUE( iPartIndexInTable == iPart ); } } } } } } }