#include "stdafx.h" #include "SLowQualityWaterDB.h" #include #include "KTypes.h" #include #include #include #include "SkillBaseFile.h" #include "ContentStruct.h" #include "SDebug_Util.h" extern HWND g_hWnd; SLowQualityWaterDB* SLowQualityWaterDB::m_pThis = NULL; SLowQualityWaterDB & GetLowQualityWaterDB() { if( NULL == SLowQualityWaterDB::m_pThis ) SLowQualityWaterDB::m_pThis = new SLowQualityWaterDB; return *SLowQualityWaterDB::m_pThis; // static SLowQualityWaterDB LowQualityWaterDB; // return LowQualityWaterDB; } SLowQualityWaterDB::SLowQualityWaterDB() { Init(); } SLowQualityWaterDB::~SLowQualityWaterDB() { Destroy(); } void SLowQualityWaterDB::Init() { Load(); } void SLowQualityWaterDB::Destroy() { LowQualityWater* pLowQualityWater = NULL; bool res; res = m_hashLowQualityWater.get_first_value( pLowQualityWater ); while ( res ) { if ( pLowQualityWater != NULL ) { delete pLowQualityWater; } res = m_hashLowQualityWater.get_next_value( pLowQualityWater ); } m_hashLowQualityWater.clear(); } void SLowQualityWaterDB::Load() { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( "db_LowQualityWater.rdb" ); if( !pRes ) return; GAME_DB db_hdr; pRes->Read( &db_hdr, sizeof(db_hdr) ); #ifdef _DEV_RDB_ // RDB 와 Header의 사이즈 비교. int fileSize = pRes->Size() - ( STR_DATE_BUFFER + sizeof( int ) ); int headerSize = sizeof(LowQualityWater) * db_hdr.nCount; if( fileSize != headerSize ) { char str[512] = { NULL, }; sprintf( str, "*** RDB Error !!! ***\n\n생성날짜%s\n파일:%s\n파일사이즈:%d\n헤더사이즈:%d\n ", db_hdr.szDate, __FILE__, fileSize, headerSize ); ::MessageBox( g_hWnd, str, "Error", MB_OK ); if( ::MessageBox( g_hWnd, "RDB와 클라이언트가 맞지않습니다. 강제종료하시겠습니까?", "Error", MB_YESNO ) == IDYES ) { exit( 1 ); } } #endif for( int i(0); db_hdr.nCount>i; i++ ) { LowQualityWater * pItem = new LowQualityWater; memset( pItem, 0, sizeof(LowQualityWater) ); pRes->Read( pItem, sizeof(LowQualityWater) ); LowQualityWater* pFindItem = NULL; if( m_hashLowQualityWater.lookup( pItem->id, pFindItem ) == false ) { //좋은 방법 없나 ㅡ,.ㅡ pItem->texture_name_all[0] = pItem->texture_name_1; pItem->texture_name_all[1] = pItem->texture_name_2; pItem->texture_name_all[2] = pItem->texture_name_3; pItem->texture_name_all[3] = pItem->texture_name_4; pItem->texture_name_all[4] = pItem->texture_name_5; pItem->texture_name_all[5] = pItem->texture_name_6; pItem->texture_name_all[6] = pItem->texture_name_7; pItem->texture_name_all[7] = pItem->texture_name_8; pItem->texture_name_all[8] = pItem->texture_name_9; pItem->texture_name_all[9] = pItem->texture_name_10; pItem->texture_name_all[10] = pItem->texture_name_11; pItem->texture_name_all[11] = pItem->texture_name_12; pItem->texture_name_all[12] = pItem->texture_name_13; pItem->texture_name_all[13] = pItem->texture_name_14; pItem->texture_name_all[14] = pItem->texture_name_15; pItem->texture_name_all[15] = pItem->texture_name_16; pItem->texture_name_all[16] = pItem->texture_name_17; pItem->texture_name_all[17] = pItem->texture_name_18; pItem->texture_name_all[18] = pItem->texture_name_19; pItem->texture_name_all[19] = pItem->texture_name_20; pItem->texture_name_all[20] = pItem->texture_name_21; pItem->texture_name_all[21] = pItem->texture_name_22; pItem->texture_name_all[22] = pItem->texture_name_23; pItem->texture_name_all[23] = pItem->texture_name_24; pItem->texture_name_all[24] = pItem->texture_name_25; pItem->texture_name_all[25] = pItem->texture_name_26; pItem->texture_name_all[26] = pItem->texture_name_27; pItem->texture_name_all[27] = pItem->texture_name_28; pItem->texture_name_all[28] = pItem->texture_name_29; pItem->texture_name_all[29] = pItem->texture_name_30; m_hashLowQualityWater.add( pItem->id, pItem ); } else { _oprint( "!!!!Data Error SLowQualityWaterDB::Load() Code 가 중복되었습니다.!!!! %d\n", pItem->id ); assert(0); //기획팀에 알려 주세여. 바로 수정 해야 합니다. delete pItem; } } KFileManager::Instance().DeleteStream( pRes ); } LowQualityWater* SLowQualityWaterDB::GetLowQualityWaterData( int nWaterID ) { LowQualityWater* pFindItem = NULL; if( m_hashLowQualityWater.lookup( nWaterID, pFindItem )) return pFindItem; return NULL; } KHash< LowQualityWater*, hashPr_mod_int> & SLowQualityWaterDB::GetLowQualityWaterInfo() { return m_hashLowQualityWater; }