#include "StdAfx.h" #include ".\itemcomposelistparser.h" #include "ItemInfoParser.h" ItemComposeListParser::ItemComposeListParser(void): m_pComposeListHash(NULL) { } ItemComposeListParser::~ItemComposeListParser(void) { FASSERT( m_pComposeListHash == NULL ); Release(); } VOID ItemComposeListParser::Init( DWORD dwComposeListSize ) { FASSERT( m_pComposeListHash == NULL ); m_pComposeListHash = new _COMPOSELIST_HASH; m_pComposeListHash->Initialize( dwComposeListSize ); } VOID ItemComposeListParser::Init( DWORD dwComposeListSize, char * pszPackFileName ) { Init( dwComposeListSize ); SetPackFileName( pszPackFileName ); } VOID ItemComposeListParser::Release() { Unload(); SAFE_DELETE( m_pComposeListHash ); } BOOL ItemComposeListParser::_Load( BOOL bReload ) { const INT nRowSize = GetRowSize(); for( INT nRow=0; nRowGetData( code ); if( !pInfo ) { // ¾øÀ¸¸é! pInfo = new sITEM_COMPOSE_LIST; m_pComposeListHash->Add( pInfo, code ); } else { if( FALSE == bReload ) { SUNLOG( eCRITICAL_LOG, "[ItemComposeListParser]script file data error, Code = %d", code ); FASSERT( !"data error." ); } } pInfo->m_Code = code; _tcsncpy( pInfo->m_pszDebugName, GetDataString( "Name", nRow ), MAX_ITEMNAME_LENGTH ); pInfo->m_NCode = GetDataDWORD( "Ncode", nRow ); pInfo->m_LimitCharClass = GetDataDWORD( "LimitCharClass", nRow ); pInfo->m_LimitGuildClass = GetDataDWORD( "LimitGuildClass", nRow ); pInfo->m_ItemType = GetDataDWORD( "ItemType", nRow ); #ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER pInfo->m_dCategoryCount = GetDataDWORD( "CategorySubCount",nRow); TCHAR tempSring[64]; for (int i = 0 ; i < pInfo->m_dCategoryCount ; ++i) { sprintf(tempSring,"bCategory%d",i+1); pInfo->m_pCategory[i] = GetDataDWORD(tempSring, nRow ); sprintf(tempSring,"Category%d_Scode",i+1); pInfo->m_pCategoryCode[i] = GetDataDWORD(tempSring, nRow ); } #else pInfo->m_dwCategory1 = GetDataDWORD( "bCategory1", nRow ); pInfo->m_Category1NCode = GetDataDWORD( "Category1_Scode", nRow ); pInfo->m_dwCategory2 = GetDataDWORD( "bCategory2", nRow ); pInfo->m_Category2NCode = GetDataDWORD( "Category2_Scode", nRow ); #endif pInfo->m_byMatCount = 0; { // Materials Àç·á¹°... TCHAR materialCodeString[32] = { 0, }; TCHAR materialInfoString[32] = { 0, }; TCHAR materialCountString[32] = { 0, }; const INT material_code_tail_idx = _sntprintf( materialCodeString, _countof(materialCodeString), "MaterialCode" ); const INT material_Info_tail_idx = _sntprintf( materialInfoString, _countof(materialInfoString), "IGType" ); const INT material_count_tail_idx = _sntprintf( materialCountString, _countof(materialCountString), "MaterialCount" ); for( char i=0 ; im_pMaterial[i].m_ItemCode = GetDataWORD( materialCodeString, nRow ); pInfo->m_pMaterial[i].m_ItemTypeIndex = GetDataDWORD( materialInfoString, nRow ); pInfo->m_pMaterial[i].m_byItemNum = GetDataWORD( materialCountString, nRow ); if( 0 != pInfo->m_pMaterial[i].m_ItemCode ) { FASSERT( 0 != pInfo->m_pMaterial[i].m_byItemNum ); ++pInfo->m_byMatCount; } } }; pInfo->m_Money = (MONEY)GetDataNumber( "Money", nRow ); // <--- À½... ÀÌ Å¸ÀÔÀº ¾îij Àд Áö È®ÀÎÇØ º¼ °Í. // °á°ú¹° pInfo->m_byCreateRatio = GetDataBYTE( "SuccessRatio", nRow ); pInfo->m_byResultType = GetDataBYTE( "bResultType", nRow ); FASSERT( pInfo->m_byResultType == sITEM_COMPOSE_LIST::RESULTTYPE_ITEMCODE || pInfo->m_byResultType == sITEM_COMPOSE_LIST::RESULTTYPE_REWARDCODE ); pInfo->m_Result.m_ItemCode = GetDataWORD( "ResultItemCode", nRow ); pInfo->m_Result.m_ItemTypeIndex = GetDataWORD( "ResultIGType", nRow ); pInfo->m_Result.m_byItemNum = GetDataBYTE( "ResultItemCount", nRow ); { // Á¶ÇÕ °¡´É ¸Ê ÄÚµå ¸ñ·Ï TCHAR allowedMapCode[32] = { 0, }; const INT allowedMapCode_tail_idx = _sntprintf( allowedMapCode, _countof(allowedMapCode), "AllowedMapCode" ); for( INT i=0 ; im_MapCode[i] = GetDataWORD( allowedMapCode, nRow ); } }; #ifndef _SERVER //Client Only #ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER DWORD category_order = MAKE_CATEGORY_ORDER(pInfo->m_Code, pInfo->m_pCategory[0], pInfo->m_pCategory[1]); m_ComposeCategoryMap.insert(ComposeCategotyMap::value_type(category_order, pInfo)); #else DWORD category_order = MAKE_CATEGORY_ORDER(pInfo->m_Code, pInfo->m_dwCategory1, pInfo->m_dwCategory2); m_ComposeCategoryMap.insert(ComposeCategotyMap::value_type(category_order, pInfo)); #endif #endif //_SERVER ValidCheck(pInfo); } return TRUE; } VOID ItemComposeListParser::Reload() { } VOID ItemComposeListParser::Unload() { // Á¶ÇÕÁ¤º¸ ³»¸² if( m_pComposeListHash ) { m_pComposeListHash->SetFirst(); while(sITEM_COMPOSE_LIST* pComposeList = m_pComposeListHash->GetNext()) { SAFE_DELETE( pComposeList ); } m_pComposeListHash->RemoveAll(); } } //BOOL ItemComposeListParser::LoadEx( eSCRIPT_CODE ScriptCode, const TCHAR* pszFileName, BOOL bReload ) //{ // FASSERT( m_pComposeListHash != NULL ); // return IParser::LoadEx( ScriptCode, pszFileName, bReload ); //} BOOL ItemComposeListParser::LoadScript( eSCRIPT_CODE scriptCode, BOOL bReload ) { switch( scriptCode ) { case SCRIPT_ITEMCOMPOSELIST: return _Load( bReload ); } return FALSE; } VOID ItemComposeListParser::ValidCheck(sITEM_COMPOSE_LIST* pComposeInfo) { CODETYPE ItemCode = 0; BASE_ITEMINFO *pItemInfo = NULL; //Àç·Î´Â üũ ÇÏÁö¸»ÀÚ. /* for( int i = 0 ; i m_pMaterial[i].m_ItemCode; if( ItemCode != 0 ) { pItemInfo = ItemInfoParser::Instance()->GetItemInfo(ItemCode); if(pItemInfo) { if( (pItemInfo->m_byDupNum > 1) && pComposeInfo->m_pMaterial[i].m_ItemTypeIndex != 0) SUNLOG( eCRITICAL_LOG, "[ItemComposeListParser] Index(%u) Not Armor or Weapon ItemCode(%u)\n",pComposeInfo->m_Code, ItemCode ); } else { SUNLOG( eCRITICAL_LOG, "[ItemComposeListParser] Index(%u) Not Exist Item Code(%u) \n",pComposeInfo->m_Code, ItemCode ); } } } */ ItemCode = pComposeInfo->m_Result.m_ItemCode; if( ItemCode != 0 ) { pItemInfo = ItemInfoParser::Instance()->GetItemInfo(ItemCode); if(pItemInfo) { if( (pItemInfo->m_byDupNum > 1) && pComposeInfo->m_Result.m_ItemTypeIndex != 0) SUNLOG( eCRITICAL_LOG, "[ItemComposeListParser] Ë÷Òý£¨%u£©²»ÊÇ×°±¸»òÎäÆ÷ItemCode(%u)\n",pComposeInfo->m_Code, ItemCode ); } else { SUNLOG( eCRITICAL_LOG, "[ItemComposeListParser] Ë÷Òý£¨%u£©²»´æÔÚµÄItemCode(%u) \n",pComposeInfo->m_Code, ItemCode ); } } }