#include "stdafx.h" #include "BattleArenaBase.h" #include "SBattleArenaDB.h" #include #include "SkillBaseFile.h" #include #include #include "KTypes.h" SBattleArenaDB & GetBattleArenaDB() { static SBattleArenaDB BattleArenaDB; return BattleArenaDB; } SBattleArenaDB::SBattleArenaDB() { Init(); } SBattleArenaDB::~SBattleArenaDB() { Destroy(); } void SBattleArenaDB::Init() { Load(); } void SBattleArenaDB::Destroy() { BattleArenaBase* battleArena = NULL; bool res; res = m_hashBattleArena.get_first_value( battleArena ); while ( res ) { if ( battleArena != NULL ) { delete battleArena; } res = m_hashBattleArena.get_next_value( battleArena ); } m_hashBattleArena.clear(); m_hashBattleArenaId.clear(); } void SBattleArenaDB::Load() { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( "db_BattleArena.rdb" ); if( !pRes ) return; GAME_DB db_hdr; std::string idKey; pRes->Read( &db_hdr, sizeof(db_hdr) ); for( int i(0); db_hdr.nCount>i; i++ ) { BattleArenaBase * battleArena = new BattleArenaBase; memset( battleArena, 0, sizeof(BattleArenaBase) ); pRes->Read( battleArena, sizeof(BattleArenaBase) ); BattleArenaBase* pFind = NULL; if( m_hashBattleArena.lookup( battleArena->nID, pFind ) == false ) { m_hashBattleArena.add( battleArena->nID, battleArena ); /// add m_hashBattleArenaId createIdKey(battleArena->eType, battleArena->nMaxMember, idKey); m_hashBattleArenaId.add(idKey.c_str(), battleArena->nID); } else { _oprint( "!!!!Data Error BattleArena ID가 중복되었습니다.!!!! %d\n", battleArena->nID); assert(0); //기획팀에 알려 주세여. 바로 수정 해야 합니다. delete battleArena; } } KFileManager::Instance().DeleteStream( pRes ); } int SBattleArenaDB::findID(int arenaType, int maxMember) { int id; std::string idKey; createIdKey(arenaType, maxMember, idKey); if (m_hashBattleArenaId.lookup(idKey.c_str(), id)) return id; return -1; } BattleArenaBase* SBattleArenaDB::getData(int arenaId) { BattleArenaBase* base = NULL; if (m_hashBattleArena.lookup(arenaId, base)) return base; return NULL; } bool SBattleArenaDB::isInArena(unsigned int warpx, unsigned int warpy) { BattleArenaBase* battleArena = NULL; bool res; res = m_hashBattleArena.get_first_value( battleArena ); while ( res ) { if ( battleArena != NULL ) { if (battleArena->nArenaRegionLeft <= warpx && battleArena->nArenaRegionRight >= warpx && battleArena->nArenaRegionBottom <= warpy && battleArena->nArenaRegionTop >= warpy) { return true; } } res = m_hashBattleArena.get_next_value( battleArena ); } return false; } void SBattleArenaDB::createIdKey(int arenaType, int maxMember, std::string& key) { XStringUtil::Format(key, "%d_%d", arenaType, maxMember); }