📄 optioninfo.cpp
字号:
<< "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 + -