Files
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

134 lines
4.2 KiB
C++

#include "StdAfx.h"
#include ".\CollectionParser.h"
//C_NA_0_20100520_ACSYSTEM_CHANGED
#include "../../Achievement/CollectTreasureBoxInfo.h"
CollectionParser::CollectionParser(void)
{
m_CollectionInfoHash.Initialize( MAX_COLLECTION_LIST_NUM );
}
CollectionParser::~CollectionParser(void)
{
Unload();
//C_NA_0_20100520_ACSYSTEM_CHANGED
CollectTreasureBoxInfo::Instance()->DestroyInstance();
}
VOID CollectionParser::Init( char * pszPackFileName )
{
SetPackFileName( pszPackFileName );
}
VOID CollectionParser::Reload()
{
// Load( m_tszFileName, TRUE );
}
VOID CollectionParser::Unload()
{
COLLECTION_INFO_HASH::iterator it = m_CollectionInfoHash.begin(),
end = m_CollectionInfoHash.end();
for ( ; it != end; ++it)
{
const CollectionInfo* info = *it;
delete info;
}
m_CollectionInfoHash.RemoveAll();
}
BOOL CollectionParser::_Validating( const CollectionInfo& Collection ) const
{
if( Collection.m_CollectionID == 0 ||
Collection.m_CollectionID == StrToWzID("NULL") )
{
SUNLOG( eCRITICAL_LOG, "[CollectionParser] user ID[%d] cannot be 0 or NULL.", Collection.m_CollectionID );
ASSERT(FALSE);
}
return TRUE;
}
BOOL CollectionParser::_Load( BOOL bReload )
{
__UNUSED(bReload);
char szTemp[5] = {0,};
CollectionInfo Collection;
int rowSize = GetRowSize();
for( int row = 0; row < rowSize; ++row )
{
memset(&Collection,0,sizeof(CollectionInfo));
strncpy(szTemp, GetDataString("CollectionID",row), 4);
Collection.m_CollectionID = StrToWzID(szTemp);
Collection.m_dwRespawnTime = GetDataDWORD( "RespawnTime", row );
Collection.m_dwCollectingTime = GetDataDWORD( "CollectingTime", row );
strncpy(szTemp, GetDataString("AnimationCode_Start", row), 4);
Collection.m_wzidAnimation[CollectionInfo::START] = StrToWzID(szTemp);
strncpy(szTemp, GetDataString("AnimationCode_Loop", row), 4);
Collection.m_wzidAnimation[CollectionInfo::LOOP] = StrToWzID(szTemp);
strncpy(szTemp, GetDataString("AnimationCode_End", row), 4);
Collection.m_wzidAnimation[CollectionInfo::END] = StrToWzID(szTemp);
strncpy(szTemp, GetDataString("Collectable_EffectCode", row), 4);
Collection.m_wzidEffect[CollectionInfo::COLLECTABLE] = StrToWzID(szTemp);
//_NA001385_20090924_DOMINATION_STAMP
strncpy(szTemp, GetDataString("Start_EffectCode", row), 4);
Collection.m_wzidEffect[CollectionInfo::COLLECTING] = StrToWzID(szTemp);
//
strncpy(szTemp, GetDataString("Success_EffectCode", row), 4);
Collection.m_wzidEffect[CollectionInfo::SUCCESS] = StrToWzID(szTemp);
Collection.m_byScriptType = GetDataBYTE( "ScriptType", row );
Collection.m_ItemCode = GetDataWORD( "ItemCode", row );
Collection.m_IGType = GetDataInt( "IGType", row );
Collection.m_Condition[CollectionInfo::QUEST] = GetDataDWORD( "Condision_Quest", row );
//C_NA_0_20100520_ACSYSTEM_CHANGED
Collection.m_Condition[CollectionInfo::AC] = GetDataDWORD( "AC_LocationCode", row );
#ifdef _SERVER
CollectTreasureBoxInfo::Instance()->AddCollectCondition(
static_cast<WORD>(Collection.m_Condition[CollectionInfo::AC]),
GetDataWORD( "AC_ConnectionCode1", row ),
GetDataWORD( "AC_ConnectionCode2", row ));
#endif
Collection.m_Condition[CollectionInfo::MAPOBJID] = GetDataDWORD( "Condision_ObjectID", row );
Collection.m_Condition[CollectionInfo::STAMP] = GetDataDWORD( "Condision_Stamp", row );
Collection.m_Condition[CollectionInfo::COUNT] = 1; // 채집물은 1번만 채집 가능하다. (1회성 컨텐츠임. 1이상일시 와우의 채광방식)
#ifdef _NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER
Collection.m_Condition[CollectionInfo::TRIGGER] = GetDataDWORD( "Condision_Trigger", row );
#endif //_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER
//.//
_Validating(Collection);
//.//
if( NULL == FindCollectionInfo(Collection.m_CollectionID) )
m_CollectionInfoHash.Add(new const CollectionInfo(Collection), Collection.m_CollectionID);
}
return TRUE;
}
BOOL CollectionParser::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload )
{
switch( ScriptCode )
{
case SCRIPT_COLLECT:
return _Load( bReload );
break;
}
return FALSE;
}