DragonNest/Client/DnTableVerifier/item_data_test.cpp

300 lines
21 KiB
C++
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>#include "StdAfx.h"
#include "item_data_test.h"
DNTableFileFormat* item_data_test::s_pItemTable = NULL;
DNTableFileFormat* item_data_test::s_pItemDropTable = NULL;
DNTableFileFormat* item_data_test::s_pItemDropGroupTable = NULL;
DNTableFileFormat* item_data_test::s_pCombinedShopTable = NULL;
#define ITEM_T item_data_test::s_pItemTable
#define ITEMDROP_T item_data_test::s_pItemDropTable
#define ITEMDROPGROUP_T item_data_test::s_pItemDropGroupTable
#define COMBINEDSHOP_T item_data_test::s_pCombinedShopTable
item_data_test::item_data_test(void)
{
}
item_data_test::~item_data_test(void)
{
}
void item_data_test::SetUpTestCase( void )
{
//// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> m<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><<EFBFBD>t<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>T<EFBFBD><EFBFBD><EFBFBD><EFBFBD> >̔<EFBFBD><EFBFBD><EFBFBD>.
//vector<string> vlFilePathsToVerify;
//string strTableFullPath;
//// ItemTable_Quest, ItemTable_Event, ItemTable_Equipment, ItemTable_Cash <EFBFBD>¬<EFBFBD><EFBFBD><EFBFBD>ļ\<EFBFBD> <EFBFBD><EFBFBD>P<EFBFBD> <EFBFBD><EFBFBD>D<EFBFBD><EFBFBD> \<EFBFBD>ܴ (<EFBFBD>.
//GatherConcernedExt( "ItemTable.ext", vlFilePathsToVerify, strTableFullPath );
//s_pItemTable = new DNTableFileFormat( strTableFullPath.c_str() );
//GatherConcernedExt( "ItemDropTable.ext", vlFilePathsToVerify, strTableFullPath );
//s_pItemDropTable = new DNTableFileFormat( strTableFullPath.c_str() );
//GatherConcernedExt( "ItemDropGroupTable.ext", vlFilePathsToVerify, strTableFullPath );
//s_pItemDropGroupTable = new DNTableFileFormat( strTableFullPath.c_str() );
s_pItemTable = LoadExtFile( "ItemTable.dnt" );
s_pItemDropTable = LoadExtFile( "ItemDropTable.dnt" );
s_pItemDropGroupTable = LoadExtFile( "ItemDropGroupTable.dnt" );
s_pCombinedShopTable = LoadExtFile( "combinedshoptable.dnt" );
}
void item_data_test::TearDownTestCase( void )
{
SAFE_DELETE( s_pItemTable );
SAFE_DELETE( s_pItemDropTable );
SAFE_DELETE( s_pItemDropGroupTable );
SAFE_DELETE( s_pCombinedShopTable );
}
void item_data_test::SetUp( void )
{
}
void item_data_test::TearDown( void )
{
}
void ValidateItemDropGroupTableID( const char* pLabel, int iGroupTableID )
{
//char acBuf[ MAX_PATH ] = { 0 };
//TCHAR atcBuf[ 256 ] = { 0 };
//for( int k = 1; k <= 10; ++k )
//{
// sprintf_s( acBuf, pLabel, k );
// int iDropTableIDToFind = ITEMDROPGROUP_T->GetFieldFromLablePtr( iGroupTableID, acBuf )->GetInteger();
// if( 0 == iDropTableIDToFind )
// continue;
// _stprintf_s( atcBuf, _T("{TableName:ItemDropGroupTable, Index:%d, Note:<74>X<EFBFBD><58><EFBFBD> <4A> DropTableID(%d) <00><>Ȳ<EFBFBD><C8B2>.}"), iGroupTableID, iDropTableIDToFind );
// SCOPED_TRACE( atcBuf );
// EXPECT_TRUE( ITEMDROP_T->IsExistItem( iDropTableIDToFind ) );
//}
}
// 1. Easy1~10, Normal1~10, Hard1~0, Master1~10, Abyss1~10 <EFBFBD> 50<EFBFBD> <EFBFBD>X<EFBFBD> x<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemDropTableID<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><<EFBFBD>t<EFBFBD> Error.
TEST_F( item_data_test, GROUPTABLE_REFERENCED_INVALID_DROP_TABLE_ID )
{
// #38719, #31905 <EFBFBD>\<EFBFBD> ܴ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD> l<EFBFBD>p<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>.
TCHAR atcBuf[ 256 ] = { 0 };
int iNumGroupTable = ITEMDROPGROUP_T->GetItemCount();
for( int i = 0; i < iNumGroupTable; ++i )
{
int iGroupTableID = ITEMDROPGROUP_T->GetItemID( i );
int iDropTableIDToFind = ITEMDROPGROUP_T->GetFieldFromLablePtr( iGroupTableID, "_DropID" )->GetInteger();
_stprintf_s( atcBuf, _T("{TableName:ItemDropGroupTable, Index:%d, Note:<74>X<EFBFBD><58><EFBFBD> <4A> DropTableID(%d) <00><>Ȳ<EFBFBD><C8B2>.}"), iGroupTableID, iDropTableIDToFind );
SCOPED_TRACE( atcBuf );
EXPECT_TRUE( ITEMDROP_T->IsExistItem( iDropTableIDToFind ) );
}
//int iNumGroupTable = ITEMDROPGROUP_T->GetItemCount();
//for( int i = 0; i < iNumGroupTable; ++i )
//{
// int iGroupTableID = ITEMDROPGROUP_T->GetItemID( i );
// ValidateItemDropGroupTableID( "Easy%d", iGroupTableID );
// ValidateItemDropGroupTableID( "Normal%d", iGroupTableID );
// ValidateItemDropGroupTableID( "Hard%d", iGroupTableID );
// ValidateItemDropGroupTableID( "Master%d", iGroupTableID );
// ValidateItemDropGroupTableID( "Abyss%d", iGroupTableID );
//}
}
// 1. _Item1Prob ~ _Item20ProbX<EFBFBD> <EFBFBD> i<EFBFBD>t<EFBFBD> 10<EFBFBD><EFBFBD> (1,000,000,000) t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Error
TEST_F( item_data_test, DROP_TABLE_PROB_OVER )
{
char acBuf[ 256 ] = { 0 };
TCHAR atcBuf[ 256 ] = { 0 };
int iNumDropTable = ITEMDROP_T->GetItemCount();
for( int i = 0; i < iNumDropTable; ++i )
{
int iDropTableID = ITEMDROP_T->GetItemID( i );
int iWholeProb = 0;
for( int k = 1; k <= 20; ++k )
{
sprintf_s( acBuf, "_Item%dProb", k );
int iProb = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuf )->GetInteger();
iWholeProb += iProb;
}
_stprintf_s( atcBuf, _T("{TableName:ItemDropTable, Index:%d, Note:U<>`<60> <12>X<EFBFBD> i<>t<EFBFBD> 10<00><> <00><><EFBFBD><EFBFBD> }<7D>Ȳ<EFBFBD><C8B2>. ֬<> i<>Ĭ- %d}"), iDropTableID, iWholeProb );
SCOPED_TRACE( atcBuf );
EXPECT_LE( iWholeProb, 1000000000 );
}
}
//
//// 2. _IsGroup X<EFBFBD> <EFBFBD>t<EFBFBD> n |<EFBFBD>L<EFBFBD> _Item1Index ~ _Item20Index<EFBFBD><EFBFBD> $<EFBFBD><EFBFBD><EFBFBD> Index<EFBFBD><EFBFBD> t<EFBFBD><EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>t<EFBFBD>\<EFBFBD>t<EFBFBD> <EFBFBD>Ŕ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Error.
//TEST_F( item_data_test, INVALID_REFERENCE_ITEM_TABLE_ID )
//{
// char acBuf[ 256 ] = { 0 };
// TCHAR atcBuf[ 256 ] = { 0 };
// int iNumDropTable = ITEMDROP_T->GetItemCount();
// for( int i = 0; i < iNumDropTable; ++i )
// {
// int iDropTableID = ITEMDROP_T->GetItemID( i );
// int iWholeProb = 0;
// for( int k = 1; k <= 20; ++k )
// {
// sprintf_s( acBuf, "_IsGroup%d", k );
// int iIsGroup = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuf )->GetInteger();
// if( iIsGroup == 0 )
// {
// sprintf_s( acBuf, "_Item%dIndex", k );
// int iItemTableID = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuf )->GetInteger();
//
// if( 0 == iItemTableID )
// continue;
//
// _stprintf_s( atcBuf, _T("[DropTableID: %d] <74>X<EFBFBD><58><EFBFBD> <4A> D<>t<EFBFBD>\<EFBFBD> ID <00><>Ȳ<EFBFBD><C8B2>. 8<>p<EFBFBD> D<>t<EFBFBD>\<EFBFBD>ID: %d"), iDropTableID, iItemTableID );
// SCOPED_TRACE( atcBuf );
// EXPECT_TRUE( ITEM_T->IsExistItem( iItemTableID ) );
// }
// }
// }
//}
void ValidateDropTableReferenceItemID( int iDropTableID/*, vector<int>& vlParentDropTableStack*/ )
{
char acBuf[ 256 ] = { 0 };
TCHAR atcBuf[ 256 ] = { 0 };
for( int k = 1; k <= 20; ++k )
{
sprintf_s( acBuf, "_IsGroup%d", k );
int iIsGroup = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuf )->GetInteger();
if( iIsGroup == 1 )
{
sprintf_s( acBuf, "_Item%dIndex", k );
int iReferenceDropTableID = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuf )->GetInteger();
if( 0 == iReferenceDropTableID )
continue;
//vector<int>::iterator iter = find( vlParentDropTableStack.begin(), vlParentDropTableStack.end(), iReferenceDropTableID );
//bool bDuplicatedSelfReference = (vlParentDropTableStack.end() != iter);
//if( bDuplicatedSelfReference )
//{
// continue;
//}
_stprintf_s( atcBuf, _T("{TableName:ItemDropTable, Index:%d, _Item%dIndex:%d, Note:<74>X<EFBFBD><58><EFBFBD> <4A> DropTableID <00><>Ȳ<EFBFBD><C8B2>.}"), iDropTableID, k, iReferenceDropTableID );
SCOPED_TRACE( atcBuf );
bool bExistDropItemID = ITEMDROP_T->IsExistItem( iReferenceDropTableID );
EXPECT_TRUE( bExistDropItemID );
//if( bExistDropItemID )
//{
//vlParentDropTableStack.push_back( iReferenceDropTableID );
//ValidateDropTableReferenceItemID( iReferenceDropTableID/*, vlParentDropTableStack*/ );
//vlParentDropTableStack.pop_back();
//}
}
else
{
sprintf_s( acBuf, "_Item%dIndex", k );
int iItemTableID = ITEMDROP_T->GetFieldFromLablePtr( iDropTableID, acBuf )->GetInteger();
if( 0 == iItemTableID )
continue;
_stprintf_s( atcBuf, _T("{TableName:ItemDropTable, Index:%d, _Item%dIndex:%d, Note:<74>X<EFBFBD><58><EFBFBD> <4A> ItemTableID <00><>Ȳ<EFBFBD><C8B2>.}"), iDropTableID, k, iItemTableID );
SCOPED_TRACE( atcBuf );
EXPECT_TRUE( ITEM_T->IsExistItem( iItemTableID ) );
}
}
}
// 3. _IsGroup X<EFBFBD> <EFBFBD>t<EFBFBD> y |<EFBFBD>L<EFBFBD> _Item1Index ~ _Item20Index<EFBFBD><EFBFBD> $<EFBFBD><EFBFBD><EFBFBD> Index<EFBFBD><EFBFBD> t<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemDropTableID<EFBFBD> <EFBFBD>Ŕ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Error.TEST_F( item_data_test, INVALID_REFERENCE_ITEM_TABLE_ID )
TEST_F( item_data_test, INVALID_REFERENCE_DROP_GROUP_TABLE_ID )
{
int iNumDropTable = ITEMDROP_T->GetItemCount();
for( int i = 0; i < iNumDropTable; ++i )
{
int iDropTableID = ITEMDROP_T->GetItemID( i );
// ܴ<EFBFBD><EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> x<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> 8<EFBFBD>p<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> 4<EFBFBD>\<EFBFBD>8<EFBFBD>p<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD>ɔ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD>.
//vector<int> vlDropTableIDStack;
//vlDropTableIDStack.push_back( iDropTableID );
ValidateDropTableReferenceItemID( iDropTableID/*, vlDropTableIDStack*/ );
//_ASSERT( (int)vlDropTableIDStack.size() == 1 );
}
}
// #45783 CombinedShop L<EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ƭ<EFBFBD>
TEST_F( item_data_test, INVALID_ID_REFERENCE_COMBINED_SHOP_TABLE_ID )
{
TCHAR atcBuf[ 256 ] = { 0 };
int iNumCombinedShopTable = COMBINEDSHOP_T->GetItemCount();
for( int i = 0; i < iNumCombinedShopTable; ++i )
{
int iCombinedShopTableID = COMBINEDSHOP_T->GetItemID( i );
// D<EFBFBD>t<EFBFBD>\<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD>
int iItemTableID = COMBINEDSHOP_T->GetFieldFromLablePtr( iCombinedShopTableID, "_itemindex" )->GetInteger();
_stprintf_s( atcBuf, _T("{TableName:CombinedShopTable, Index:%d, Note:<74>X<EFBFBD><58><EFBFBD> <4A> ItemTableID(%d) <00><>Ȳ<EFBFBD><C8B2>.}"), iCombinedShopTableID, iItemTableID );
SCOPED_TRACE( atcBuf );
EXPECT_TRUE( ITEM_T->IsExistItem( iItemTableID ) );
}
}
// #48623 <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> T<EFBFBD> D<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>(<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD> p<EFBFBD>t<EFBFBD>0<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TEST_F( item_data_test, SELLING_PRICE_ERROR )
{
TCHAR atcBuf[ 256 ] = { 0 };
int iNumItems = COMBINEDSHOP_T->GetItemCount();
for( int i = 0; i < iNumItems; ++i )
{
int iItemID = COMBINEDSHOP_T->GetItemID( i );
int aiPurchaseType[ 2 ] = { 0 };
aiPurchaseType[ 0 ] = COMBINEDSHOP_T->GetFieldFromLablePtr( iItemID, "_PurchaseType1" )->GetInteger();
aiPurchaseType[ 1 ] = COMBINEDSHOP_T->GetFieldFromLablePtr( iItemID, "_PurchaseType2" )->GetInteger();
// 1 t<EFBFBD> <EFBFBD><EFBFBD>ܴ<EFBFBD><EFBFBD>. <EFBFBD><EFBFBD>ܴ̹ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>t<EFBFBD> (<EFBFBD>.
for( int k = 0; k < 2; ++k )
{
int iItemTableID = COMBINEDSHOP_T->GetFieldFromLablePtr( iItemID, "_itemindex" )->GetInteger();
if( 1 == aiPurchaseType[ k ] )
{
char acBuf[ 128 ] = { 0 };
sprintf_s( acBuf, "_PurchaseItemValue%d", k+1 );
int iBuyPrice = COMBINEDSHOP_T->GetFieldFromLablePtr( iItemID, acBuf )->GetInteger();
int iSellPriceTwice = ITEM_T->GetFieldFromLablePtr( iItemTableID, "_SellAmount" )->GetInteger() * 2;
_stprintf_s( atcBuf, _T("{TableName:CombinedShopTable, Index:%d, Note:<00><><10> <10><><EFBFBD><08>a<EFBFBD>t<EFBFBD> l<><6C><EFBFBD><00><><EFBFBD><EFBFBD><EFBFBD> <00><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2>.}"), iItemTableID );
SCOPED_TRACE( atcBuf );
EXPECT_GE( iBuyPrice, iSellPriceTwice );
}
}
}
//// ^<EFBFBD><<EFBFBD>\<EFBFBD> D<EFBFBD>t<EFBFBD>\<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>@<EFBFBD> H<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹.. <EFBFBD>Ĕ<EFBFBD> <EFBFBD><EFBFBD>ij <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>Ȳ |<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
//iNumItems = ITEM_T->GetItemCount();
//for( int i = 0; i < iNumItems; ++i )
//{
// int iItemID = ITEM_T->GetItemID( i );
// int iBuyPrice = ITEM_T->GetFieldFromLablePtr( iItemID, "_Amount" )->GetInteger();
// int iSellPriceTwice = ITEM_T->GetFieldFromLablePtr( iItemID, "_SellAmount" )->GetInteger();
// _stprintf_s( atcBuf, _T("{TableName:ItemTable, Index:%d, Note:<00><><10> <10><><EFBFBD><08>a<EFBFBD>t<EFBFBD> l<><6C><EFBFBD><00><><EFBFBD><EFBFBD><EFBFBD> <00><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2>.}"), iItemID );
// SCOPED_TRACE( atcBuf );
// EXPECT_GT( iBuyPrice, iSellPriceTwice );
//}
}