90 lines
1.8 KiB
C++
90 lines
1.8 KiB
C++
|
|
#include "stdafx.h"
|
|
#include "SMonsterCreatureDB.h"
|
|
|
|
#include <rdu/RDUReader.h>
|
|
#include <rdu/ColumnDataGetter.h>
|
|
|
|
|
|
SMonstarCreatureDB::SMonstarCreatureDB()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
SMonstarCreatureDB::~SMonstarCreatureDB()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
void SMonstarCreatureDB::Init()
|
|
{
|
|
Load();
|
|
}
|
|
|
|
void SMonstarCreatureDB::Destroy()
|
|
{
|
|
m_mapMonsterCreatureList.clear();
|
|
}
|
|
|
|
void SMonstarCreatureDB::Load()
|
|
{
|
|
KStream * pRes = KFileManager::Instance().CreateStreamFromResource( "db_monster_creature.rdb" );
|
|
if( !pRes ) return;
|
|
|
|
RDUReader reader;
|
|
if( reader.Open( pRes ) == false )
|
|
{
|
|
return;
|
|
}
|
|
|
|
RDURow row;
|
|
while( reader.Fetch( &row ) == true )
|
|
{
|
|
MonsterCreatureInfo mc;
|
|
::memset( &mc, 0, sizeof( mc ) );
|
|
|
|
typedef ColumnDataGetter< DECIMALToDouble< false > > ColGetter;
|
|
|
|
mc.nSid = ColGetter( row.At( "sid" ) ).ToInterger();
|
|
mc.nUseCode = ColGetter( row.At( "use_code" ) ).ToInterger();
|
|
|
|
for( int i = 0; i < _countof( mc.arSummonCode ); ++i )
|
|
{
|
|
char szColumnName[64] = "";
|
|
s_sprintf( szColumnName, _countof( szColumnName ), "summon_code_%d", i+1 );
|
|
|
|
mc.arSummonCode[i] = ColGetter( row.At( szColumnName ) ).ToInterger();
|
|
}
|
|
|
|
m_mapMonsterCreatureList.insert( std::make_pair( mc.nSid, mc ) );
|
|
}
|
|
|
|
KFileManager::Instance().DeleteStream( pRes );
|
|
}
|
|
|
|
int SMonstarCreatureDB::GetTameCode( int nSid )
|
|
{
|
|
auto pos = m_mapMonsterCreatureList.find( nSid );
|
|
if( pos != m_mapMonsterCreatureList.end() )
|
|
{
|
|
const MonsterCreatureInfo& mc = pos->second;
|
|
for( int i = 0; i < mc.nUseCode; ++i )
|
|
{
|
|
if( mc.arSummonCode[i] != 0 )
|
|
{
|
|
return mc.arSummonCode[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
SMonstarCreatureDB* SMonstarCreatureDB::m_pThis = NULL;
|
|
SMonstarCreatureDB & GetMonsterCreatureDB()
|
|
{
|
|
if( NULL == SMonstarCreatureDB::m_pThis )
|
|
SMonstarCreatureDB::m_pThis = new SMonstarCreatureDB;
|
|
|
|
return *SMonstarCreatureDB::m_pThis;
|
|
} |