⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zoneinfomanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : ZoneInfoManager.cpp// Written By  : reiot// Description ://////////////////////////////////////////////////////////////////////////////#include "ZoneInfoManager.h"#include "ZoneUtil.h"#include "DB.h"#include "SystemAvailabilitiesManager.h"//////////////////////////////////////////////////////////////////////////////// constructor//////////////////////////////////////////////////////////////////////////////ZoneInfoManager::ZoneInfoManager () 	throw (){	__BEGIN_TRY	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////////////ZoneInfoManager::~ZoneInfoManager () 	throw (){	__BEGIN_TRY	hash_map< ZoneID_t , ZoneInfo *>::iterator itr = m_ZoneInfos.begin();	for (; itr != m_ZoneInfos.end(); itr++)	{		ZoneInfo* pInfo = itr->second;		SAFE_DELETE(pInfo);	}		// 秦浆甘救俊 乐绰 葛电 pair 甸阑 昏力茄促.	m_ZoneInfos.clear();	__END_CATCH}	//////////////////////////////////////////////////////////////////////////////// initialize zone info manager//////////////////////////////////////////////////////////////////////////////void ZoneInfoManager::init () 	throw (Error){	__BEGIN_TRY	// init == load	load();				__END_CATCH}	//void testMaxMemory();//////////////////////////////////////////////////////////////////////////////// load from database//////////////////////////////////////////////////////////////////////////////void ZoneInfoManager::load ()	throw (Error){	__BEGIN_TRY	bool bReload = !m_ZoneInfos.empty();	Statement* pStmt = NULL;	BEGIN_DB	{		// create statement		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result* pResult = pStmt->executeQuery(			"SELECT ZoneID, ZoneGroupID, Type, Level, AccessMode, OwnerID, PayPlayZone, PremiumZone, PKZone, NoPortalZone, HolyLand, Available, OpenLevel, SMPFilename, SSIFilename, FullName, ShortName FROM ZoneInfo");		while (pResult->next()) 		{			uint i = 0;			ZoneID_t zoneID = pResult->getInt(++i);//			cout << "load ZoneInfo = " << zoneID << endl;			ZoneInfo* pZoneInfo = NULL;			bool bExistInfo = false;						if (bReload)			{				hash_map< ZoneID_t , ZoneInfo *>::iterator itr = m_ZoneInfos.find(zoneID);								if (itr != m_ZoneInfos.end()) 				{					pZoneInfo = itr->second;					bExistInfo = true;				}				else				{					pZoneInfo = new ZoneInfo();				}			}			else			{				pZoneInfo = new ZoneInfo();			}			//cout << "new OK" << endl;			//if (zoneID!=31 && zoneID!=21)			{				pZoneInfo->setZoneID(zoneID);				pZoneInfo->setZoneGroupID(pResult->getInt(++i));				pZoneInfo->setZoneType(pResult->getString(++i));				pZoneInfo->setZoneLevel(pResult->getInt(++i));				pZoneInfo->setZoneAccessMode(pResult->getString(++i));				pZoneInfo->setZoneOwnerID(pResult->getString(++i));				pZoneInfo->setPayPlay(pResult->getInt(++i)!=0);				pZoneInfo->setPremiumZone(pResult->getInt(++i)!=0);				pZoneInfo->setPKZone(pResult->getInt(++i)!=0);				pZoneInfo->setNoPortalZone(pResult->getInt(++i)!=0);				pZoneInfo->setHolyLand(pResult->getInt(++i)!=0);				pZoneInfo->setAvailable(pResult->getInt(++i)!=0);				pZoneInfo->setOpenLevel(pResult->getInt(++i));				pZoneInfo->setSMPFilename(pResult->getString(++i));				pZoneInfo->setSSIFilename(pResult->getString(++i));				pZoneInfo->setFullName(pResult->getString(++i));				pZoneInfo->setShortName(pResult->getString(++i));				pZoneInfo->setAvailable(					pZoneInfo->isAvailable()					&& pZoneInfo->getOpenLevel() < SystemAvailabilitiesManager::getInstance()->getZoneOpenDegree()				);				if (!bExistInfo)				{					addZoneInfo(pZoneInfo);				}				/*				if (zoneID==22)				{					testMaxMemory();				}				*/							//cout << "load ZoneInfo = " << zoneID << endl;				//cout << "ZoneInfo = " << pZoneInfo->toString().c_str() << endl << endl;			}			/*			else			{				cout << "skip load ZoneID = " << i << endl << endl;			}			*/		}					SAFE_DELETE(pStmt);	} 	END_DB(pStmt)	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// add zone info to zone info manager//////////////////////////////////////////////////////////////////////////////void ZoneInfoManager::addZoneInfo (ZoneInfo* pZoneInfo) 	throw (Error){	__BEGIN_TRY	// 老窜 鞍篮 酒捞叼狼 粮捞 乐绰瘤 眉农秦夯促.	hash_map< ZoneID_t , ZoneInfo *>::iterator itr = m_ZoneInfos.find(pZoneInfo->getZoneID());		if (itr != m_ZoneInfos.end())		// 度鞍篮 酒捞叼啊 捞固 粮犁茄促绰 家府促. - -;		throw Error("duplicated zone id");	m_ZoneInfos[ pZoneInfo->getZoneID() ] = pZoneInfo;	// Zone full name 甘俊促 粮 ID甫 笼绢持绢敌促.	// 款康磊 疙飞绢甫 困茄 扁瓷捞促.	hash_map<string, ZoneInfo*>::iterator fitr = m_FullNameMap.find(pZoneInfo->getFullName());	if (fitr != m_FullNameMap.end())	{		cerr << "Duplicated Zone Full Name" << endl;		throw Error("Duplicated Zone Full Name");	}	m_FullNameMap[pZoneInfo->getFullName()] = pZoneInfo;	// Zone short name 甘俊促 粮 ID甫 笼绢持绢敌促.	// 款康磊 疙飞绢甫 困茄 扁瓷捞促.	hash_map<string, ZoneInfo*>::iterator sitr = m_ShortNameMap.find(pZoneInfo->getShortName());	if (sitr != m_ShortNameMap.end())	{		cerr << "Duplicated Zone Short Name" << endl;		throw Error("Duplicated Zone Short Name");	}	m_ShortNameMap[pZoneInfo->getShortName()] = pZoneInfo;	__END_CATCH}	//////////////////////////////////////////////////////////////////////////////// Delete zone info from zone info manager//////////////////////////////////////////////////////////////////////////////void ZoneInfoManager::deleteZoneInfo (ZoneID_t zoneID) 	throw (NoSuchElementException){	__BEGIN_TRY			hash_map< ZoneID_t , ZoneInfo *>::iterator itr = m_ZoneInfos.find(zoneID);		if (itr != m_ZoneInfos.end()) 	{		// 粮阑 昏力茄促.		SAFE_DELETE(itr->second);		// pair甫 昏力茄促.		m_ZoneInfos.erase(itr);	} 	else 	{		// 弊繁 粮 酒捞叼甫 茫阑 荐 绝菌阑 锭		StringStream msg;		msg << "ZoneID : " << zoneID;		throw NoSuchElementException(msg.toString());	}	__END_CATCH}	//////////////////////////////////////////////////////////////////////////////// get zone from zone info manager//////////////////////////////////////////////////////////////////////////////ZoneInfo* ZoneInfoManager::getZoneInfo (ZoneID_t zoneID) 	throw (NoSuchElementException){	__BEGIN_TRY			ZoneInfo* pZoneInfo = NULL;	hash_map< ZoneID_t , ZoneInfo *>::iterator itr = m_ZoneInfos.find(zoneID);		if (itr != m_ZoneInfos.end()) {		pZoneInfo = itr->second;	} else {		// 弊繁 粮 酒捞叼甫 茫阑 荐 绝菌阑 锭		StringStream msg;		msg << "ZoneID : " << zoneID; 		throw NoSuchElementException(msg.toString());	}	return pZoneInfo;	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// get zone from zone info manager//////////////////////////////////////////////////////////////////////////////ZoneInfo* ZoneInfoManager::getZoneInfoByName(const string & ZoneName){	// 刚历 short name map阑 八祸茄促.	hash_map<string, ZoneInfo*>::const_iterator short_itr = m_ShortNameMap.find(ZoneName);	if (short_itr != m_ShortNameMap.end())	{		return short_itr->second;	}	// 绝促搁 full name map阑 八祸茄促.	hash_map<string, ZoneInfo*>::const_iterator full_itr = m_FullNameMap.find(ZoneName);	if (full_itr != m_FullNameMap.end())	{		return full_itr->second;	}	// 酒公 镑俊档 绝菌促搁 弊成 NULL阑 府畔茄促.	return NULL;}vector<Zone*> ZoneInfoManager::getNormalFields() const{	vector<Zone*> ret;//	hash_map< ZoneID_t , ZoneInfo *>::const_iterator itr = m_ZoneInfos.begin();//	hash_map< ZoneID_t , ZoneInfo *>::const_iterator endItr = m_ZoneInfos.end();//	//	for ( ; itr != endItr ; ++itr )//	{//		if ( itr->second->getZoneType() == ZONE_NORMAL_FIELD ) ret.push_back( getZoneByZoneID( itr->first ) );//	}	ret.push_back( getZoneByZoneID(13) );	return ret;}//////////////////////////////////////////////////////////////////////////////// get debug string//////////////////////////////////////////////////////////////////////////////string ZoneInfoManager::toString () const	throw (){	__BEGIN_TRY	StringStream msg;	msg << "ZoneInfoManager(";	if (m_ZoneInfos.empty()) msg << "EMPTY";	else 	{		for (hash_map< ZoneID_t , ZoneInfo* >::const_iterator itr = m_ZoneInfos.begin() ; itr != m_ZoneInfos.end() ; itr ++) 		{			msg << itr->second->toString();		}	}	msg << ")";	return msg.toString();	__END_CATCH}// global variable definitionZoneInfoManager* g_pZoneInfoManager = NULL;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -