Files
Sun1602/ProgramCommon/MissionRewardParser.cpp
2022-10-26 12:25:11 +08:00

144 lines
3.7 KiB
C++

#include "StdAfx.h"
#include "MissionRewardParser.h"
#include <Struct.h>
#include "ItemInfoParser.h"
#if SUN_CODE_BACKUP
static VOID CheckValidItemCode( SLOTCODE code )
{
if( 0 == code ) return;
BASE_ITEMINFO * pInfo = ItemInfoParser::Instance()->GetItemInfo( code );
FASSERT( pInfo && "쉽쟨돛야꼇닸瞳돨덜쯤." );
}
#endif
MissionRewardParser::MissionRewardParser(): m_pDataTable ( NULL )
{
}
MissionRewardParser::~MissionRewardParser()
{
FASSERT( m_pDataTable == NULL);
}
VOID MissionRewardParser::Release()
{
UnLoad();
delete m_pDataTable;
m_pDataTable = NULL;
}
VOID MissionRewardParser::Init(DWORD dwPoolSize)
{
FASSERT( m_pDataTable == NULL );
m_pDataTable = new util::SolarHashTable<MissionRewardInfo*>;
m_pDataTable->Initialize( dwPoolSize );
}
VOID MissionRewardParser::Init( DWORD dwPoolSize, char * pszPackFileName )
{
Init( dwPoolSize );
SetPackFileName( pszPackFileName );
}
void MissionRewardParser::UnLoad()
{
if (m_pDataTable == NULL) {
return;
};
m_pDataTable->SetFirst();
while (MissionRewardInfo* info = m_pDataTable->GetNext()) {
delete info;
}
m_pDataTable->RemoveAll();
}
VOID MissionRewardParser::Reload()
{
// Load( m_pszFileName, TRUE );
}
MissionRewardInfo* MissionRewardParser::GetMissionReward( BYTE byMissionNo )
{
return m_pDataTable->GetData( byMissionNo );
}
//#pragma warning ( push )
//#pragma warning ( disable : 4244)
BOOL MissionRewardParser::_Load( BOOL bReload )
{
__UNUSED(bReload);
CHAR pszDesc[REWARD_DESC_LENGTH];
int nRowSize = GetRowSize();
for( int nRow = 0; nRow < nRowSize; ++nRow )
{
DWORD dwMissionNo = GetDataDWORD( "dwIndex", nRow );
FASSERT( SAFE_NUMERIC_TYPECAST(DWORD,dwMissionNo,BYTE) );
BYTE byMissionNo = (BYTE)dwMissionNo;
strncpy( pszDesc, GetDataString( "sDesc", nRow ), REWARD_DESC_LENGTH ); // 이 코드 도대체 왜 있는거임?
MissionRewardInfo* pMRI = m_pDataTable->GetData( byMissionNo );
if (!pMRI)
{
pMRI = new MissionRewardInfo;
ZeroMemory(pMRI, sizeof(MissionRewardInfo));
pMRI->m_byMissionNo = byMissionNo;
m_pDataTable->Add( pMRI, byMissionNo );
}
DWORD dwClassCode = GetDataDWORD( "dwClassCode", nRow );
strncpy( pMRI->m_pszDesc, pszDesc, REWARD_DESC_LENGTH ); // 빠진거 같아서 추가함
FASSERT( (MissionRewardInfo::CLASS_CODE_LOWER < dwClassCode) && (MissionRewardInfo::CLASS_CODE_UPPER > dwClassCode) );
MissionRewardInfo::sCLASS* pCLASS = &(pMRI->CLASSs[dwClassCode]);
pCLASS->m_bClassCode = (BYTE)dwClassCode;
MissionRewardInfo::sCLASS::sREWARD* pReward = pCLASS->REWARDs;
MissionRewardInfo::sCLASS::sREWARD* pPreReward = NULL;
TCHAR szTemp[MAX_FIELD_NAME_SIZE];
for( DWORD i=0 ; i< MissionRewardInfo::MISSION_REWARD_MAX_SIZE ; ++i, ++pReward )
{
_snprintf( szTemp, MAX_FIELD_NAME_SIZE, "bMissionNum%d\0", i+1 );
pReward->m_bMissionNum = GetDataBYTE( szTemp, nRow );
_snprintf( szTemp, MAX_FIELD_NAME_SIZE, "wRewardCode%d\0", i+1 );
pReward->m_wRewardCode = GetDataWORD( szTemp, nRow );
if( 0 != pReward->m_bMissionNum && 0 == pReward->m_wRewardCode ||
0 == pReward->m_bMissionNum && 0 != pReward->m_wRewardCode )
{
SUNLOG( eCRITICAL_LOG, "[훨蛟쉽쟨신굶댄轎:%u,%u]\n", byMissionNo, dwClassCode );
}
if( (pPreReward && pPreReward->m_bMissionNum >= pReward->m_bMissionNum) ||
(pPreReward && pPreReward->m_bMissionNum == 0) ||
(NULL == pPreReward && pReward->m_bMissionNum == 0) )
{
SUNLOG( eCRITICAL_LOG, "[훨蛟쉽쟨신굶댄轎:%u,%u]쉽쟨붤펜밍", byMissionNo, dwClassCode );
}
pPreReward = pReward;
}
}
return TRUE;
}
//#pragma warning ( pop )
BOOL MissionRewardParser::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload )
{
switch( ScriptCode )
{
case SCRIPT_MISSIONREWARDINFO:
return _Load( bReload );
}
return FALSE;
}