📄 optioninfo.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : OptionInfo.cpp// Written By : 辫己刮// Description ://////////////////////////////////////////////////////////////////////////////#include "OptionInfo.h"#include "Assert.h"#include "DB.h"#include "StringStream.h"#include <algo.h>#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"//////////////////////////////////////////////////////////////////////////////// global varible initialization//////////////////////////////////////////////////////////////////////////////OptionInfoManager* g_pOptionInfoManager = NULL;// itemClass俊 optionType捞 嘿阑 荐 乐绰啊?boolisPossibleOptionClass(Item::ItemClass itemClass, OptionClass optionClass){ switch (itemClass) { // 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: case Item::ITEM_CLASS_OUSTERS_CHAKRAM: case Item::ITEM_CLASS_OUSTERS_WRISTLET: switch (optionClass) { case OPTION_STR : case OPTION_DEX : case OPTION_INT : case OPTION_HP : case OPTION_MP : case OPTION_HP_STEAL : case OPTION_MP_STEAL : case OPTION_TOHIT : case OPTION_DAMAGE : case OPTION_DURABILITY : case OPTION_ATTACK_SPEED : case OPTION_LUCK : case OPTION_ALL_ATTR : return true; default : return false; } 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: case Item::ITEM_CLASS_OUSTERS_COAT: case Item::ITEM_CLASS_OUSTERS_BOOTS: case Item::ITEM_CLASS_OUSTERS_CIRCLET: case Item::ITEM_CLASS_OUSTERS_ARMSBAND: switch (optionClass) { case OPTION_STR : case OPTION_DEX : case OPTION_INT : case OPTION_HP : case OPTION_MP : case OPTION_DEFENSE : case OPTION_PROTECTION : case OPTION_DURABILITY : case OPTION_LUCK : case OPTION_ALL_ATTR : return true; break; default : return false; } 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: case Item::ITEM_CLASS_OUSTERS_PENDENT: case Item::ITEM_CLASS_OUSTERS_RING: switch (optionClass) { case OPTION_STR : case OPTION_DEX : case OPTION_INT : case OPTION_HP : case OPTION_MP : case OPTION_HP_STEAL : case OPTION_MP_STEAL : case OPTION_HP_REGEN : case OPTION_MP_REGEN : case OPTION_TOHIT : case OPTION_DAMAGE : case OPTION_DEFENSE : case OPTION_PROTECTION : case OPTION_DURABILITY : case OPTION_POISON : case OPTION_ACID : case OPTION_CURSE : case OPTION_BLOOD : case OPTION_VISION : case OPTION_ATTACK_SPEED : case OPTION_LUCK : case OPTION_ALL_RES : case OPTION_ALL_ATTR : return true; break; default : return false; } break; case Item::ITEM_CLASS_VAMPIRE_AMULET: switch (optionClass) { case OPTION_STR : case OPTION_DEX : case OPTION_INT : case OPTION_HP : case OPTION_MP : case OPTION_HP_STEAL : case OPTION_MP_STEAL : case OPTION_HP_REGEN : case OPTION_MP_REGEN : case OPTION_TOHIT : case OPTION_DAMAGE : case OPTION_DURABILITY : case OPTION_POISON : case OPTION_ACID : case OPTION_CURSE : case OPTION_BLOOD : case OPTION_VISION : case OPTION_ATTACK_SPEED : case OPTION_LUCK : case OPTION_ALL_RES : case OPTION_ALL_ATTR : return true; break; default : return false; } break; /* 火 -.-; case Item::ITEM_CLASS_BLOOD_BIBLE : switch (optionClass) { case OPTION_STR : case OPTION_DEX : case OPTION_INT : case OPTION_HP : case OPTION_LUCK : case OPTION_ALL_RES : case OPTION_ALL_ATTR : case OPTION_VISION : case OPTION_CONSUME_MP : case OPTION_TRANS : case OPTION_MAGIC_DAMAGE : case OPTION_MELEE_DAMAGE : case OPTION_GAMBLE_PRICE : case OPTION_POTION_PRICE : return true; break; default : return false; } break; */ default: break; } return false;}/*bool OptionClassInfo::ApplyOption( PlayerCreature* pPC, int PlusPoint ){ if ( pPC == NULL ) return false; if ( pPC->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); return ApplyOption( pSlayer, PlusPoint ); } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); return ApplyOption( pVampire, PlusPoint ); } else if ( pPC->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>(pPC); return ApplyOption( pOusters, PlusPoint ); }}bool OptionClassInfo::ApplyOption( Slayer* pSlayer, int PlusPoint ){ if ( pSlayer == NULL ) return false;}bool OptionClassInfo::ApplyOption( Vampire* pVampire, int PlusPoint ){ if ( pVampire == NULL ) return false;}bool OptionClassInfo::ApplyOption( Ousters* pOusters, int PlusPoint ){ if ( pOusters == NULL ) return false;}*///////////////////////////////////////////////////////////////////////////////// class OptionInfo member methods//////////////////////////////////////////////////////////////////////////////OptionInfo::OptionInfo() throw(){ __BEGIN_TRY m_OptionType = 0; m_Name = ""; m_HName = ""; m_Nickname = ""; m_OptionClass = OPTION_MAX; m_PlusPoint = 0; m_PriceMultiplier = 0; m_ReqSTR = 0; m_ReqDEX = 0; m_ReqINT = 0; m_ReqSum = 0; m_ReqLevel = 0; m_Level = 0; m_Color = 0; m_Ratio = 0; m_GambleLevel = 0; // 促澜 窜拌狼 option栏肺 upgrade且锭 鞘夸茄 沥焊 m_PreviousOptionType = 0; m_UpgradeOptionType = 0; m_UpgradeRatio = 0; m_UpgradeSecondRatio = 0; m_UpgradeCrashPercent = 0; m_NextOptionRatio = 0; __END_CATCH}OptionInfo::~OptionInfo() throw(){ __BEGIN_TRY __END_CATCH}void OptionInfo::setReqAbility(const string& req) throw(){ __BEGIN_TRY uint a = 0, b = 0, c = 0; do { ////////////////////////////////////////////// // (DEX,40) (INT,40) // a b c a ////////////////////////////////////////////// a = req.find_first_of('(', c); b = req.find_first_of(',', a+1); c = req.find_first_of(')', b+1); if (a > b || b > c) break; Assert(a+1<b && b+1<c); string identifier = req.substr(a+1, b-a-1); Attr_t reqAbility = (Attr_t)atoi(req.substr(b+1, c-b-1).c_str()); if (identifier == "STR") { setReqSTR(reqAbility); } else if (identifier == "DEX") { setReqDEX(reqAbility); } else if (identifier == "INT") { setReqINT(reqAbility); } else if (identifier == "LEV") { setReqLevel(reqAbility); } else if (identifier == "SUM") { setReqSum(reqAbility); } else if (identifier != "") { //cerr << "OptionInfo::setReqAbility() : Unknown ability type [" << identifier << "]" << endl; throw ("OptionInfo::setReqAbility() : Unknown ability type"); } } while (c < req.size() -1); __END_CATCH}// 促澜 窜拌狼 可记栏肺 upgrade啊 己傍沁唱?bool OptionInfo::isUpgradeSucceed() const{ // 0捞 酒聪绊 // 犬伏父怒 rand()沁阑锭 漂沥茄 茄 蔼(0)捞 唱坷绰 版快啊 己傍捞促. //return m_UpgradeRatio!=0 && (rand()%m_UpgradeRatio==0); // 弊繁单.. 扁裙捞 归盒啦肺 唱吭促. -_-; return (rand()%100 < (int)m_UpgradeRatio);}// 促澜 窜拌狼 可记栏肺 upgrade啊 己傍沁唱?bool OptionInfo::isUpgradeSecondSucceed() const{ // 0捞 酒聪绊 // 犬伏父怒 rand()沁阑锭 漂沥茄 茄 蔼(0)捞 唱坷绰 版快啊 己傍捞促. //return m_UpgradeRatio!=0 && (rand()%m_UpgradeRatio==0); // 弊繁单.. 扁裙捞 归盒啦肺 唱吭促. -_-; return (rand()%100 < (int)m_UpgradeSecondRatio);}// 促澜 窜拌狼 可记栏肺 upgrade 窍促啊 角菩秦辑 item捞 何辑脸唱?bool OptionInfo::isUpgradeCrash() const{ return (rand()%100 < m_UpgradeCrashPercent);}string OptionInfo::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "OptionInfo (" << "Type:" << (int)m_OptionType << "Name:" << m_Name << "HName:" << m_HName << "Nickname:" << m_Nickname << "Class:" << (int)m_OptionClass << "PlusPoint:" << (int)m_PlusPoint << "PriceMultiplier:" << (int)m_PriceMultiplier << "ReqSTR:" << (int)m_ReqSTR << "ReqDEX:" << (int)m_ReqDEX << "ReqINT:" << (int)m_ReqINT << "ReqSum:" << (int)m_ReqSum << "ReqLevel:" << (int)m_ReqLevel << "Level:" << (int)m_Level << "GambleLevel:" << (int)m_GambleLevel << "Color:" << (int)m_Color << "Ratio:" << (int)m_Ratio << "PreviousOptionType:" << (int)m_PreviousOptionType << "UpgradeOptionType:" << (int)m_UpgradeOptionType << "UpgradeRatio:" << (int)m_UpgradeRatio
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -