📄 monsterinfo.cpp
字号:
bool MonsterInfo::hasNextMonsterSummonInfo(int step) const{ if (m_pMonsterSummonInfo==NULL) { return false; } return m_pMonsterSummonInfo->hasNextMonsterCollection(step);}// a b// IMMUNE_TO_BLOOD_DRAIN, IMMUNE_TO_PARALYZE, IMMUNE_TO_POISON, IMMUNE_TO_ACID, IMMUNE_TO_CURSEvoid MonsterInfo::setDefaultEffects(const string& text) { m_DefaultEffects.clear(); if (text.size() < 1) return; uint a = 0 , b = 0; while (b < text.size() - 1) { b = text.find_first_of(',',a); string part = trim( text.substr(a, b-a) ); //b-1 -a+1); if (part == "IMMUNE_TO_BLOOD_DRAIN") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_IMMUNE_TO_BLOOD_DRAIN ); else if (part == "IMMUNE_TO_PARALYZE") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_IMMUNE_TO_PARALYZE ); else if (part == "IMMUNE_TO_POISON") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_IMMUNE_TO_POISON ); else if (part == "IMMUNE_TO_ACID") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_IMMUNE_TO_ACID ); else if (part == "IMMUNE_TO_CURSE") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_IMMUNE_TO_CURSE ); else if (part == "IMMUNE_TO_HALLUCINATION") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_IMMUNE_TO_HALLUCINATION ); else if (part == "DETECT_INVISIBILITY") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_DETECT_INVISIBILITY ); else if (part == "OBSERVING_EYE") m_DefaultEffects.push_back( Effect::EFFECT_CLASS_OBSERVING_EYE ); else { cout << "MonsterInfo::setDefaultEffects() - Wrong EffectClass: " << part.c_str() << endl; Assert(false); } a = b+1; }} void MonsterInfo::addDefaultEffects(Creature* pCreature) const{ list<Effect::EffectClass>::const_iterator itr = m_DefaultEffects.begin(); for (; itr!=m_DefaultEffects.end(); itr++) { Effect::EffectClass effectClass = *itr; pCreature->setFlag( effectClass ); // 角力肺 effect甫 嘿咯霖促. // 促弗 镑俊辑 effect甫 曼炼窍扁 锭巩捞促. by sigi. 2002.10.25 // 辟单.. 促弗 镑俊辑 assert(isSlayer())秦初篮霸 粱 乐绢辑 老窜 力芭. by sigi. 2002.10.28 /* switch (effectClass) { case Effect::EFFECT_CLASS_OBSERVING_EYE : { EffectObservingEye* pEffect = new EffectObservingEye(pCreature); pEffect->setDeadline(99999); pEffect->setDamageBonus(13); pEffect->setCriticalHitBonus(50); pEffect->setVisionBonus(1); pEffect->setSkillLevel( 99 ); pCreature->addEffect(pEffect); } break; case Effect::EFFECT_CLASS_DETECT_INVISIBILITY : { EffectDetectInvisibility* pEffectDetectInvisibility = new EffectDetectInvisibility(pCreature); pEffectDetectInvisibility->setDeadline(99999); pCreature->addEffect(pEffectDetectInvisibility); } break; default : break; } */ }}string MonsterInfo::toString () const throw (){ __BEGIN_TRY StringStream msg; msg << "MonsterInfo(" << "MonsterType:" << m_MonsterType << ",SpriteType:" << m_SpriteType << ",HName:" << m_HName << ",EName:" << m_EName << ",Level:" << (int)m_Level << ",STR:" << (int)m_STR << ",DEX:" << (int)m_DEX << ",INT:" << (int)m_INT << ",HP:" << m_HP << ",Exp:" << m_Exp << ",MainColor:" << (int)m_MainColor << ",SubColor:" << (int)m_SubColor << ",Alignment:" << MAlignment2String[m_Alignment] << ",AttackOrder:" << AttackOrder2String[m_AttackOrder] << ",Moral:" << (int)m_Moral << ",Delay:" << (int)m_Delay << ",Sight:" << (int)m_Sight << ",MoveMode:" << MoveMode2String[m_MoveMode] << ",RegenPortal:" << m_RegenType[REGENTYPE_PORTAL] << ",RegenInvisible:" << m_RegenType[REGENTYPE_INVISIBLE] << ",RegenBat:" << m_RegenType[REGENTYPE_BAT] << ",RegenHide:" << m_RegenType[REGENTYPE_HIDE] << ",UnburrowChance:" << m_UnburrowChance << ",HasTreasure:" << (int)m_bHasTreasure << ")"; return msg.toString(); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// class MonsterInfoManager member methods////////////////////////////////////////////////////////////////////////////////MonsterInfoManager::MonsterInfoManager () throw (){ __BEGIN_TRY m_MonsterInfos = NULL; __END_CATCH}MonsterInfoManager::~MonsterInfoManager () throw (){ __BEGIN_TRY SAFE_DELETE_ARRAY(m_MonsterInfos); __END_CATCH}void MonsterInfoManager::init () throw (Error){ __BEGIN_TRY load(); __END_CATCH}void MonsterInfoManager::clearTreasures(){ m_SlayerTreasureLists.clear(); m_VampireTreasureLists.clear(); m_OustersTreasureLists.clear(); }void MonsterInfoManager::load () throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Statement* pStmt = NULL; Result* pResult = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery("SELECT MAX(MType) FROM MonsterInfo"); // MonsterInfo 抛捞喉俊辑 弥措 MonsterType 蔼阑 啊廉柯促. // 捞 蔼篮 MonsterInfoManager狼 郴何 MonsterInfo* 硅凯狼 农扁啊 等促. if (pResult->getRowCount() == 0) { // 抛捞喉捞 绝促搁 寸楷洒 俊矾促... SAFE_DELETE(pStmt); throw Error("MonsterInfo table is empty.. insert any row."); } // 努扼捞攫飘俊辑绰 浇饭捞绢-轨颇捞绢-阁胶磐-NPC 甫 备盒窍瘤 臼绊, // 窜瘤 某腐磐肺辑 牢郸教阑 窍扁 锭巩俊, 档樊捞 承篮 快府啊 捞秦秦辑 // 嘎苗拎具 窍摆促. -_-; 角力 钙胶焊促 4甫 歹秦辑 硅凯阑 积己茄促. // 0:Male Slayer, 1:Female Slayer, 2:Male Vampire, 3:Female Vampire pResult->next(); m_MaxMonsterType = pResult->getInt(1) + 4 + 1; m_MonsterInfos = new (MonsterInfo*)[m_MaxMonsterType]; for (uint i = 0 ; i < m_MaxMonsterType ; i ++) m_MonsterInfos[i] = NULL; // MonsterInfo 抛捞喉肺何磐 阁胶磐 沥焊甫 佬绢辑 MonsterInfo 按眉俊 历厘, add 茄促. //RegenInvisible, RegenBat, /* StringStream sql; sql << "SELECT MType, SType, HName, EName, " << "Level, STR, DEX, INTE, BSize, Exp, " << "MColor, SColor, Align, AOrder, " << "Moral, Delay, ADelay, Sight, MeleeRange, MissileRange, " << "RegenPortal, RegenInvisible, RegenBat, " << "MMode, AIType, Enhance " << "FROM MonsterInfo"; */ //pResult = pStmt->executeQuery(sql.toString()); pResult = pStmt->executeQuery( "SELECT MType, SType, HName, EName, Level, STR, DEX, INTE, BSize, Exp, MColor, SColor, Align, AOrder, Moral, Delay, ADelay, Sight, MeleeRange, MissileRange, RegenPortal, RegenInvisible, RegenBat, MMode, AIType, Enhance, UnburrowChance, Master, ClanType, DefaultEffects, Chief, NormalRegen, HasTreasure, MonsterClass, SkullType FROM MonsterInfo"); while (pResult->next()) { int i = 0; MonsterInfo* pMonsterInfo = new MonsterInfo(); pMonsterInfo->setMonsterType(pResult->getInt(++i)); pMonsterInfo->setSpriteType(pResult->getInt(++i)); pMonsterInfo->setHName(pResult->getString(++i)); pMonsterInfo->setEName(pResult->getString(++i)); pMonsterInfo->setLevel(pResult->getInt(++i)); pMonsterInfo->setSTR(pResult->getInt(++i)); pMonsterInfo->setDEX(pResult->getInt(++i)); pMonsterInfo->setINT(pResult->getInt(++i)); pMonsterInfo->setBodySize(pResult->getInt(++i)); pMonsterInfo->setExp(pResult->getInt(++i)); pMonsterInfo->setMainColor(pResult->getInt(++i)); pMonsterInfo->setSubColor(pResult->getInt(++i)); pMonsterInfo->setAlignment((MAlignment)pResult->getInt(++i)); pMonsterInfo->setAttackOrder((AttackOrder)pResult->getInt(++i)); pMonsterInfo->setMoral(pResult->getInt(++i)); pMonsterInfo->setDelay(pResult->getInt(++i)); pMonsterInfo->setAttackDelay(pResult->getInt(++i)); pMonsterInfo->setSight(pResult->getInt(++i)); pMonsterInfo->setMeleeRange(pResult->getInt(++i)); pMonsterInfo->setMissileRange(pResult->getInt(++i)); int nPortal = pResult->getInt(++i); int nInvisible = pResult->getInt(++i); int nBat = pResult->getInt(++i); pMonsterInfo->setRegenType(REGENTYPE_PORTAL, nPortal); pMonsterInfo->setRegenType(REGENTYPE_INVISIBLE, nInvisible); pMonsterInfo->setRegenType(REGENTYPE_BAT, nBat); pMonsterInfo->setMoveMode(pResult->getString(++i)); pMonsterInfo->setAIType(pResult->getInt(++i)); pMonsterInfo->parseEnhanceAttr(pResult->getString(++i)); pMonsterInfo->setUnburrowChance(pResult->getInt(++i)); pMonsterInfo->setMaster(pResult->getInt(++i)!=0); pMonsterInfo->setClanType(pResult->getInt(++i)); //pMonsterInfo->setMonsterSummonInfo(pResult->getString(++i)); pMonsterInfo->setDefaultEffects(pResult->getString(++i)); pMonsterInfo->setChief( pResult->getInt(++i)!=0 ); pMonsterInfo->setNormalRegen(pResult->getInt(++i)!=0); pMonsterInfo->setHasTreasure(pResult->getInt(++i)!=0); pMonsterInfo->setMonsterClass(pResult->getInt(++i)); pMonsterInfo->setSkullType(pResult->getInt(++i)); addMonsterInfo(pMonsterInfo->getMonsterType(), pMonsterInfo); } // MonsterSummonInfo绰 蝶肺 汲沥茄促. // 老窜 阁胶磐 沥焊啊 load等 惑怕咯具 窍扁 锭巩捞促. (捞抚 厚背 锭巩俊) pResult = pStmt->executeQuery( "SELECT MType, MonsterSummonInfo FROM MonsterInfo"); while (pResult->next()) { int i = 0; MonsterInfo* pMonsterInfo = m_MonsterInfos[ pResult->getInt(++i) ]; Assert(pMonsterInfo!=NULL); pMonsterInfo->setMonsterSummonInfo(pResult->getString(++i)); } clearTreasures(); for (uint i=0; i<m_MaxMonsterType; i++) { MonsterInfo* pInfo = m_MonsterInfos[i]; if (pInfo != NULL) { if (pInfo->hasTreasure()) { string slayer_filename; string vampire_filename; string ousters_filename; if ( pInfo->getMonsterClass() == 0 ) { slayer_filename = g_pConfig->getProperty("HomePath") + "/data/" + pInfo->getHName() + ".slayer.bin"; vampire_filename = g_pConfig->getProperty("HomePath") + "/data/" + pInfo->getHName() + ".vampire.bin"; ousters_filename = g_pConfig->getProperty("HomePath") + "/data/" + pInfo->getHName() + ".ousters.bin"; } else { char buffer[10]; sprintf(buffer, "Class%d", pInfo->getMonsterClass()); slayer_filename = g_pConfig->getProperty("HomePath") + "/data/" + buffer + ".slayer.bin"; vampire_filename = g_pConfig->getProperty("HomePath") + "/data/" + buffer + ".vampire.bin"; ousters_filename = g_pConfig->getProperty("HomePath") + "/data/" + buffer + ".ousters.bin"; } TreasureList* pSlayerTreasureList = m_SlayerTreasureLists.getTreasure( slayer_filename ); TreasureList* pVampireTreasureList = m_VampireTreasureLists.getTreasure( vampire_filename ); TreasureList* pOustersTreasureList = m_OustersTreasureLists.getTreasure( ousters_filename ); if (pSlayerTreasureList==NULL) { printf("Load - slayer_filename:%s\n", slayer_filename.c_str()); pSlayerTreasureList = m_SlayerTreasureLists.loadTreasure( slayer_filename ); Assert(pSlayerTreasureList!=NULL); } if (pVampireTreasureList==NULL) { printf("Load - vampire_filename:%s\n", vampire_filename.c_str()); pVampireTreasureList = m_VampireTreasureLists.loadTreasure( vampire_filename ); Assert(pVampireTreasureList!=NULL); } if (pOustersTreasureList==NULL) { printf("Load - ousters_filename:%s\n", ousters_filename.c_str()); pOustersTreasureList = m_OustersTreasureLists.loadTreasure( ousters_filename ); Assert(pOustersTreasureList!=NULL); } pInfo->setSlayerTreasureList(pSlayerTreasureList); pInfo->setVampireTreasureList(pVampireTreasureList); pInfo->setOustersTreasureList(pOustersTreasureList); // 八刘茄促. //cout << "MonsterType:" << pInfo->getMonsterType() // << ",MonsterName:" << pInfo->getEName() // << ",SlayerTreasure:" << pInfo->getSlayerTreasureList()->getTreasures().size() // << ",VampireTreasure:" << pInfo->getVampireTreasureList()->getTreasures().size() // << endl; } else { cout << "[NoTreasureFile] " << pInfo->getHName().c_str() << endl; } } } /* pResult = pStmt->executeQuery("SELECT SType, SlayerTreasure, VampireTreasure, HName FROM MonsterInfo GROUP BY SType"); while (pResult->next()) { int SType = 0; string slayer_treasure = ""; string vampire_treasure = ""; string hname = ""; //slayer_treasure.reserve(100000); //vampire_treasure.reserve(50000); SType = pResult->getInt(1); slayer_treasure = pResult->getString(2); vampire_treasure = pResult->getString(3); hname = pResult->getString(4); TreasureList* pSlayerTreasureList = new TreasureList;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -