2024-12-21 10:04:04 +08:00
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <map>
|
|
|
|
|
|
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
|
|
|
|
|
|
#define PRE_ADD_COMPARE_TABLE // bintitle.
|
|
|
|
|
|
|
|
|
|
|
|
#include "DNTableFile.h"
|
|
|
|
|
|
#include "MemPool.h"
|
|
|
|
|
|
#include "DnItemCompounder.h"
|
|
|
|
|
|
#include "SundriesFunc.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct SCell
|
|
|
|
|
|
{
|
|
|
|
|
|
int mainID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID.
|
|
|
|
|
|
int enchantID;
|
|
|
|
|
|
int enchatLevel;
|
|
|
|
|
|
|
|
|
|
|
|
int id; // ItemID.
|
|
|
|
|
|
string name; // <20>÷<EFBFBD><C3B7><EFBFBD>.
|
|
|
|
|
|
DNTableCell * pData; // <20><><EFBFBD><EFBFBD>Ÿ.
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//typedef vector< vector< SCell > * > vNT;
|
|
|
|
|
|
//vNT g_newTable;
|
|
|
|
|
|
typedef std::map< int, vector< SCell > * > vNT;
|
|
|
|
|
|
vNT g_newTable;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum E_TABLE
|
|
|
|
|
|
{
|
|
|
|
|
|
ENCHANTTABLE = 0,
|
|
|
|
|
|
ENCHANTMAINTABLE = 1,
|
|
|
|
|
|
ENCHANTMAXSTATETABLE = 2,
|
|
|
|
|
|
ENCHANTNEEDITEMTABLE = 3,
|
|
|
|
|
|
|
|
|
|
|
|
MAX
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
int GetFiledNameIndex( vector< string > & vVector, const char * name )
|
|
|
|
|
|
{
|
|
|
|
|
|
int resIndex = -1;
|
|
|
|
|
|
int size = vVector.size();
|
|
|
|
|
|
for( int i=0; i<size; ++i )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( vVector[i].compare( name ) == 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
resIndex = i;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return resIndex;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void main()
|
|
|
|
|
|
{
|
|
|
|
|
|
//// .ext <20><><EFBFBD>ϵ<EFBFBD>.
|
|
|
|
|
|
//std::vector< std::string > vFileNames;
|
|
|
|
|
|
//vFileNames.push_back("enchanttable");
|
|
|
|
|
|
//vFileNames.push_back("enchantmaintable");
|
|
|
|
|
|
//vFileNames.push_back("enchantmaxstatetable");
|
|
|
|
|
|
//vFileNames.push_back("enchantneeditemtable");
|
|
|
|
|
|
|
|
|
|
|
|
//// Tables.
|
|
|
|
|
|
//std::vector< DNTableFileFormat * > vTables;
|
|
|
|
|
|
//DNTableFileFormat * pTable = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
//// <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
//for( int i=E_TABLE::ENCHANTTABLE; i<E_TABLE::MAX; ++i )
|
|
|
|
|
|
//{
|
|
|
|
|
|
// pTable = new DNTableFileFormat;
|
|
|
|
|
|
// pTable->Load( ( vFileNames[ i ] + ".ext" ).c_str() );
|
|
|
|
|
|
// pTable->SetLoadName( vFileNames[ i ].c_str() );
|
|
|
|
|
|
// vTables.push_back( pTable );
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Before.
|
|
|
|
|
|
printf("** Load [enchant]\n");
|
|
|
|
|
|
DNTableFileFormat * pTableBefore = new DNTableFileFormat;
|
|
|
|
|
|
pTableBefore->Load( "out/enchanttable.dnt" );
|
|
|
|
|
|
pTableBefore->SetLoadName( "enchanttable.dnt" );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Main Table.
|
|
|
|
|
|
printf("** Load [enchantMain.dnt]\n");
|
|
|
|
|
|
DNTableFileFormat * pTableMain = new DNTableFileFormat;
|
|
|
|
|
|
pTableMain->Load( "out/enchantmaintable.dnt" );
|
|
|
|
|
|
pTableMain->SetLoadName( "enchantmaintable.dnt" );
|
|
|
|
|
|
int sizeMain = pTableMain->GetItemCount();
|
|
|
|
|
|
int fieldCntMain = pTableMain->GetFieldCount();
|
|
|
|
|
|
|
|
|
|
|
|
// State.
|
|
|
|
|
|
printf("** Load [enchantMaxState.dnt]\n");
|
|
|
|
|
|
DNTableFileFormat * pTableState = new DNTableFileFormat;
|
|
|
|
|
|
pTableState->Load( "out/enchantmaxstatetable.dnt" );
|
|
|
|
|
|
pTableState->SetLoadName( "enchantmaxstatetable.dnt" );
|
|
|
|
|
|
|
|
|
|
|
|
// NeedItem.
|
|
|
|
|
|
printf("** Load [enchantNeedItem.dnt]\n");
|
|
|
|
|
|
DNTableFileFormat * pTableNeedItem = new DNTableFileFormat;
|
|
|
|
|
|
pTableNeedItem->Load( "out/enchantneeditemtable.dnt" );
|
|
|
|
|
|
pTableNeedItem->SetLoadName( "enchantneeditemtable.dnt" );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//// Main Table Data <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
//g_newTable.reserve( sizeMain );
|
|
|
|
|
|
//for( int i=0; i<sizeMain; ++i )
|
|
|
|
|
|
//{
|
|
|
|
|
|
// vector< SCell > * pVec = new vector< SCell >;
|
|
|
|
|
|
// pVec->reserve( pTableBefore->GetFieldCount() );
|
|
|
|
|
|
// g_newTable.push_back( pVec );
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
//
|
|
|
|
|
|
DNTableCell * pTempCell = NULL;
|
|
|
|
|
|
printf("\n** <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> [enchantMaxState--enchantMain--enchantNeedItem]\n");
|
|
|
|
|
|
for( int i=0; i<sizeMain; ++i )
|
|
|
|
|
|
{
|
|
|
|
|
|
int mainItemID = pTableMain->GetItemID( i );
|
|
|
|
|
|
|
|
|
|
|
|
// 1<><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
//vector< SCell > * pVecRow = g_newTable[ i ];
|
|
|
|
|
|
vector< SCell > * pVecRow = new vector< SCell >;
|
|
|
|
|
|
|
|
|
|
|
|
// 1<><31> ä<><C3A4><EFBFBD><EFBFBD>.
|
|
|
|
|
|
for( int fidx=0; fidx<fieldCntMain; ++fidx )
|
|
|
|
|
|
{
|
|
|
|
|
|
const char * fieldNameRef = NULL;
|
|
|
|
|
|
const char * fieldNameMain = pTableMain->GetFieldLabel( fidx );
|
|
|
|
|
|
|
|
|
|
|
|
SCell aCell;
|
|
|
|
|
|
DNTableCell * pTableCell = pTableMain->GetFieldFromLablePtr( mainItemID, fieldNameMain );
|
|
|
|
|
|
DNTableCell * pTableCellEnchantID = pTableMain->GetFieldFromLablePtr( mainItemID, "_EnchantID" ); // EnchantID.
|
|
|
|
|
|
DNTableCell * pTableCellEnchantLevel = pTableMain->GetFieldFromLablePtr( mainItemID, "_EnchantLevel" ); // EnchantLevel.
|
|
|
|
|
|
|
|
|
|
|
|
//pTableMain->getfield
|
|
|
|
|
|
|
|
|
|
|
|
aCell.mainID = mainItemID;
|
|
|
|
|
|
aCell.enchantID = pTableCellEnchantID->GetInteger();
|
|
|
|
|
|
aCell.enchatLevel = pTableCellEnchantLevel->GetInteger();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if( _stricmp( fieldNameMain, "_EnchantID" ) == 0 ||
|
|
|
|
|
|
// _stricmp( fieldNameMain, "_EnchantLevel" ) == 0 ||
|
|
|
|
|
|
// _stricmp( fieldNameMain, "_NeedCoin" ) == 0 ||
|
|
|
|
|
|
// _stricmp( fieldNameMain, "_DisjointDrop" ) == 0 )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NeedItem Table.
|
|
|
|
|
|
if( _stricmp( fieldNameMain, "_NeedItemTableID" ) == 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
int itemID_Need = pTableCell->GetInteger();
|
|
|
|
|
|
for( int idxneedfield=0; idxneedfield<pTableNeedItem->GetFieldCount(); ++idxneedfield )
|
|
|
|
|
|
{
|
|
|
|
|
|
const char * pNeedFieldName = pTableNeedItem->GetFieldLabel( idxneedfield );
|
|
|
|
|
|
|
|
|
|
|
|
// NeedItemTable <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"_UpStateRatio" <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( _stricmp( pNeedFieldName, "_UpStateRatio" ) != 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
pTempCell = pTableNeedItem->GetFieldFromLablePtr( itemID_Need, pTableNeedItem->GetFieldLabel(idxneedfield) );
|
|
|
|
|
|
|
|
|
|
|
|
aCell.id = itemID_Need;
|
|
|
|
|
|
aCell.name.assign( pNeedFieldName );
|
|
|
|
|
|
aCell.pData = pTempCell;
|
|
|
|
|
|
|
|
|
|
|
|
// <20> <20>Ѽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
|
|
|
|
|
|
pVecRow->push_back( aCell );
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// State Table.
|
|
|
|
|
|
else if( _stricmp( fieldNameMain, "_StateID" ) == 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
int itemID_State = pTableCell->GetInteger();
|
|
|
|
|
|
for( int idxstatefield=0; idxstatefield<pTableState->GetFieldCount(); ++idxstatefield )
|
|
|
|
|
|
{
|
|
|
|
|
|
const char * pStateFieldName = pTableState->GetFieldLabel( idxstatefield );
|
|
|
|
|
|
pTempCell = pTableState->GetFieldFromLablePtr( itemID_State, pStateFieldName );
|
|
|
|
|
|
|
|
|
|
|
|
aCell.id = itemID_State;
|
|
|
|
|
|
aCell.name.assign( pStateFieldName );
|
|
|
|
|
|
aCell.pData = pTableState->GetFieldFromLablePtr( itemID_State, pStateFieldName );
|
|
|
|
|
|
|
|
|
|
|
|
// <20> <20>Ѽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
|
|
|
|
|
|
pVecRow->push_back( aCell );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>켱 [enchantMain] <20><> [enchant] <20><> <20><EFBFBD> <20><><EFBFBD><EFBFBD>. needcoin <20><> disjointdrop <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD>.
|
|
|
|
|
|
// Main Table.
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
aCell.id = mainItemID;
|
|
|
|
|
|
aCell.name.assign( fieldNameMain );
|
|
|
|
|
|
aCell.pData = pTableCell;
|
|
|
|
|
|
|
|
|
|
|
|
// <20> <20>Ѽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
|
|
|
|
|
|
pVecRow->push_back( aCell );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g_newTable.insert( vNT::value_type( mainItemID, pVecRow ) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD>Ÿ Ÿ<>Ա<EFBFBD><D4B1>п<EFBFBD>.
|
|
|
|
|
|
vector< string > vFieldNames;
|
|
|
|
|
|
vector< string >::iterator vFieldNameIt;
|
|
|
|
|
|
int fieldCnt_Before = pTableBefore->GetFieldCount();
|
|
|
|
|
|
for( int i=0; i<fieldCnt_Before; ++i )
|
|
|
|
|
|
{
|
|
|
|
|
|
vFieldNames.push_back( string( pTableBefore->GetFieldLabel( i ) ) );
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
//
|
|
|
|
|
|
printf("\n** <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> [enchant] VS [enchat NeedItem--Main--MaxState]\n");
|
|
|
|
|
|
FILE * fpOut = fopen("out\\different.txt", "w");
|
|
|
|
|
|
|
|
|
|
|
|
fprintf( fpOut, "enchantmain:%d, enchant:%d\n\n", g_newTable.size(), pTableBefore->GetItemCount() );
|
|
|
|
|
|
|
|
|
|
|
|
int nDiffCnt = 0;
|
|
|
|
|
|
for( int i=0; i<g_newTable.size(); ++i )
|
|
|
|
|
|
{
|
|
|
|
|
|
int itemID = pTableBefore->GetItemID( i ); // Before Table.
|
|
|
|
|
|
|
|
|
|
|
|
//vector< SCell > * pVecRow = g_newTable[ i ]; // newTableData vector.
|
|
|
|
|
|
|
|
|
|
|
|
vNT::iterator it = g_newTable.find( itemID );
|
|
|
|
|
|
if( it == g_newTable.end() )
|
|
|
|
|
|
continue;
|
|
|
|
|
|
vector< SCell > * pVecRow = (*it).second;
|
|
|
|
|
|
|
|
|
|
|
|
DNTableCell * pCellBefore = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
for( int k=0; k<pVecRow->size(); ++k )
|
|
|
|
|
|
{
|
|
|
|
|
|
SCell & aCell = pVecRow->at( k );
|
|
|
|
|
|
|
|
|
|
|
|
// Field Data Type.
|
|
|
|
|
|
int idxField = GetFiledNameIndex( vFieldNames, aCell.name.c_str() );
|
|
|
|
|
|
if( idxField == -1 )
|
|
|
|
|
|
continue;
|
|
|
|
|
|
CDNTableFile::FieldType::eCode cFldType = pTableBefore->m_nVecFieldType[ idxField ];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ.
|
|
|
|
|
|
pCellBefore = pTableBefore->GetFieldFromLablePtr( itemID, aCell.name.c_str() );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ѵ<EFBFBD> NULL <20>ΰ<EFBFBD><CEB0><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( aCell.pData == NULL && pCellBefore == NULL )
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
// NULL Data.
|
|
|
|
|
|
if( aCell.pData == NULL && pCellBefore != NULL )
|
|
|
|
|
|
{
|
|
|
|
|
|
//++nDiffCnt;
|
|
|
|
|
|
|
|
|
|
|
|
switch( cFldType ) {
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::STRING:
|
|
|
|
|
|
|
|
|
|
|
|
// [NULL]-[] <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( _stricmp( pCellBefore->GetString(), "0" ) != 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %s ]-[ %s ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), "NULL", pCellBefore->GetString());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::BOOL:
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::NA:
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %s ]-[ %d ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), "NULL", pCellBefore->GetInteger());
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::INT:
|
|
|
|
|
|
|
|
|
|
|
|
// NULL / 0 <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( pCellBefore->GetInteger() != 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %s ]-[ %d ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), "NULL", pCellBefore->GetInteger());
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::PER:
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %s ]-[ %.6f ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), "NULL", pCellBefore->GetFloat());
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::FLOAT:
|
|
|
|
|
|
|
|
|
|
|
|
// NULL / 0 <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( pCellBefore->GetFloat() != 0.0f )
|
|
|
|
|
|
{
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %s ]-[ %.6f ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), "NULL", pCellBefore->GetFloat());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
switch( cFldType ) {
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::STRING:
|
|
|
|
|
|
if( _stricmp( aCell.pData->GetString(), pCellBefore->GetString() ) != 0 )
|
|
|
|
|
|
{
|
|
|
|
|
|
// []-[0] <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
if( (strlen( aCell.pData->GetString() ) < 1) &&
|
|
|
|
|
|
(_stricmp( pCellBefore->GetString(), "0" ) == 0) )
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %s ]-[ %s ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), aCell.pData->GetString(), pCellBefore->GetString());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::BOOL:
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::NA:
|
|
|
|
|
|
if( aCell.pData->GetInteger() != pCellBefore->GetInteger() )
|
|
|
|
|
|
{
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %d ]-[ %d ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), aCell.pData->GetInteger(), pCellBefore->GetInteger());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::INT:
|
|
|
|
|
|
{
|
|
|
|
|
|
// 1<><31> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
int nValue = abs( aCell.pData->GetInteger() - pCellBefore->GetInteger() );
|
|
|
|
|
|
if( nValue > 1 )
|
|
|
|
|
|
//if( aCell.pData->GetInteger() != pCellBefore->GetInteger() )
|
|
|
|
|
|
{
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %d ]-[ %d ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), aCell.pData->GetInteger(), pCellBefore->GetInteger());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::PER:
|
|
|
|
|
|
case CDNTableFile::FieldType::eCode::FLOAT:
|
|
|
|
|
|
|
|
|
|
|
|
int fValue = fabs( aCell.pData->GetFloat() - pCellBefore->GetFloat() );
|
|
|
|
|
|
|
|
|
|
|
|
// 1<><31> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
//if( aCell.pData->GetFloat() != pCellBefore->GetFloat() )
|
|
|
|
|
|
if( fValue > 1.0f )
|
|
|
|
|
|
{
|
|
|
|
|
|
++nDiffCnt;
|
|
|
|
|
|
fprintf( fpOut, "MainID[%7d], EnchantID[%7d], Level[%2d], RefID[%7d] : Row:%6d, {%15s} [ %f ]-[ %.6f ]\n",
|
|
|
|
|
|
aCell.mainID, aCell.enchantID, aCell.enchatLevel,
|
|
|
|
|
|
aCell.id, i, aCell.name.c_str(), aCell.pData->GetFloat(), pCellBefore->GetFloat());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
fprintf( fpOut, "\n*** Different Count : %d", nDiffCnt);
|
|
|
|
|
|
fclose( fpOut );
|
|
|
|
|
|
//-------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("** <20><> %d <20><> <20><><EFBFBD><EFBFBD>Ÿ <20>ٸ<EFBFBD>\n", nDiffCnt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------
|
|
|
|
|
|
// <20><><EFBFBD>¿<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
|
|
//char * str[32];
|
|
|
|
|
|
//FILE * fp = fopen("out\\data.txt", "w");
|
|
|
|
|
|
//fprintf( fp, "Size : %d ", g_newTable.size() );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//// <20>÷<EFBFBD><C3B7><EFBFBD>.
|
|
|
|
|
|
//vector< SCell > * pVecRowTemp = g_newTable[ 0 ];
|
|
|
|
|
|
//for( int x=0; x<pVecRowTemp->size(); ++x )
|
|
|
|
|
|
//{
|
|
|
|
|
|
// fprintf( fp, "%s ", pVecRowTemp->at(x).name.c_str() );
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
//for( int i=0; i<g_newTable.size(); ++i )
|
|
|
|
|
|
//{
|
|
|
|
|
|
// memset(str,0,32);
|
|
|
|
|
|
// vector< SCell > * pVecRow = g_newTable[ i ];
|
|
|
|
|
|
// fprintf( fp, "%d : ", i);
|
|
|
|
|
|
|
|
|
|
|
|
// for( int k=0; k<pVecRow->size(); ++k )
|
|
|
|
|
|
// {
|
|
|
|
|
|
// SCell & aCell = pVecRow->at( k );
|
|
|
|
|
|
// if( aCell.pData == NULL )
|
|
|
|
|
|
// {
|
|
|
|
|
|
// fprintf( fp, "NULL ");
|
|
|
|
|
|
// continue;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// int idxField = GetFiledNameIndex( vFieldNames, aCell.name.c_str() );
|
|
|
|
|
|
// if( idxField == -1 )
|
|
|
|
|
|
// continue;
|
|
|
|
|
|
|
|
|
|
|
|
// char cFldType = (char)pTableBefore->m_nVecFieldType[ idxField ];
|
|
|
|
|
|
//
|
|
|
|
|
|
// switch( cFldType ) {
|
|
|
|
|
|
// case CSOXFile::FT_STRING:
|
|
|
|
|
|
// fprintf( fp, "%s ", aCell.pData->GetString() );
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
|
|
|
|
// case CSOXFile::FT_BOOL:
|
|
|
|
|
|
// case CSOXFile::FT_NA:
|
|
|
|
|
|
// case CSOXFile::FT_INT:
|
|
|
|
|
|
// fprintf( fp, "%d ", aCell.pData->GetInteger() );
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
|
|
|
|
// case CSOXFile::FT_PER:
|
|
|
|
|
|
// case CSOXFile::FT_FLOAT:
|
|
|
|
|
|
// fprintf( fp, "%f ", aCell.pData->GetFloat() );
|
|
|
|
|
|
// break;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// fprintf( fp, "\n");
|
|
|
|
|
|
//}
|
|
|
|
|
|
//fclose( fp );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// g_newTable <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
/*for( int i=0; i<g_newTable.size(); ++i )
|
|
|
|
|
|
{
|
|
|
|
|
|
g_newTable[ i ]->clear();
|
|
|
|
|
|
delete g_newTable[ i ];
|
|
|
|
|
|
}*/
|
|
|
|
|
|
vNT::iterator it = g_newTable.begin();
|
|
|
|
|
|
for( ; it != g_newTable.end(); it++ )
|
|
|
|
|
|
{
|
|
|
|
|
|
(*it).second->clear();
|
|
|
|
|
|
delete (*it).second;
|
|
|
|
|
|
}
|
|
|
|
|
|
g_newTable.clear();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//// Table <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
//for( int i=0; i<vTables.size(); ++i )
|
|
|
|
|
|
// delete vTables[ i ];
|
|
|
|
|
|
//vTables.clear();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|