110 lines
2.5 KiB
C++
110 lines
2.5 KiB
C++
#include "StdAfx.h"
|
||
#include "ExchangeRewardInfo.h"
|
||
#include <Struct.h>
|
||
#include <iostream>
|
||
|
||
//==================================================================================================
|
||
|
||
ExchangeRewardInfoParser::ExchangeRewardInfoParser() : m_pRewardInfoHash( NULL )
|
||
{
|
||
}
|
||
|
||
ExchangeRewardInfoParser::~ExchangeRewardInfoParser()
|
||
{
|
||
FASSERT( m_pRewardInfoHash == NULL );
|
||
}
|
||
|
||
VOID ExchangeRewardInfoParser::Init( DWORD dwPoolSize )
|
||
{
|
||
FASSERT( m_pRewardInfoHash == NULL );
|
||
m_pRewardInfoHash = new EXCHANGE_REWARDINFO_HASH;
|
||
m_pRewardInfoHash->Initialize( dwPoolSize );
|
||
}
|
||
|
||
|
||
VOID ExchangeRewardInfoParser::Init( DWORD dwPoolSize, char * pszPackFileName )
|
||
{
|
||
Init( dwPoolSize );
|
||
SetPackFileName( pszPackFileName );
|
||
}
|
||
|
||
VOID ExchangeRewardInfoParser::Release()
|
||
{
|
||
Unload();
|
||
|
||
SAFE_DELETE( m_pRewardInfoHash );
|
||
}
|
||
|
||
VOID ExchangeRewardInfoParser::Unload()
|
||
{
|
||
if( m_pRewardInfoHash )
|
||
{
|
||
while (EXCHANGE_REWARDINFO* pInfo = m_pRewardInfoHash->GetNext())
|
||
{
|
||
delete pInfo;
|
||
}
|
||
m_pRewardInfoHash->RemoveAll();
|
||
}
|
||
}
|
||
|
||
VOID ExchangeRewardInfoParser::Reload()
|
||
{
|
||
// Load( m_pszFileName, TRUE );
|
||
}
|
||
|
||
BOOL ExchangeRewardInfoParser::_Load( BOOL bReload )
|
||
{
|
||
int nRowSize = GetRowSize();
|
||
|
||
for( int nRow = 0; nRow < nRowSize; nRow++ )
|
||
{
|
||
EXCHANGE_REWARDINFO * pInfo = new EXCHANGE_REWARDINFO;
|
||
|
||
pInfo->m_Index = GetDataDWORD( "Index", nRow );
|
||
pInfo->m_ItemCount = GetDataWORD( "BNum", nRow );
|
||
pInfo->m_ItemCode = GetDataWORD( "ICode", nRow );
|
||
pInfo->m_RewardIndex = GetDataDWORD( "JCode", nRow );
|
||
|
||
DWORD RewardKey = MakeRewardKey( pInfo->m_ItemCode, pInfo->m_ItemCount );
|
||
EXCHANGE_REWARDINFO * pPrevInfo = m_pRewardInfoHash->GetData( RewardKey );
|
||
if( !pPrevInfo )
|
||
{
|
||
m_pRewardInfoHash->Add( pInfo, RewardKey );
|
||
}
|
||
else
|
||
{
|
||
if( bReload )
|
||
memcpy( pPrevInfo, pInfo, sizeof(EXCHANGE_REWARDINFO) );
|
||
else
|
||
{
|
||
ASSERT( !"ExchangeRewardInfo.txt 数据包含错误." );
|
||
SUNLOG( eCRITICAL_LOG, "[警告] ExchangeRewardInfo.txt:%d = %d 索引中的重叠键\n", pPrevInfo->m_Index, pInfo->m_Index );
|
||
}
|
||
SAFE_DELETE( pInfo );
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL ExchangeRewardInfoParser::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload )
|
||
{
|
||
switch( ScriptCode )
|
||
{
|
||
case SCRIPT_EXCHANGE_REWARD_INFO:
|
||
return _Load( bReload );
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
EXCHANGE_REWARDINFO * ExchangeRewardInfoParser::GetRewardInfo( SLOTCODE ItemCode, WORD ItemCount )
|
||
{
|
||
DWORD RewardKey = MakeRewardKey( ItemCode, ItemCount );
|
||
|
||
EXCHANGE_REWARDINFO *pInfo = m_pRewardInfoHash->GetData( RewardKey );
|
||
|
||
return pInfo;
|
||
}
|
||
|