📄 optioninfo.cpp
字号:
} catch (Throwable& t) { cerr << t.toString().c_str() << endl; throw; } __END_CATCH}void OptionInfoManager::addOptionInfo(OptionInfo* pOptionInfo) throw (DuplicatedException, Error){ __BEGIN_TRY // OptionType栏肺 备盒登绰 秦浆甘俊促 笼绢持绰促. hash_map<OptionType_t, OptionInfo*>::iterator itr = m_OptionInfos.find(pOptionInfo->getType()); if (itr != m_OptionInfos.end()) { StringStream msg; msg << "DupOptionType: OptionType=" << (int)pOptionInfo->getType() << ", Nickname=" << pOptionInfo->getNickname(); throw DuplicatedException(msg.toString()); } m_OptionInfos[pOptionInfo->getType()] = pOptionInfo; // Nickname栏肺 备盒登绰 秦浆甘俊促 笼绢持绰促. hash_map<string, OptionInfo*>::iterator itr2 = m_NicknameOptionInfos.find(pOptionInfo->getNickname()); if (itr2 != m_NicknameOptionInfos.end()) { StringStream msg; msg << "DupNickname: OptionType=" << (int)pOptionInfo->getType() << ", Nickname=" << pOptionInfo->getNickname(); throw DuplicatedException(msg.toString().c_str()); } m_NicknameOptionInfos[pOptionInfo->getNickname()] = pOptionInfo; __END_CATCH}OptionInfo* OptionInfoManager::getOptionInfo(OptionType_t OptionType) throw (NoSuchElementException, Error){ __BEGIN_TRY //cout << "getOptionInfo(" << (int)OptionType << ") " << endl; hash_map<OptionType_t, OptionInfo*>::iterator itr = m_OptionInfos.find(OptionType); if (itr == m_OptionInfos.end()) { //cerr << "OptionInfoManager::getOptionInfo() : No Such Element Exception. OptionType=" << (int)OptionType << endl; //throw NoSuchElementException(); // nosuch力芭. 2002.8.23. by sigi return NULL; } return itr->second; __END_CATCH}OptionInfo* OptionInfoManager::getOptionInfo(const string& nickname) throw (NoSuchElementException, Error){ __BEGIN_TRY hash_map<string, OptionInfo*>::iterator itr = m_NicknameOptionInfos.find(nickname); if (itr == m_NicknameOptionInfos.end()) { //cerr << "OptionInfoManager::getOptionInfo() : No Such Element Exception" << endl; //throw NoSuchElementException(); // nosuch力芭. 2002.8.23. by sigi return NULL; } return itr->second; __END_CATCH}OptionType_t OptionInfoManager::getOptionType(const string& nickname) throw (NoSuchElementException, Error){ __BEGIN_TRY hash_map<string, OptionInfo*>::iterator itr = m_NicknameOptionInfos.find(nickname); if (itr == m_NicknameOptionInfos.end()) { cerr << "OptionInfoManager::getOptionInfo() : No Such Element Exception" << endl; throw NoSuchElementException(); } OptionInfo* pInfo = itr->second; return pInfo->getType(); __END_CATCH}string OptionInfoManager::getOptionName(const list<OptionType_t>& optionTypes) throw (NoSuchElementException, Error){ __BEGIN_TRY StringStream optionName; list<OptionType_t>::const_iterator itr; for (itr = optionTypes.begin() ; itr != optionTypes.end() ; itr++) { OptionInfo* pOptionInfo = getOptionInfo( *itr ); optionName << pOptionInfo->getName() << " "; } return optionName.toString(); __END_CATCH}vector<OptionType_t> OptionInfoManager::getPossibleOptionVector(Item::ItemClass IClass, uint minLevel, uint maxLevel) throw(){ __BEGIN_TRY vector<OptionType_t> temp; switch (IClass) { // WEAPON case Item::ITEM_CLASS_BLADE: case Item::ITEM_CLASS_SWORD: case Item::ITEM_CLASS_SG: case Item::ITEM_CLASS_SMG: case Item::ITEM_CLASS_AR: case Item::ITEM_CLASS_SR: case Item::ITEM_CLASS_CROSS: case Item::ITEM_CLASS_MACE: case Item::ITEM_CLASS_VAMPIRE_WEAPON: m_OptionInfoSet[OPTION_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_TOHIT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DAMAGE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DURABILITY].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ATTACK_SPEED].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_ATTR].getPossibleOptionTypes(minLevel, maxLevel, temp); if ( IClass != Item::ITEM_CLASS_VAMPIRE_WEAPON ) m_OptionInfoSet[OPTION_MP].getPossibleOptionTypes(minLevel, maxLevel, temp); break; // ARMOR case Item::ITEM_CLASS_HELM: case Item::ITEM_CLASS_COAT: case Item::ITEM_CLASS_TROUSER: case Item::ITEM_CLASS_SHOES: case Item::ITEM_CLASS_GLOVE: case Item::ITEM_CLASS_BELT: case Item::ITEM_CLASS_SHIELD: case Item::ITEM_CLASS_VAMPIRE_COAT: m_OptionInfoSet[OPTION_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEFENSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_PROTECTION].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DURABILITY].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_ATTR].getPossibleOptionTypes(minLevel, maxLevel, temp); if ( IClass != Item::ITEM_CLASS_VAMPIRE_COAT ) m_OptionInfoSet[OPTION_MP].getPossibleOptionTypes(minLevel, maxLevel, temp); break; // ACCESSORY case Item::ITEM_CLASS_RING: case Item::ITEM_CLASS_BRACELET: case Item::ITEM_CLASS_NECKLACE: case Item::ITEM_CLASS_VAMPIRE_RING: case Item::ITEM_CLASS_VAMPIRE_EARRING: case Item::ITEM_CLASS_VAMPIRE_BRACELET: case Item::ITEM_CLASS_VAMPIRE_NECKLACE: m_OptionInfoSet[OPTION_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP_REGEN].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP_REGEN].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_TOHIT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DAMAGE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEFENSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_PROTECTION].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DURABILITY].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_POISON].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ACID].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_CURSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_BLOOD].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_VISION].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ATTACK_SPEED].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_RES].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_ATTR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_STR_TO_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_STR_TO_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX_TO_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX_TO_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT_TO_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT_TO_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); if (IClass!=Item::ITEM_CLASS_VAMPIRE_EARRING) m_OptionInfoSet[OPTION_LUCK].getPossibleOptionTypes(minLevel, maxLevel, temp); if ( IClass != Item::ITEM_CLASS_VAMPIRE_RING && IClass != Item::ITEM_CLASS_VAMPIRE_EARRING && IClass != Item::ITEM_CLASS_VAMPIRE_BRACELET && IClass != Item::ITEM_CLASS_VAMPIRE_NECKLACE ) m_OptionInfoSet[OPTION_MP].getPossibleOptionTypes(minLevel, maxLevel, temp); break; case Item::ITEM_CLASS_VAMPIRE_AMULET: m_OptionInfoSet[OPTION_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP].getPossibleOptionTypes(minLevel, maxLevel, temp);// m_OptionInfoSet[OPTION_MP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP_REGEN].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP_REGEN].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_TOHIT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DAMAGE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DURABILITY].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_POISON].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ACID].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_CURSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_BLOOD].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_VISION].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ATTACK_SPEED].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_LUCK].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_RES].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_ATTR].getPossibleOptionTypes(minLevel, maxLevel, temp); break; case Item::ITEM_CLASS_OUSTERS_CHAKRAM: case Item::ITEM_CLASS_OUSTERS_WRISTLET: m_OptionInfoSet[OPTION_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_TOHIT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DAMAGE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DURABILITY].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ATTACK_SPEED].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_CRITICAL_HIT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_ATTR].getPossibleOptionTypes(minLevel, maxLevel, temp); break; case Item::ITEM_CLASS_OUSTERS_COAT: case Item::ITEM_CLASS_OUSTERS_BOOTS: case Item::ITEM_CLASS_OUSTERS_ARMSBAND: m_OptionInfoSet[OPTION_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEFENSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_PROTECTION].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DURABILITY].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_POISON].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ACID].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_CURSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_BLOOD].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_LUCK].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_RES].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_ATTR].getPossibleOptionTypes(minLevel, maxLevel, temp); break; case Item::ITEM_CLASS_OUSTERS_CIRCLET: case Item::ITEM_CLASS_OUSTERS_PENDENT: case Item::ITEM_CLASS_OUSTERS_RING: m_OptionInfoSet[OPTION_STR].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEX].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_INT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_HP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_MP_STEAL].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_TOHIT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DAMAGE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_DEFENSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_PROTECTION].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_POISON].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ACID].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_CURSE].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_BLOOD].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_VISION].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ATTACK_SPEED].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_CRITICAL_HIT].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_LUCK].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_RES].getPossibleOptionTypes(minLevel, maxLevel, temp); m_OptionInfoSet[OPTION_ALL_ATTR].getPossibleOptionTypes(minLevel, maxLevel, temp); break; default: break; } return temp; __END_CATCH}void OptionInfoManager::addGambleOption(Item::ItemClass itemClass, uint level, OptionType_t optionType) throw(DuplicatedException, Error){ m_GambleOptions[itemClass][level].push_back( optionType );}int OptionInfoManager::getRareUpgradeRatio( OptionType_t optionType, bool success ){ OptionInfo* pOI = getOptionInfo( optionType ); if ( pOI == NULL ) throw Error("OptionInfoManager::getRareUpgradeRatio() : 可记 牢器啊 绝嚼聪促."); OptionClassInfo* pOCI = m_OptionClassInfos[pOI->getClass()]; if ( pOCI == NULL ) throw Error("OptionInfoManager::getRareUpgradeRatio() : 可记 努贰胶 牢器啊 绝嚼聪促."); RareOptionUpgradeInfo* pROUI = m_RareEnchantInfo[pOCI->getKey()]; if ( pROUI == NULL ) throw Error("OptionInfoManager::getRareUpgradeRatio() : 饭绢 牢忙飘 牢器啊 绝嚼聪促."); return pROUI->getRatio( pOI->getGrade(), success );}void OptionInfoManager::addPetEnchantOption(PetEnchantOption* pPetEnchantOption) throw(){ __BEGIN_TRY Assert( pPetEnchantOption != NULL); m_PetEnchantOptionList.push_back(pPetEnchantOption); __END_CATCH}string OptionInfoManager::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "OptionInfoManager(\n"; for (uint i=0; i<OPTION_MAX; i++) msg << m_OptionInfoSet[i].toString(); msg << "\n)"; return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -