140 lines
5.4 KiB
C++
140 lines
5.4 KiB
C++
#include "stdafx.h"
|
|
#include "SMonsterAffiliationDetailDB.h"
|
|
|
|
#include <kfile/KFileManager.h>
|
|
|
|
#include "SLog.h"
|
|
|
|
#include "SkillBaseFile.h"
|
|
#include <kfile/KStream.h>
|
|
#include "KTypes.h"
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// 몬스터 세부 계열 정보 DB 인스턴스 얻기
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
SMonsterAffiliationDetailDB & GetMonsterAffiliationDetailDB()
|
|
{
|
|
static SMonsterAffiliationDetailDB MonsterAffiliationDetailDB;
|
|
return MonsterAffiliationDetailDB;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// 생성자
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
SMonsterAffiliationDetailDB::SMonsterAffiliationDetailDB()
|
|
{
|
|
if( false == Load() )
|
|
{
|
|
SDEBUGLOG( "[SMonsterAffiliationDetailDB] Load Failed " );
|
|
assert( NULL );
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// 파괴자
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
SMonsterAffiliationDetailDB::~SMonsterAffiliationDetailDB()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// RDB 파일 불러오기
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
bool SMonsterAffiliationDetailDB::Load()
|
|
{
|
|
KStream* pRes( KFileManager::Instance().CreateStreamFromResource( "db_MonsterAffiliationDetailResource.rdb" ) );
|
|
if( NULL == pRes )
|
|
{
|
|
SLOG( "[SMonsterAffiliationDetailDB] Create Stream Failed - [db_MonsterAffiliationDetailResoruce.rdb]" );
|
|
assert( NULL );
|
|
return false;
|
|
}
|
|
|
|
GAME_DB db_hdr;
|
|
std::string idKey;
|
|
|
|
pRes->Read( &db_hdr, sizeof(db_hdr) );
|
|
|
|
for( int nCount = 0; nCount < db_hdr.nCount; nCount++ )
|
|
{
|
|
MonsterAffiliationDetailBase stMonsterAffiliationDetailBase;
|
|
size_t ReadSize( pRes->Read( &stMonsterAffiliationDetailBase, sizeof(stMonsterAffiliationDetailBase) ) );
|
|
if( NULL == ReadSize )
|
|
{
|
|
SDEBUGLOG( "[SMonsterAffiliationDetailDB] Read Failed" );
|
|
assert( ReadSize );
|
|
return false;
|
|
}
|
|
|
|
PMONSTER_AFFILIATION_DETAIL_INFO pMonsterAffiliationDetailInfo( new MONSTER_AFFILIATION_DETAIL_INFO() );
|
|
if( NULL == pMonsterAffiliationDetailInfo )
|
|
{
|
|
SDEBUGLOG( "[SMonsterAffiliationDetailDB] Memory Alloc Failed" );
|
|
assert( pMonsterAffiliationDetailInfo );
|
|
continue;
|
|
}
|
|
|
|
pMonsterAffiliationDetailInfo->m_nUniqueID = stMonsterAffiliationDetailBase.uid;
|
|
pMonsterAffiliationDetailInfo->m_nAffiliationDetailID = stMonsterAffiliationDetailBase.affiliationDetail_id;
|
|
pMonsterAffiliationDetailInfo->m_nStringID = stMonsterAffiliationDetailBase.string_id;
|
|
pMonsterAffiliationDetailInfo->m_strTamingPossibleIconFileName = stMonsterAffiliationDetailBase.taming_possible_icon_filename;
|
|
pMonsterAffiliationDetailInfo->m_strTamingImpossibleIconFileName = stMonsterAffiliationDetailBase.taming_impossible_icon_filename;
|
|
pMonsterAffiliationDetailInfo->m_strTamingTamedIconFileName = stMonsterAffiliationDetailBase.taming_Tamed_icon_filename;
|
|
|
|
if( false == m_mapMonsterAffiliationDetailInfo.insert( pair<UINT, PMONSTER_AFFILIATION_DETAIL_INFO>( stMonsterAffiliationDetailBase.uid, pMonsterAffiliationDetailInfo ) ).second )
|
|
{
|
|
SAFE_DELETE( pMonsterAffiliationDetailInfo );
|
|
SLOG( "[SMonsterAffiliationDetailDB] ID 중복이거나 컨테이너 삽입에 실패하였습니다." );
|
|
assert( pMonsterAffiliationDetailInfo );
|
|
continue;
|
|
}
|
|
}
|
|
|
|
KFileManager::Instance().DeleteStream( pRes );
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// 파괴
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
void SMonsterAffiliationDetailDB::Destroy()
|
|
{
|
|
for( MONSTER_AFFILIATION_DETAIL_INFO_ITER Iter = m_mapMonsterAffiliationDetailInfo.begin(); Iter != m_mapMonsterAffiliationDetailInfo.end(); ++Iter )
|
|
{
|
|
PMONSTER_AFFILIATION_DETAIL_INFO pMonsterAffiliationDetailInfo( Iter->second );
|
|
SAFE_DELETE( pMonsterAffiliationDetailInfo );
|
|
}
|
|
|
|
m_mapMonsterAffiliationDetailInfo.clear();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// 몬스터 종 정보 얻기
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
MONSTER_AFFILIATION_DETAIL_INFO* const SMonsterAffiliationDetailDB::GetMonsterAffiliationDetailInfo( const int nAffiliationDetailID )
|
|
{
|
|
if( m_mapMonsterAffiliationDetailInfo.empty() )
|
|
return NULL;
|
|
|
|
for( MONSTER_AFFILIATION_DETAIL_INFO_ITER Iter = m_mapMonsterAffiliationDetailInfo.begin(); Iter != m_mapMonsterAffiliationDetailInfo.end(); ++Iter )
|
|
{
|
|
PMONSTER_AFFILIATION_DETAIL_INFO pMonsterAffiliationDetailInfo( Iter->second );
|
|
if( NULL == pMonsterAffiliationDetailInfo )
|
|
continue;
|
|
|
|
if( nAffiliationDetailID == pMonsterAffiliationDetailInfo->m_nAffiliationDetailID )
|
|
return pMonsterAffiliationDetailInfo;
|
|
}
|
|
|
|
SDEBUGLOG( "[SMonsterAffiliationDetailDB] 종 정보를 찾을 수 없습니다. AffiliationDetail ID - [%u]", nAffiliationDetailID );
|
|
assert( NULL );
|
|
|
|
return NULL;
|
|
} |