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

107 lines
2.2 KiB
C++

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