#include "StdAfx.h" #include ".\rewardinfolist.h" #include #include #include "ItemInfoParser.h" #include //////////////////////////////////////////RewardInfo////////////////////////////////////////////// //////////////////////////////////////////RewardInfoList////////////////////////////////////////// RewardInfoList::RewardInfoList(void) { } RewardInfoList::~RewardInfoList(void) { Unload(); } void RewardInfoList::Unload() { RewardInfo * pInfo = NULL; REWARD_HASH::iterator it, end(m_RewardInfoHash.end()); for( it = m_RewardInfoHash.begin(); it != end ; ++it ) { pInfo = it->second; SAFE_DELETE(pInfo); } m_RewardInfoHash.clear(); } void RewardInfoList::Init(char * pszPackFile) { SetPackFileName( pszPackFile ); } #pragma warning ( push ) #pragma warning ( disable : 4244) #pragma warning ( disable : 4800) BOOL RewardInfoList::_Load(BOOL reloaded) { __UNUSED(reloaded); int nRowSize = GetRowSize(); TCHAR szTemp[MAX_FIELD_NAME_SIZE] = {0,}; DWORD info_index = 0; for( int nRow = 0; nRow < nRowSize; ++nRow ) { info_index = GetDataNumber("Index",nRow); if ((FindRewardInfo(info_index) != NULL)) { #ifndef _SERVER //#if'N'def assert(!"[RewardInfoList::_Load]重复索引"); #endif //_SERVER SUNLOG(eCRITICAL_LOG, "[RewardInfoList::_Load]重复索引 = %d", info_index); continue; } RewardInfo * pInfo = new RewardInfo; pInfo->SetIndex(info_index); m_RewardInfoHash[ pInfo->GetIndex() ] = pInfo; strncpy( pInfo->m_pszDesc, GetDataString("Description",nRow), RewardInfo::MAX_DESC_LENGTH ); pInfo->SetDCode( GetDataNumber("DescriptionCode",nRow) ); pInfo->SetExp( GetDataNumber("Exp",nRow) ); pInfo->SetHime( GetDataNumber("Hime",nRow) ); #ifdef _NA_1419_20100121_ACCUMULATE_POINT pInfo->SetCoin( GetDataNumber("Coin",nRow) ); #endif #ifdef _NA_003027_20111013_HONOR_SYSTEM pInfo->SetTitle( GetDataWORD("Title",nRow) ); pInfo->SetReputeCode( GetDataWORD("ReputeCode",nRow) ); pInfo->SetReputePoint( GetDataWORD("ReputePoint",nRow) ); #endif //_NA_003027_20111013_HONOR_SYSTEM pInfo->SetChaoTime( GetDataNumber("ChaoTime",nRow) ); pInfo->SetItemCode( GetDataNumber("Fixed_IC",nRow) ); pInfo->SetItemTypeIndex( GetDataNumber("IGtype",nRow) ); if( pInfo->GetItemCode() !=0 ) { if( !IsExistItemInScript( pInfo->GetItemCode(), pInfo->GetItemTypeIndex() ) ) { SUNLOG( eCRITICAL_LOG, "[Index : %u]\n", pInfo->GetIndex()); pInfo->SetItemTypeIndex(1); } } pInfo->SetSkillCode( GetDataNumber("Skill",nRow) ); pInfo->SetRefType( GetDataNumber("ReferenceType",nRow) ); if( 0 != pInfo->GetItemCode() && NULL == ItemInfoParser::Instance()->GetItemInfo(pInfo->GetItemCode()) ) { SUNLOG( eCRITICAL_LOG, "[RewardInfoList] Fixed ItemCode(%u) doesn't exist\n", pInfo->GetItemCode()); } pInfo->SetSelectNum( GetDataNumber("Select_Num",nRow) ); for(int i = 0 ; i < RewardInfo::MAX_DROP_INDEX_NUM ; ++i ) { _snprintf( szTemp, MAX_FIELD_NAME_SIZE, "Sel_IC%d\0", i+1 ); pInfo->SetTypeCode( i, GetDataNumber(szTemp,nRow) ); _snprintf( szTemp, MAX_FIELD_NAME_SIZE, "IGtype%d\0", i+1 ); pInfo->SetTypeIndex( i, GetDataNumber(szTemp,nRow) ); #ifdef _NA_006801_20130705_RENEWAL_RANKINGSYSTEM _snprintf( szTemp, MAX_FIELD_NAME_SIZE, "TimeLimit%d\0", i+1); pInfo->SetTimeLimit( i, GetDataNumber(szTemp,nRow)); #endif //_NA_006801_20130705_RENEWAL_RANKINGSYSTEM // 鸥涝 眉农 if( pInfo->GetRefType() == RewardInfo::REF_TYPE_SELECT && SCItemSlot::IsOverlap( pInfo->GetTypeCode(i) ) ) { if( pInfo->GetTypeIndex(i) <= 0 ) { SUNLOG( eCRITICAL_LOG, "[警告:错误:%d] 无效的堆栈项数(%d)\n", pInfo->GetIndex(), pInfo->GetTypeCode(i) ); pInfo->SetTypeIndex(i, 1); } } if( pInfo->GetRefType() == RewardInfo::REF_TYPE_SELECT || pInfo->GetRefType() == RewardInfo::REF_TYPE_EVENT_ITEMCODE ) { if( 0!= pInfo->GetTypeCode(i) && NULL == ItemInfoParser::Instance()->GetItemInfo(pInfo->GetTypeCode(i)) ) SUNLOG( eCRITICAL_LOG, "[RewardInfoList]选择的物品代码(%u)不存在\n", pInfo->GetTypeCode(i)); } } if( pInfo->GetItemCode() != 0 && SCItemSlot::IsOverlap(pInfo->GetItemCode()) ) { if( pInfo->GetItemTypeIndex() <= 0 ) { SUNLOG( eCRITICAL_LOG, "[警告:错误:%d] 无效的堆栈项数(%d)\n", pInfo->GetIndex(), pInfo->GetItemTypeIndex() ); pInfo->SetItemTypeIndex(1); } } // int count = 0; for(int i = 0 ; i < RewardInfo::MAX_DROP_INDEX_NUM ; ++i ) { if( pInfo->GetTypeCode(i) != 0 ) { ++count; } } if( pInfo->GetRefType() == RewardInfo::REF_TYPE_SELECT || pInfo->GetRefType() == RewardInfo::REF_TYPE_RANDOM ) { if( count < pInfo->GetSelectNum() || ( count == 0 && pInfo->GetSelectNum() > 0 ) || ( pInfo->GetSelectNum() == 0 && count > 0 ) ) { SUNLOG( eCRITICAL_LOG, "[警告:错误:%d] SelectNum(%d)的数量无效\n", pInfo->GetIndex(), pInfo->GetSelectNum() ); } } #ifdef _NA_20100307_BETAKEY_SYSTEM pInfo->SetBetaKey( GetDataInt("BetaKeyCode", nRow) ); #endif } return TRUE; } #pragma warning ( pop ) void RewardInfoList::Reload() { // Load( m_pszFileName, TRUE ); } RewardInfo * RewardInfoList::FindRewardInfo( DWORD Index ) { REWARD_HASH::iterator itr = m_RewardInfoHash.find( Index ); if ( itr != m_RewardInfoHash.end() ) { return itr->second; } return NULL; } BOOL RewardInfoList::IsExistItemInScript(SLOTCODE IN ItemCode, DWORD dwItemTypeIndex) { if( NULL == ItemInfoParser::Instance()->GetItemInfo(ItemCode) ) { SUNLOG( eCRITICAL_LOG, "[RewardInfoList] 物品(%u) 不存在.", ItemCode); return FALSE; } if( dwItemTypeIndex <= 0 ) { SUNLOG( eCRITICAL_LOG, "[RewardInfoList] 它是无效物品的数量(%d)。.", dwItemTypeIndex ); return FALSE; } if( !SCItemSlot::IsOverlap(ItemCode) ) { if( dwItemTypeIndex > 1 ) { SUNLOG( eCRITICAL_LOG, "[RewardInfoList] 这是一个不可复制的物品(%d).", ItemCode ); return FALSE; } } return TRUE; } BOOL RewardInfoList::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload ) { switch( ScriptCode ) { case SCRIPT_REWARDINFOLIST: return _Load( bReload ); } return FALSE; } VOID RewardInfoList::Release() { Unload(); }