128 lines
2.8 KiB
C++
128 lines
2.8 KiB
C++
#include "stdafx.h"
|
|
#include "BattleArenaBase.h"
|
|
#include "SBattleArenaDB.h"
|
|
#include <kfile/KFileManager.h>
|
|
#include "SkillBaseFile.h"
|
|
#include <toolkit/XStringUtil.h>
|
|
#include <kfile/KStream.h>
|
|
#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);
|
|
}
|