Files
Sun1602/Client/GameClient/HeroVoiceInfoParser.cpp
T
2022-10-26 12:25:11 +08:00

176 lines
5.3 KiB
C++

//------------------------------------------------------------------------------
//
// (C) 2005 y2jinc
//------------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#include "HeroVoiceInfoParser.h"
#include <SolarFileReader.h>
//----------------------------------------------------------------------------
/**
*/
HeroVoiceInfoParser::HeroVoiceInfoParser(): m_pDataTable ( NULL )
{
}
//----------------------------------------------------------------------------
/**
*/
HeroVoiceInfoParser::~HeroVoiceInfoParser()
{
assert( m_pDataTable == NULL);
}
//----------------------------------------------------------------------------
/**
*/
VOID HeroVoiceInfoParser::Release()
{
Unload();
delete m_pDataTable;
m_pDataTable = NULL;
}
//----------------------------------------------------------------------------
/**
*/
VOID HeroVoiceInfoParser::Init(DWORD dwPoolSize , char *pszPackFileName)
{
assert( m_pDataTable == NULL );
m_pDataTable = new util::SolarHashTable<BASE_HeroVoiceInfo*>;
m_pDataTable->Initialize( dwPoolSize );
SetPackFileName( pszPackFileName );
}
//----------------------------------------------------------------------------
/**
*/
VOID HeroVoiceInfoParser::Init(DWORD dwPoolSize)
{
assert( m_pDataTable == NULL );
m_pDataTable = new util::SolarHashTable<BASE_HeroVoiceInfo*>;
m_pDataTable->Initialize( dwPoolSize );
}
//----------------------------------------------------------------------------
/**
*/
VOID HeroVoiceInfoParser::Unload()
{
BASE_HeroVoiceInfo * pInfo = NULL;
if( m_pDataTable == NULL )
{
return;
}
m_pDataTable->SetFirst();
while( pInfo = m_pDataTable->GetNext() )
{
delete pInfo;
}
m_pDataTable->RemoveAll();
}
//----------------------------------------------------------------------------
/**
*/
BASE_HeroVoiceInfo* HeroVoiceInfoParser::GetHeroVoiceInfo(DWORD dwKey)
{
return m_pDataTable->GetData( dwKey );
}
#pragma warning ( push )
#pragma warning ( disable : 4244)
void _VOICEINFO::Load(util::SolarFileReader &sr)
{
sr.GetNextTokenType(TOKEN_NUMBER); dwVoiceID = sr.GetTokenNumber();
sr.GetNextTokenType(TOKEN_NUMBER); byVoiceType = sr.GetTokenNumber();
sr.GetNextTokenType(TOKEN_NUMBER); dwTextID = sr.GetTokenNumber();
sr.GetNextTokenType(TOKEN_NUMBER); byTextType = sr.GetTokenNumber();
}
void _VOICEINFO::Load(IParser* parser, const char* prefix, int row)
{
assert(parser);
assert(prefix);
assert(row >= 0);
char colName[32];
// voice ID
sprintf(colName, "%s", prefix);
dwVoiceID = parser->GetDataNumber(colName, row);
// voice type
sprintf(colName, "%s_VoiceType", prefix);
byVoiceType = parser->GetDataNumber(colName, row);
// text id
sprintf(colName, "%s_Text", prefix);
dwTextID = parser->GetDataNumber(colName, row);
// text type
sprintf(colName, "%s_TextType", prefix);
byTextType = parser->GetDataNumber(colName, row);
}
BOOL HeroVoiceInfoParser::LoadScript(eSCRIPT_CODE ScriptCode, BOOL bReload)
{
assert(ScriptCode == SCRIPT_HERO_VOICE_INFO);
int rowSize = GetRowSize();
for (int row = 0; row < rowSize; ++row)
{
BASE_HeroVoiceInfo* info = new BASE_HeroVoiceInfo;
assert(info);
info->m_w_CharacterCode = GetDataNumber("CharacterCode", row);
#ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
info->m_w_CharacterGender = GetDataNumber("GenderType", row);
#endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
strncpy(info->m_s_Desc, GetDataString("Desc", row), 64);
info->m_LimitUse.Load(this, "LimitUse", row);
info->m_NoTarget1.Load(this, "NOTAR1", row);
info->m_NoTarget2.Load(this, "NOTAR2", row);
info->m_LackMon.Load(this, "LackMon", row);
info->m_NOREPItem.Load(this, "NOREPItem", row);
info->m_LackSP.Load(this, "LackSP", row);
info->m_LackMP.Load(this, "LackMP", row);
info->m_LackPoint.Load(this, "LackPoi", row);
info->m_FarTarget1.Load(this, "FarTag1", row);
info->m_FarTarget2.Load(this, "FarTag2", row);
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
info->lack_fp_.Load(this, "LackFP", row);
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
HeroVoiceCode voice_code;
voice_code.wCharacterCode = info->m_w_CharacterCode;
#ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
voice_code.wCharacterGender = info->m_w_CharacterGender;
#endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
//assert(!m_pDataTable->GetData(voice_code.dwVoiceCode));
m_pDataTable->Add(info, voice_code.dwVoiceCode);
}
return TRUE;
}
#ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
DWORD HeroVoiceInfoParser::GetVoiceInfoKeyCode(eCHAR_TYPE character_type, GenderType::Value gender_type)
{
HeroVoiceCode voice_code;
voice_code.wCharacterCode = character_type;
voice_code.wCharacterGender = gender_type;
return voice_code.dwVoiceCode;
}
#endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
#pragma warning ( pop )