#include "stdafx.h" #include "SMonsterAffiliationDetailDB.h" #include #include "SLog.h" #include "SkillBaseFile.h" #include #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( 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; }