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

📄 optioninfo.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		<< "UpgradeSecondRatio:"        << (int)m_UpgradeSecondRatio		<< "UpgradeCrashPercent:" << (int)m_UpgradeCrashPercent		<< "NextOptionRatio:"     << (int)m_NextOptionRatio		<< ")";	return msg.toString();	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// class OptionInfoSet//////////////////////////////////////////////////////////////////////////////OptionInfoSet::OptionInfoSet()	throw(){	__BEGIN_TRY	__END_CATCH}OptionInfoSet::~OptionInfoSet()	throw(){	__BEGIN_TRY	m_OptionTypes.clear();	__END_CATCH}// 瘤沥等 饭骇俊 蝶扼辑 甘俊促 可记 鸥涝阑 笼绢持绰促.void OptionInfoSet::addOptionType(uint level, OptionType_t type)	throw (DuplicatedException, Error){	__BEGIN_TRY	hash_map<uint, OptionType_t>::iterator itr = m_OptionTypes.find(level);	if (itr != m_OptionTypes.end())	{		StringStream msg;		msg << "DupOptionLevel(OptionInfoSet): level=" << (int)level			<< ", OptionType=" << (int)type;		throw DuplicatedException(msg.toString().c_str());	}	m_OptionTypes[level] = type;	__END_CATCH}// 瘤沥等 弥家, 弥措 饭骇俊 蝶扼, 弊 裹困 救狼 可记阑 氦磐俊促 笼绢持绰促.void OptionInfoSet::getPossibleOptionTypes(uint minLevel, uint maxLevel, vector<OptionType_t>& rOptionVector)	throw(){	__BEGIN_TRY	hash_map<uint, OptionType_t>::iterator itr = m_OptionTypes.begin();	for (; itr != m_OptionTypes.end(); itr++)	{		uint level = itr->first;		if (minLevel <= level && level <= maxLevel)		{			OptionType_t OType = itr->second;			rOptionVector.push_back(OType);		}	}	__END_CATCH}string OptionInfoSet::toString(void) const	throw(){	__BEGIN_TRY	StringStream msg;	msg << "OptionInfoSet(";	hash_map<uint, OptionType_t>::const_iterator itr = m_OptionTypes.begin();	for (; itr != m_OptionTypes.end(); itr++)		msg << (int)itr->first << ":" << (int)itr->second << ",";	msg << ")\n";	return msg.toString();	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// class OptionInfoManager member methods//////////////////////////////////////////////////////////////////////////////OptionInfoManager::OptionInfoManager()	throw(){	__BEGIN_TRY	m_nOptionCount = 0;	m_OptionClassInfos.clear();	m_OptionClassInfos.reserve( (int)OPTION_MAX );	m_ToTalPetEnchantOption = 0;	m_PetEnchantOptionList.clear();	__END_CATCH}OptionInfoManager::~OptionInfoManager()	throw(){	__BEGIN_TRY	release();	__END_CATCH}voidOptionInfoManager::release()	throw(){	__BEGIN_TRY	m_nOptionCount = 0;	hash_map<OptionType_t, OptionInfo*>::iterator itr = m_OptionInfos.begin();	for (; itr != m_OptionInfos.end(); itr++)	{		OptionInfo* pInfo = itr->second;		SAFE_DELETE(pInfo);	}	m_OptionInfos.clear();	m_NicknameOptionInfos.clear();	for (int i=0; i<OPTION_MAX; i++)	{		m_OptionInfoSet[i].clear();	}	for (int ic=0; ic<Item::ITEM_CLASS_MAX; ic++)    {        for (uint l=0; l<GAMBLE_OPTION_LEVEL_MAX; l++)        {            m_GambleOptions[ic][l].clear();        }    }	vector<OptionClassInfo*>::iterator citr = m_OptionClassInfos.begin();	vector<OptionClassInfo*>::iterator endcItr = m_OptionClassInfos.end();	for ( ; citr != endcItr ; ++citr )	{		if ( *citr != NULL ) SAFE_DELETE( *citr );	}	m_OptionClassInfos.clear();	list<PetEnchantOption*>::iterator pitr = m_PetEnchantOptionList.begin();	list<PetEnchantOption*>::iterator endpItr = m_PetEnchantOptionList.end();	for (; pitr!=endpItr; pitr++)	{		PetEnchantOption* pPetEnchantOption = *pitr;		SAFE_DELETE(pPetEnchantOption);	}	m_PetEnchantOptionList.clear();	m_ToTalPetEnchantOption = 0;		__END_CATCH}void OptionInfoManager::init()	throw (){	__BEGIN_TRY	load();	__END_CATCH}void OptionInfoManager::load()	throw (){	__BEGIN_TRY	release();	Statement* pStmt   = NULL;	Result*    pResult = NULL;	try {	BEGIN_DB	{		StringStream sql;		sql << "SELECT OptionType, Name, HName, Nickname, "			<< "Class, PlusPoint, PriceMultiplier, "			<< "ReqAbility, Color, Ratio, OptionLevel, GambleLevel, "			<< "PreviousOptionType, UpgradeOptionType, UpgradeRatio, UpgradeSecondRatio, "			<< "UpgradeCrashPercent, NextOptionRatio, Grade "			<< "FROM OptionInfo";		pStmt   = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pResult = pStmt->executeQuery(sql.toString());		if (pResult->getRowCount() == 0)		{			SAFE_DELETE(pStmt);			throw Error("There is no data in OptionInfo Table");		}		while (pResult->next())		{			OptionInfo* pInfo = new OptionInfo;			int         i     = 0;			pInfo->setType(pResult->getInt(++i));			pInfo->setName(pResult->getString(++i));			pInfo->setHName(pResult->getString(++i));			pInfo->setNickname(pResult->getString(++i));			pInfo->setClass((OptionClass)pResult->getInt(++i));			pInfo->setPlusPoint(pResult->getInt(++i));			pInfo->setPriceMultiplier(pResult->getInt(++i));			pInfo->setReqAbility(pResult->getString(++i));			pInfo->setColor(pResult->getInt(++i));			pInfo->setRatio(pResult->getInt(++i));			pInfo->setLevel(pResult->getInt(++i));			pInfo->setGambleLevel(pResult->getInt(++i));			pInfo->setPreviousType(pResult->getInt(++i));			pInfo->setUpgradeType(pResult->getInt(++i));			pInfo->setUpgradeRatio(pResult->getInt(++i));			pInfo->setUpgradeSecondRatio(pResult->getInt(++i));			pInfo->setUpgradeCrashPercent(pResult->getInt(++i));			pInfo->setNextOptionRatio(pResult->getInt(++i));			pInfo->setGrade( pResult->getInt(++i) );			addOptionInfo(pInfo);			// 可记 努贰胶俊 蝶扼辑 舅嘎篮 OptionInfoSet俊促啊 			// level, type阑 笼绢持绢霖促.			uint         OClass = pInfo->getClass();			uint         level  = pInfo->getLevel();			OptionType_t type   = pInfo->getType();			Ratio_t		 gambleRatio = pInfo->getRatio();			m_OptionInfoSet[OClass].addOptionType(level, type);						// gamble阑 困茄 option沥焊 汲沥			for (int ic=0; ic<Item::ITEM_CLASS_MAX; ic++)			{				// itemClass俊 嘿阑 荐 乐绰 option牢 版快				// m_GambleOptions俊 眠啊秦敌促.				if (gambleRatio>0					&& isPossibleOptionClass((Item::ItemClass)ic, (OptionClass)OClass))				{					uint gambleLevel = pInfo->getGambleLevel();					// level鳖瘤 眠啊秦敌促.					for (uint l=gambleLevel; l<=GAMBLE_OPTION_LEVEL_MAX; l++)					{						m_GambleOptions[ic][l].push_back( type );						//cout << "GambleOption[" << ic << "][" << l << "] = " << (int)type << endl;					}				}			}		}		pResult = pStmt->executeQuery("SELECT OptionClassType, Name, HName, Level, TotalGrade, OptionGroup FROM OptionClassInfo");		if (pResult->getRowCount() == 0)		{			SAFE_DELETE(pStmt);			throw Error("There is no data in OptionClassInfo Table");		}		while ( pResult->next() )		{			OptionClassInfo* pInfo = new OptionClassInfo( (OptionClass)pResult->getInt(1) );			pInfo->setName( pResult->getString(2) );			pInfo->setHName( pResult->getString(3) );			pInfo->setLevel( pResult->getInt(4) );			pInfo->setTotalGrade( pResult->getInt(5) );			pInfo->setOptionGroup( (OptionGroup)pResult->getInt(6) );			addOptionClassInfo( pInfo );		}		pResult = pStmt->executeQuery("SELECT Level, TotalGrade, Grade, RatioWhenFail, RatioWhenSuccess FROM RareEnchantInfo");		if (pResult->getRowCount() == 0)		{			SAFE_DELETE(pStmt);			throw Error("There is no data in RareEnchantInfo Table");		}		while ( pResult->next() )		{			int level = pResult->getInt(1);			int total = pResult->getInt(2);			int key = level*10 + total;			hash_map<int,RareOptionUpgradeInfo*>::iterator itr = m_RareEnchantInfo.find(key);			if ( itr == m_RareEnchantInfo.end() )			{				RareOptionUpgradeInfo* pInfo = new RareOptionUpgradeInfo( level, total );				m_RareEnchantInfo[key] = pInfo;			}			int grade = pResult->getInt(3);			m_RareEnchantInfo[key]->setRatio( grade, false, pResult->getInt(4) );			m_RareEnchantInfo[key]->setRatio( grade, true, pResult->getInt(5) );		}		pResult = pStmt->executeQuery("SELECT OptionType, Ratio FROM PetEnchantOptionRatioInfo");		while ( pResult->next() )		{			OptionType_t optionType = pResult->getInt(1);			int 		 ratio 		= pResult->getInt(2);			ratio = ratio + getTotalPetEnchantOption();			setTotalPetEnchantOption( ratio );					PetEnchantOption* pPetEnchantOption = new PetEnchantOption();			pPetEnchantOption->setOptionType( optionType );			pPetEnchantOption->setRatio( ratio );			addPetEnchantOption( pPetEnchantOption );		}		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	// gamble option喊肺 totalRatio甫 备秦敌促.    for (int ic=0; ic<Item::ITEM_CLASS_MAX; ic++)    {        for (uint l=0; l<=GAMBLE_OPTION_LEVEL_MAX; l++)        {            m_TotalGambleRatio[ic][l] = 0;            const vector<OptionType_t>& optionVector = m_GambleOptions[ic][l];            vector<OptionType_t>::const_iterator iOption;            int totalRatio = 0;            for (iOption=optionVector.begin(); iOption!=optionVector.end(); iOption++)            {                OptionType_t optionType = *iOption;                try {                    OptionInfo* pOptionInfo = getOptionInfo(optionType);					if (pOptionInfo==NULL)					{                    	cerr << "No Such Option : "  << optionType << endl;                    	Assert(false);					}                    totalRatio += pOptionInfo->getRatio();                } catch (NoSuchElementException&) {                    cerr << "No Such Option : "  << optionType << endl;                    Assert(false);                }            }            m_TotalGambleRatio[ic][l] = totalRatio;        }    }

⌨️ 快捷键说明

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