#include "stdafx.h" #include #include "KTypes.h" #include #include #include "SkillBaseFile.h" #include "SHuntaHolicResourceDB.h" #include "SDebug_Util.h" SHuntaHolicResourceDB::SHuntaHolicResourceDB() { Init(); } SHuntaHolicResourceDB::~SHuntaHolicResourceDB() { Destroy(); } const HuntaHolicResource& SHuntaHolicResourceDB::Find( int nID ) const { HuntaHolicResource* found = 0; if( mDB.lookup( nID, found ) ) return *found; return mNullResource; } void SHuntaHolicResourceDB::Init() { Load(); } void SHuntaHolicResourceDB::Destroy() { HuntaHolicResource* found = 0; bool res; res = mDB.get_first_value( found ); while( res ) { if( found != 0 ) delete found; res = mDB.get_next_value( found ); } mDB.clear(); } void SHuntaHolicResourceDB::Load() { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( "db_HuntaHolicResource.rdb" ); if( !pRes ) return; _oprint( "* HuntaHolicResource DB Loading...\n" ); GAME_DB db_hdr; pRes->Read( &db_hdr, sizeof(db_hdr) ); for( int i(0); db_hdr.nCount>i; i++ ) { HuntaHolicResource* pItem = new HuntaHolicResource; memset( pItem, 0, sizeof(HuntaHolicResource) ); pRes->Read( pItem, sizeof(HuntaHolicResource) ); if( !( pItem->local_flag & GameRule::GetCurrentLocalBitSet() ) ) { HuntaHolicResource* pFindItem = NULL; if( mDB.lookup( pItem->id, pFindItem ) == false ) { mDB.add( pItem->id, pItem ); } else { _oprint( "* Error: id( %d )가 중복되었습니다.\n", pItem->id ); delete pItem; } } else { _oprint( "* Log: id( %d )가 국가별 비트셋 검사에 의해 생략됨.\n", pItem->id ); delete pItem; } } KFileManager::Instance().DeleteStream( pRes ); _oprint( "* HuntaHolicResource DB Loading Complete...( Total: %d )\n", (int)mDB.size() ); } SHuntaHolicResourceDB* SHuntaHolicResourceDB::m_pThis = NULL; SHuntaHolicResourceDB& GetHuntaHolicResourceDB() { if( NULL == SHuntaHolicResourceDB::m_pThis ) SHuntaHolicResourceDB::m_pThis = new SHuntaHolicResourceDB; return *SHuntaHolicResourceDB::m_pThis; // static SHuntaHolicResourceDB huntaHolicResourceDB; // return huntaHolicResourceDB; }