Files
Leviathan/Client/Game/game/DB/SLowQualityWaterDB.cpp
2026-06-01 12:46:52 +02:00

158 lines
4.6 KiB
C++

#include "stdafx.h"
#include "SLowQualityWaterDB.h"
#include <Windows.h>
#include "KTypes.h"
#include <kfile/KStream.h>
#include <kfile/KFileManager.h>
#include <toolkit/XStringUtil.h>
#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;
}