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

📄 monsterinfo.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			TreasureList* pVampireTreasureList = new TreasureList;			const vector<MonsterType_t>& MTypeVector = getMonsterTypeBySprite(SType);			for (uint i=0; i<MTypeVector.size(); i++)			{				int MType = MTypeVector[i];				MonsterInfo* pMonsterInfo = (MonsterInfo*)getMonsterInfo(MType);				if (i == 0)				{					pMonsterInfo->setSlayerTreasureList(pSlayerTreasureList);					pMonsterInfo->setVampireTreasureList(pVampireTreasureList);					pMonsterInfo->parseSlayerTreasureString(slayer_treasure);					pMonsterInfo->parseVampireTreasureString(vampire_treasure);					// 颇老俊促 敬促.					//saveTreasure((string)(hname + ".slayer"), pSlayerTreasureList);					//saveTreasure((string)(hname + ".vampire"), pVampireTreasureList);				}				else				{					pMonsterInfo->setSlayerTreasureList(pSlayerTreasureList);					pMonsterInfo->setVampireTreasureList(pVampireTreasureList);				}				// 八刘茄促.				cout << "MonsterType:" << pMonsterInfo->getMonsterType() 					<< ",MonsterName:" << pMonsterInfo->getEName()					<< ",SlayerTreasure:" << pMonsterInfo->getSlayerTreasureList()->getTreasures().size()					<< ",VampireTreasure:" << pMonsterInfo->getVampireTreasureList()->getTreasures().size()					<< endl;			}			slayer_treasure.clear();			vampire_treasure.clear();		}		*/		SAFE_DELETE(pStmt);	} 	END_DB(pStmt)	hash_map<int, vector<SpriteType_t> >::iterator itr = m_MonsterClassMap.begin();	hash_map<int, vector<SpriteType_t> >::iterator endItr = m_MonsterClassMap.end();	for ( ; itr != endItr ; ++itr )	{		cout << "Class[" << itr->first << "] : ";		copy( itr->second.begin(), itr->second.end(), ostream_iterator<SpriteType_t>( cout, ", " ) );		cout << endl;	}	__END_DEBUG	__END_CATCH}void MonsterInfoManager::reload (MonsterType_t monsterType) 	throw (Error){	__BEGIN_TRY	__BEGIN_DEBUG	bool bLoadAll = (monsterType==0);	Statement* pStmt   = NULL;	Result*    pResult = NULL;	BEGIN_DB	{		pStmt   = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		pResult = pStmt->executeQuery("SELECT MAX(MType) FROM MonsterInfo");		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, UnburrowChance, Master, ClanType, MonsterSummonInfo, DefaultEffects, NormalRegen "			<< " FROM MonsterInfo";		// 傈何 促 loading窍绰霸 酒聪扼搁 漂沥 MonsterType阑 汲沥茄促.		if (!bLoadAll)		{			sql << " WHERE MType=" << monsterType;		}		pResult = pStmt->executeQuery( sql.toString().c_str() );		while (pResult->next()) 		{			int i = 0;			int MType = pResult->getInt(++i);			MonsterInfo* pMonsterInfo = (MonsterInfo*)getMonsterInfo(MType);			if (pMonsterInfo!=NULL)			{				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->setNormalRegen(pResult->getInt(++i)!=0);			}		}		int startType = 0; 		int endType   = m_MaxMonsterType;		// 傈何 促 loading窍绰霸 酒聪扼搁 漂沥 MonsterType阑 汲沥茄促.		if (!bLoadAll)		{			startType = monsterType;			endType   = monsterType+1;		}		clearTreasures();		for (int i=startType; i<endType; i++)		{			MonsterInfo* pInfo = m_MonsterInfos[i];			if (pInfo != NULL)			{				if (pInfo->hasTreasure())				{					string slayer_filename  = g_pConfig->getProperty("HomePath") + "/data/" + pInfo->getHName() + ".slayer.bin";					string vampire_filename = g_pConfig->getProperty("HomePath") + "/data/" + pInfo->getHName() + ".vampire.bin";					string ousters_filename = g_pConfig->getProperty("HomePath") + "/data/" + pInfo->getHName() + ".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;					*/				}			}		}		SAFE_DELETE(pStmt);	} 	END_DB(pStmt)	__END_DEBUG	__END_CATCH}void MonsterInfoManager::addMonsterInfo (MonsterType_t monsterType , MonsterInfo* pMonsterInfo) 	throw (DuplicatedException , OutOfBoundException , Error){	__BEGIN_TRY	if (monsterType >= m_MaxMonsterType) 	{		cerr << "MonsterInfoManager::addMonsterInfo() : Out of bounds" << endl;		throw OutOfBoundException();	}		if (m_MonsterInfos[monsterType] != NULL)	{		cerr << "MonsterInfoManager::addMonsterInfo() : Duplicated Exception" << endl;		throw DuplicatedException();	}	m_MonsterInfos[monsterType] = pMonsterInfo;	if (pMonsterInfo->isNormalRegen())	{		m_MonsterSpriteSet[pMonsterInfo->getSpriteType()].push_back(monsterType);	}	m_MonsterSpriteTypes[pMonsterInfo->getHName()] = pMonsterInfo->getSpriteType();	if (pMonsterInfo->isChief())	{		m_ChiefMonster[pMonsterInfo->getHName()] = pMonsterInfo->getMonsterType();	}	if ( pMonsterInfo->getMonsterClass() != 0 && pMonsterInfo->isNormalRegen() )	{		vector<SpriteType_t>& mList = m_MonsterClassMap[pMonsterInfo->getMonsterClass()];		vector<SpriteType_t>::iterator itr = find_if( mList.begin(), mList.end(), bind2nd( greater_equal<int>(), pMonsterInfo->getSpriteType() ) );		if ( itr == mList.end() || *itr != pMonsterInfo->getSpriteType() ) mList.insert( itr, pMonsterInfo->getSpriteType() );	}	__END_CATCH}const MonsterInfo* MonsterInfoManager::getMonsterInfo (MonsterType_t monsterType) const 	throw (NoSuchElementException , OutOfBoundException , Error){	__BEGIN_TRY	if (monsterType >= m_MaxMonsterType)	{		cerr << "MonsterInfoManager::getMonsterInfo() : Out of bounds" << endl;		throw OutOfBoundException();	}		if (m_MonsterInfos[monsterType] == NULL)	{		cerr << "MonsterInfoManager::getMonsterInfo() : No Such Element Exception" << endl;		throw NoSuchElementException();	}	// 老窜 困俊辑 茄锅 眉农啊 登搁 [] 甫 结档 等促.	return m_MonsterInfos[monsterType]; 	__END_CATCH}const vector<MonsterType_t>& MonsterInfoManager::getMonsterTypeBySprite(SpriteType_t spriteType) const	throw (NoSuchElementException , OutOfBoundException , Error){	__BEGIN_TRY	if (m_MonsterSpriteSet[spriteType].empty())	{		cerr << "MonsterInfoManager::getMonsterTypeBySprite() : no such element exception" << (int)spriteType << endl;		throw NoSuchElementException();	}		if (spriteType >= MAX_SPRITE_TYPE)	{		cerr << "MonsterInfoManager::getMonsterTypeBySprite() : out of bounds" << endl;		throw OutOfBoundException();	}	return m_MonsterSpriteSet[spriteType];	__END_CATCH}SpriteType_t MonsterInfoManager::getSpriteTypeByName(const string& monsterName) const	throw (NoSuchElementException , Error){	__BEGIN_TRY	hash_map<string, SpriteType_t>::const_iterator itr = m_MonsterSpriteTypes.find( monsterName );		if (itr==m_MonsterSpriteTypes.end())	{		//cerr << "MonsterInfoManager::getMonsterTypeBySprite() : no such element exception" << endl;		//throw NoSuchElementException();		return 0;	}		return itr->second;	__END_CATCH}MonsterType_t MonsterInfoManager::getChiefMonsterTypeByName(const string& monsterName) const	throw (NoSuchElementException , Error){	__BEGIN_TRY	hash_map<string, SpriteType_t>::const_iterator itr = m_ChiefMonster.find( monsterName );		if (itr==m_ChiefMonster.end())	{		//cerr << "MonsterInfoManager::getMonsterTypeBySprite() : no such element exception" << endl;		//throw NoSuchElementException();		return 0;	}		return itr->second;	__END_CATCH}MonsterType_t MonsterInfoManager::getRandomMonsterByClass( int minClass, int maxClass ){	int totalCand = 0;	for ( int i = minClass; i <= maxClass; ++i )	{		totalCand += m_MonsterClassMap[i].size();	}	int value = rand()%totalCand;	SpriteType_t Target;	int index = minClass;	while ( true )	{		vector<SpriteType_t>& sList = m_MonsterClassMap[index];		if ( value >= sList.size() )		{			value -= sList.size();			++index;		}		else		{			Target = sList[value];			break;		}	}	return getMonsterTypeBySprite(Target).front();}string MonsterInfoManager::toString () const 	throw (){	__BEGIN_TRY	StringStream msg;	msg << "MonsterInfoManager(";	for (uint i = 0 ; i < m_MaxMonsterType ; i ++) 	{		if (m_MonsterInfos[i] == NULL) msg << "NULL";		else                           msg << m_MonsterInfos[i]->toString();	}	msg << ")";	return msg.toString();	__END_CATCH}

⌨️ 快捷键说明

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