#include "stdafx.h" #include "SMonsterCreatureDB.h" #include #include 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; }