Files
2022-10-26 12:25:11 +08:00

138 lines
3.0 KiB
C++

#include "stdafx.h"
#include "GroupParser.h"
#include <SolarFileReader.h>
#include "NPCInfoParser.h"
GroupParser::GroupParser() : m_pGroupHashTable ( NULL )
{
}
GroupParser::~GroupParser()
{
ASSERT( m_pGroupHashTable == NULL );
}
VOID GroupParser::Release()
{
Unload();
SAFE_DELETE(m_pGroupHashTable);
}
VOID GroupParser::Init( DWORD dwPoolSize )
{
ASSERT( m_pGroupHashTable == NULL );
m_pGroupHashTable = new util::SolarHashTable<BASE_GROUPINFO*>;
m_pGroupHashTable->Initialize( dwPoolSize );
}
void GroupParser::Unload()
{
if (m_pGroupHashTable == NULL) {
return;
}
m_pGroupHashTable->SetFirst();
while (BASE_GROUPINFO* group_info = m_pGroupHashTable->GetNext())
{
SAFE_DELETE(group_info);
}
m_pGroupHashTable->RemoveAll();
}
VOID GroupParser::Reload()
{
// Load( m_pszFileName, TRUE );
}
//#pragma warning ( push )
//#pragma warning ( disable : 4244)
BOOL GroupParser::_Load( BOOL bReload )
{
int nRowSize = GetRowSize();
char szTemp[32];
for( int nRow = 0; nRow < nRowSize; ++nRow )
{
WORD wID = GetDataWORD( "GroupID", nRow );
BASE_GROUPINFO * pInfo = m_pGroupHashTable->GetData( wID );
if( !pInfo )
{
// 绝栏搁!
pInfo = new BASE_GROUPINFO;
m_pGroupHashTable->Add( pInfo, wID );
}
else
{
if( FALSE == bReload )
{
SUNLOG( eCRITICAL_LOG, "脚本数据错误 = %s, ID = %d", GetCurFileName(), wID );
ASSERT( !"数据有错误." );
}
}
pInfo->wGroupID = wID;
pInfo->dwFormationType = GetDataDWORD( "FormationType", nRow );
pInfo->fLinkRange = GetDataFloat( "LinkRange", nRow );
pInfo->dwLeaderCode = GetDataDWORD( "LeaderCode", nRow );
for( int i = 0; i < MAX_FOLLOWER_NUM; ++i )
{
_snprintf( szTemp, 32, "FollowerCode%d", i+1 );
pInfo->FollowerInfo[i].dwMonCode = GetDataDWORD( szTemp, nRow );
_snprintf( szTemp, 32, "FollowerNum%d", i+1 );
pInfo->FollowerInfo[i].wNum = GetDataWORD( szTemp, nRow );
}
CheckValidity( pInfo );
}
return TRUE;
}
BOOL GroupParser::CheckValidity( BASE_GROUPINFO *pGroupInfo )
{
BOOL bSuccess = TRUE;
// 府歹 阁胶磐
BASE_NPCINFO *pBaseNPCInfo = NPCInfoParser::Instance()->GetNPCInfo( pGroupInfo->dwLeaderCode );
if( !pBaseNPCInfo )
{
SUNLOG( eCRITICAL_LOG, "[GroupParser] GroupID[%d] NPCInfo[%d] 不存在! \n", pGroupInfo->wGroupID, pGroupInfo->dwLeaderCode );
pGroupInfo->dwLeaderCode = 1;
bSuccess = FALSE;
}
// 绿捍
for( int i = 0; i < MAX_FOLLOWER_NUM; ++i )
{
if( !pGroupInfo->FollowerInfo[i].dwMonCode ) continue;
pBaseNPCInfo = NPCInfoParser::Instance()->GetNPCInfo( pGroupInfo->FollowerInfo[i].dwMonCode );
if( !pBaseNPCInfo )
{
SUNLOG( eCRITICAL_LOG, "[GroupParser] GroupID[%d] NPCInfo[%d] 不存在! \n", pGroupInfo->wGroupID, pGroupInfo->FollowerInfo[i].dwMonCode );
pGroupInfo->FollowerInfo[i].dwMonCode = 0;
pGroupInfo->FollowerInfo[i].wNum = 0;
bSuccess = FALSE;
}
}
return bSuccess;
}
//#pragma warning ( pop )
BOOL GroupParser::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload )
{
switch( ScriptCode )
{
case SCRIPT_GROUP:
return _Load( bReload );
};
return FALSE;
}