Files
Sun1602/ProgramCommon/ExtraStoneOptionInfoParser.cpp
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

135 lines
3.2 KiB
C++

#include "StdAfx.h"
#include ".\extrastoneoptioninfoparser.h"
ExtraStoneOptionInfoParser::ExtraStoneOptionInfoParser(void):
m_pExtraStoneOptionInfoHash(NULL)
{
m_pszFileName[0] = '\0';
}
ExtraStoneOptionInfoParser::~ExtraStoneOptionInfoParser(void)
{
FASSERT( m_pExtraStoneOptionInfoHash == NULL );
Release();
}
VOID ExtraStoneOptionInfoParser::Init( DWORD dwOptionInfoSize )
{
FASSERT( m_pExtraStoneOptionInfoHash == NULL );
m_pExtraStoneOptionInfoHash = new _EXTRASTONE_OPT_INFO_HASH;
m_pExtraStoneOptionInfoHash->Initialize( dwOptionInfoSize );
}
VOID ExtraStoneOptionInfoParser::Init( DWORD dwOptionInfoSize, char * pszPackFileName )
{
Init( dwOptionInfoSize );
SetPackFileName( pszPackFileName );
}
VOID ExtraStoneOptionInfoParser::Release()
{
Unload();
SAFE_DELETE( m_pExtraStoneOptionInfoHash );
}
#pragma warning ( push )
#pragma warning ( disable : 4244)
BOOL ExtraStoneOptionInfoParser::_Load( BOOL bReload )
{
int nRowSize = GetRowSize();
for( int nRow = 0; nRow < nRowSize; nRow++ )
{
SLOTCODE Index = GetDataNumber( "bIndex", nRow );
WORD wItemType = (CODETYPE)GetDataNumber( "bEquipType", nRow );
LEVELTYPE ItemLV = (CODETYPE)GetDataNumber( "bItemLV", nRow );
sEXTRASTONE_OPT_INFO * pInfo = const_cast<sEXTRASTONE_OPT_INFO *>(GetExtraStoneOptionInfo( wItemType ));
if( !pInfo )
{
// 绝栏搁!
pInfo = new sEXTRASTONE_OPT_INFO;
pInfo->m_dwIndex = Index;
pInfo->m_wItemType = wItemType;
pInfo->m_ItemLV = ItemLV;
m_pExtraStoneOptionInfoHash->Add( pInfo, pInfo->m_wItemType );
}
else
{
if( FALSE == bReload )
{
SUNLOG( eCRITICAL_LOG, "script file data error, 文件 = %s, ItemType = %d", m_pszFileName, wItemType );
FASSERT( !"data error." );
}
}
pInfo->m_dwIndex = Index;
pInfo->m_wItemType = wItemType;
pInfo->m_ItemLV = ItemLV;
pInfo->m_wOptionIndex = GetDataNumber( "bOptionCode", nRow );
pInfo->m_dwOptionNCode = GetDataNumber( "dOptionNCode", nRow );
pInfo->m_byValueType = GetDataNumber( "bValueType", nRow );
pInfo->m_dwValue[0] = GetDataNumber( "bValue0", nRow );
pInfo->m_dwValue[1] = GetDataNumber( "bValue1", nRow );
pInfo->m_dwValue[2] = GetDataNumber( "bValue2", nRow );
pInfo->m_dwValue[3] = GetDataNumber( "bValue3", nRow );
}
return TRUE;
}
BOOL ExtraStoneOptionInfoParser::_LoadExtra( BOOL bReload )
{
__UNUSED(bReload);
return TRUE;
}
BOOL ExtraStoneOptionInfoParser::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload )
{
switch( ScriptCode )
{
case SCRIPT_EXTRASTONEOPTIONINFO :
return _Load( bReload );
}
return FALSE;
}
#pragma warning ( pop )
VOID ExtraStoneOptionInfoParser::Reload()
{
// Load( this->m_pszFileName, TRUE );
}
VOID ExtraStoneOptionInfoParser::Unload()
{
// 炼钦沥焊 郴覆
if (m_pExtraStoneOptionInfoHash)
{
m_pExtraStoneOptionInfoHash->SetFirst();
while (sEXTRASTONE_OPT_INFO* extra_option = m_pExtraStoneOptionInfoHash->GetNext())
{
SAFE_DELETE(extra_option);
}
m_pExtraStoneOptionInfoHash->RemoveAll();
}
}
//BOOL ExtraStoneOptionInfoParser::LoadEx( eSCRIPT_CODE ScriptCode, const TCHAR* pszFileName, BOOL bReload )
//{
// FASSERT( m_pExtraStoneOptionInfoHash != NULL );
// return IParser::LoadEx( ScriptCode, pszFileName, bReload );
//}