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

📄 monster.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			}			__END_PROFILE_MONSTER("M_UNBURROW");		}		// 利捞 绝阑 锭俊绰 甘狼 吝埃阑 氢秦 框流牢促.		// 付胶磐啊 酒囱 版快俊..		// 酒淬狼 己瘤 吝居 甘捞 捞惑窍霸 积败辑 酒淬狼 己瘤 吝居 甘档 救茄促.		else if (!isMaster() && m_pZone->getZoneID() != 72)		{			// 阁胶磐狼 鸥涝捞 Relic牢 版快绰 框流捞瘤 臼绰促.			if (m_RelicIndex==-1)			{				__BEGIN_PROFILE_MONSTER("M_MOVE_CENTER");				POINT pt(getX(), getY());				VSRect* pOuterRect = m_pZone->getOuterRect();				VSRect* pInnerRect = m_pZone->getInnerRect();				VSRect* pCoreRect  = m_pZone->getCoreRect();				// 救率何磐 八荤秦 唱埃促.				if (pCoreRect->ptInRect(pt) || pInnerRect->ptInRect(pt))				{					// 官冰率俊 乐促搁 罚待栏肺 框流牢促.					uint diceResult = rand() & 0x0000007F;	//%100;					if (diceResult < 6)						// 5					{						uint        direction = rand() & 0x00000007; //% 8;						ZoneCoord_t nx        = pt.x + dirMoveMask[direction].x;						ZoneCoord_t ny        = pt.y + dirMoveMask[direction].y;						// 1. 促澜 谅钎啊 喉钒欧捞 登绢乐瘤 臼酒具 窍绊,						// 2. 救傈 瘤措啊 酒聪扼搁,						if (canMove(nx, ny) && !(m_pZone->getZoneLevel(nx, ny) & SAFE_ZONE))						{							m_pZone->moveCreature(this, nx, ny, direction);						}					}				}				else if (pOuterRect->ptInRect(pt))				{					// 力老 官冰率俊 乐促搁, 甘狼 吝居阑 氢秦 框流牢促.					m_pBrain->move(m_pZone->getWidth()>>1, m_pZone->getHeight()>>1);				}				if ( ( m_bScanEnemy || isFlag(Effect::EFFECT_CLASS_HALLUCINATION) ) && currentTime > m_NextScanTurn )				{					m_pZone->monsterScan(this, m_X, m_Y, m_Dir);					// 5檬 饶 促矫 八祸					m_NextScanTurn.tv_sec = currentTime.tv_sec + 5;					m_NextScanTurn.tv_usec = currentTime.tv_usec;				}				__END_PROFILE_MONSTER("M_MOVE_CENTER");			}			// 促澜 畔阑 瘤沥茄促.			// 泅犁 阁胶磐甸篮 1檬俊 1鸥老父 框流捞扁 东矫肺.. =_=;			m_pBrain->setDelay(currentTime);		}	}	//----------------------------------------------------------------------	// HP甫 府哩茄促.	// fucking	//----------------------------------------------------------------------	__BEGIN_PROFILE_MONSTER("M_REGEN_HP");	int statSum = m_STR + m_DEX + m_INT;	if (rand()%600 < statSum && isAlive())		m_HP[ATTR_CURRENT] =(HP_t)min((int)m_HP[ATTR_CURRENT]+1, (int)m_HP[ATTR_MAX]);	if ( m_HP[ATTR_CURRENT] == m_HP[ATTR_MAX] && isFlag( Effect::EFFECT_CLASS_BLOOD_DRAIN ) )	{		removeFlag( Effect::EFFECT_CLASS_BLOOD_DRAIN );	}	__END_PROFILE_MONSTER("M_REGEN_HP");	__END_DEBUG	__END_CATCH}void Monster::actDeadAction(void) 	throw (Error){	__BEGIN_TRY	// 弊悼救 肺弊酒眶窍芭唱 救傈瘤措 救栏肺	// 甸绢埃 PC啊 乐栏搁 利 府胶飘俊辑 昏力甫 茄促.	verifyEnemies(); 	// AI啊 乐促搁..	if (m_pBrain!=NULL)	{		if (hasEnemy())		{			Creature* pEnemy = getPrimaryEnemy();			//Assert(pEnemy != NULL);			if (pEnemy!=NULL) m_pBrain->actDeadAction(pEnemy);		}	}	else if ( getMonsterType() == GROUND_ELEMENTAL_TYPE )	{		int oX, oY;		int X = getX();		int Y = getY();		for ( oX = X - 2 ; oX <= X + 2 ; ++oX )		for ( oY = Y - 2 ; oY <= Y + 2 ; ++oY )		{			if ( !isValidZoneCoord( getZone(), oX, oY ) ) continue;			Effect* pEffect = getZone()->getTile(oX,oY).getEffect( Effect::EFFECT_CLASS_GROUND_ELEMENTAL_AURA );			if ( pEffect != NULL )			{				getZone()->deleteEffect( pEffect->getObjectID() );			}		}	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 漂沥 农府贸甫 利 府胶飘俊 眠啊茄促.//// 眠啊且 锭, 阁胶磐狼 AttackOrder 啊 鉴辑俊 康氢阑 固模促.//// PC 啊 捞悼且 锭, 林函俊 AGGRESSIVE 阁胶磐啊 乐阑 版快, 弊 阁胶磐俊 // 措秦辑 addEnemy() 甫 龋免秦霖促. 肚绰 PC啊 阁胶磐甫 傍拜且 锭, 弊// 阁胶磐俊 措秦辑 addEnemy()甫 龋免秦霖促. (捞锭 己氢苞绰 公包窍促.)// PC啊 阁胶磐甫 傍拜且 锭, 林函狼 阁胶磐甸俊霸档 addEnemy()甫 龋免秦霖促.//////////////////////////////////////////////////////////////////////////////void Monster::addEnemy (Creature* pCreature)	throw (Error){	__BEGIN_TRY	__BEGIN_DEBUG	Assert(pCreature != NULL);	// 磊脚捞 酒聪搁.. by sigi. 2002.9.7	if (this==pCreature		|| !isRealEnemy(pCreature)) return;	// peace俊 吧妨乐促搁..	// addEnemy()绰 锭啡阑锭 阂府绰 窃荐捞骨肺.. pece甫 力芭茄促.	if (isFlag(Effect::EFFECT_CLASS_PEACE))	{		Effect* pEffect = m_pEffectManager->findEffect( Effect::EFFECT_CLASS_PEACE );		EffectPeace* pEffectPeace = dynamic_cast<EffectPeace*>(pEffect);		// peace牢 局扼搁 peace 力芭		if (pCreature->getObjectID()==pEffectPeace->getPeaceCreatureID())		{			pEffect->unaffect(this);			m_pEffectManager->deleteEffect( Effect::EFFECT_CLASS_PEACE );		}	}	try 	{		switch (getAttackOrder()) 		{			// 力老 刚历 锭赴 仇何磐 傍拜窍骨肺, 			// 啊厘 付瘤阜俊 眠啊登绢具 茄促.			case ATTACK_FIRST :          				{					// 扁撅窍绊 乐绰 利狼 箭磊啊 磊脚狼 弥措扁撅俺荐焊促 累绊,					// 磊脚捞 捞固 扁撅登绊 乐瘤 臼绰促搁, enemy list狼 盖 付瘤阜俊 眠啊茄促.					list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID());					if (itr == m_Enemies.end()) {						m_Enemies.push_back(pCreature->getObjectID());						if (m_Enemies.size() > getMaxEnemies()) {							m_Enemies.pop_back();						}					}				}				break;			// 力老 唱吝俊 锭赴 仇何磐 傍拜窍骨肺,			// 啊厘 菊俊 眠啊登绢具 茄促.			case ATTACK_LAST :           				{					// 扁撅窍绊 乐绰 利狼 箭磊啊 磊脚狼 弥措扁撅俺荐焊促 累绊,					// 磊脚捞 捞固 扁撅登绊 乐瘤 臼绰促搁, enemy list狼 盖 菊俊 眠啊茄促.					list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID());					if (itr == m_Enemies.end())					{						m_Enemies.push_front(pCreature->getObjectID());												// < 甫 > 肺 官插促. by sigi. 2002.10.7						if (m_Enemies.size() > getMaxEnemies()) 						{							m_Enemies.pop_back();						}					}				}				break;			// 力老 距茄 仇何磐 傍拜			case ATTACK_WEAKEST :        				{					// 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁...					list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID());					if (itr == m_Enemies.end()) {						if (pCreature->isSlayer()) {							Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);							itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerSlayer(m_pZone , pSlayer->getSkillDomainLevelSum()));									if (itr == m_Enemies.end())								m_Enemies.push_front(pSlayer->getObjectID());							else								m_Enemies.insert(itr , pSlayer->getObjectID());								}						else if (pCreature->isVampire()) {									Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);									itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerVampire(m_pZone , pVampire->getLevel()));									if (itr == m_Enemies.end())								m_Enemies.push_back(pVampire->getObjectID());							else								m_Enemies.insert(itr , pVampire->getObjectID());								} 						else if (pCreature->isOusters()) {									Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);									itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerOusters(m_pZone , pOusters->getLevel()));									if (itr == m_Enemies.end())								m_Enemies.push_back(pOusters->getObjectID());							else								m_Enemies.insert(itr , pOusters->getObjectID());								} 						// 犁固伙酒 -_-; 2002.7.22 by sigi						else if (pCreature->isMonster()) 						{							Monster* pMonster = dynamic_cast<Monster*>(pCreature);									itr = find_if (m_Enemies.begin() , m_Enemies.end() , StrongerMonster(m_pZone , pMonster->getLevel()));									if (itr == m_Enemies.end())								m_Enemies.push_back(pMonster->getObjectID());							else								m_Enemies.insert(itr , pMonster->getObjectID());							// 傈眉狼 利栏肺 牢侥矫难滚赴促.							// 何窍啊 缴秦辑 老窜 猾促.							//m_pZone->getMonsterManager()->addPotentialEnemy(this, pCreature);						}								// 货肺 眠啊等 搬苞, 沥盔阑 檬苞茄 版快 盖 付瘤阜 仇阑 昏力茄促.						if (!m_Enemies.empty() && m_Enemies.size() > getMaxEnemies())							m_Enemies.pop_back();					}				}				break;			// 力老 碍茄 仇何磐 傍拜			case ATTACK_STRONGEST :      				{					// 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁...					list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID());					if (itr == m_Enemies.end()) 					{						if (pCreature->isSlayer()) 						{							Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);							itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerSlayer(m_pZone , pSlayer->getSkillDomainLevelSum()));							if (itr == m_Enemies.end())								m_Enemies.push_front(pSlayer->getObjectID());							else								m_Enemies.insert(itr , pSlayer->getObjectID());						} 						else if (pCreature->isVampire()) 						{							Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);									itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerVampire(m_pZone , pVampire->getLevel()));									if (itr == m_Enemies.end())								m_Enemies.push_back(pVampire->getObjectID());							else								m_Enemies.insert(itr , pVampire->getObjectID());						}						else if (pCreature->isOusters()) 						{							Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);									itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerOusters(m_pZone , pOusters->getLevel()));									if (itr == m_Enemies.end())								m_Enemies.push_back(pOusters->getObjectID());							else								m_Enemies.insert(itr , pOusters->getObjectID());						}						// 犁固伙酒 -_-; 2002.7.22 by sigi						else if (pCreature->isMonster()) 						{							Monster* pMonster = dynamic_cast<Monster*>(pCreature);									itr = find_if (m_Enemies.begin() , m_Enemies.end() , WeakerMonster(m_pZone , pMonster->getLevel()));									if (itr == m_Enemies.end())								m_Enemies.push_back(pMonster->getObjectID());							else								m_Enemies.insert(itr , pMonster->getObjectID());									// 傈眉狼 利栏肺 牢侥矫难滚赴促.							// 何窍啊 缴秦辑 老窜 猾促.							//m_pZone->getMonsterManager()->addPotentialEnemy(this, pCreature);						}								// 货肺 眠啊等 搬苞, 沥盔阑 檬苞茄 版快 盖 付瘤阜 仇阑 昏力茄促.						if (!m_Enemies.empty() && m_Enemies.size() > getMaxEnemies())							m_Enemies.pop_back();					}				}				break;			// 力老 啊鳖款 仇 何磐 傍拜			// 利苞狼 芭府绰 拌加 函窍扁 锭巩俊, 郴何 府胶飘甫 拌加 			// 函版窍绰 措脚 利阑 绊甫 锭, 啊厘 啊滨芭唱 刚 利阑 			// 府畔窍档废 秦具 茄促.			case ATTACK_CLOSEST :        				{					// 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁...					list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID());					if (itr == m_Enemies.end()) 					{						// 老窜 眠啊茄促.						m_Enemies.push_back(pCreature->getObjectID());								// 沥盔 檬苞老 版快						if (m_Enemies.size() > getMaxEnemies()) 						{							// 穿啊 啊厘 芭府啊 刚瘤 舅酒辰促.							list<ObjectID_t>::iterator farest = m_Enemies.end();							Distance_t dist = 0;							for (itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) 								{								Creature* pEnemy = NULL;																/*								try								{									pEnemy = m_pZone->getCreature(*itr);								}								catch (NoSuchElementException& nsee)								{									//cerr << nsee.toString() << endl;									pEnemy = NULL;								}								*/								// NoSuch..力芭. by sigi. 2002.5.2								pEnemy = m_pZone->getCreature(*itr);								// zone俊 绝绰 版快.. 力芭窍搁 等促. by sigi. 2002.5.3								if (pEnemy == NULL)								{									dist = 255;									farest = itr;																		// 歹 捞惑 八荤秦杭 鞘夸啊 绝促.									break;								}								else								{									Distance_t curDist = getDistance(pEnemy->getX() , pEnemy->getY());									if (dist < curDist) 									{										dist = curDist;										farest = itr;									}								}							}									// 沥盔 檬苞捞骨肺, 啊厘 刚仇捞 窍唱绰 唱客具 茄寸.							//Assert(farest != m_Enemies.end());							// 啊厘 芭府啊 刚 仇阑 昏力茄促.							if (farest!=m_Enemies.end()) m_Enemies.erase(farest);						}					}				}				break;			// 力老 刚 仇 何磐 傍拜			case ATTACK_FAREST :         				{					// 磊脚捞 捞固 扁撅登绊 乐瘤 臼促搁...					list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID());					if (itr == m_Enemies.end()) 					{						// 老窜 眠啊茄促.						m_Enemies.push_back(pCreature->getObjectID());								// 沥盔 檬苞老 版快						if (m_Enemies.size() > getMaxEnemies()) 						{							// 穿啊 啊厘 芭府啊 啊鳖款瘤 舅酒辰促.							list<ObjectID_t>::iterator closest = m_Enemies.end();							Distance_t dist = 255;									for (itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) 							{								Creature* pEnemy = NULL;								/*								try								{									pEnemy = m_pZone->getCreature(*itr);								}								catch (NoSuchElementException& nsee)								{									//cerr << nsee.toString() << endl;									pEnemy = NULL;								}								*/								// NoSuch..力芭. by sigi. 2002.5.2								pEnemy = m_pZone->getCreature(*itr);								// zone俊 绝绰 版快.. 力芭窍搁 等促. by sigi. 2002.5.3								if (pEnemy == NULL)								{									dist = 0;									closest = itr;									// 歹 捞惑 八荤秦杭 鞘夸啊 绝促.									break;								}								else								{									Distance_t curDist = getDistance(pEnemy->getX() , pEnemy->getY());									if (dist > curDist) 									{										dist = curDist;										closest = itr;									}								}							}										// 啊厘 芭府啊 啊鳖款 仇阑 昏力茄促.							if (closest!=m_Enemies.end()) m_Enemies.erase(closest);						}					}				}				break;			// 傈荤 刚历 傍拜			case ATTACK_FIGHTER :        				{					throw UnsupportedError();					// 老窜 眠啊茄促.					m_Enemies.push_back(pCreature->getObjectID());					// 沥盔 檬苞老 版快					if (m_Enemies.size() > getMaxEnemies()) 					{						// 公荤 胶懦捞 漂洒 臭篮 浇饭捞绢啊 酒聪扼搁 绝浚促.						for (list<ObjectID_t>::iterator itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) 						{							//Creature* pCreature = m_pZone->getCreature(*itr);						}					}				}				break;			// 己流磊 刚历 傍拜			case ATTACK_PRIEST :         				{					throw UnsupportedError();					// 老窜 眠啊茄促.					m_Enemies.push_back(pCreature->getObjectID());					// 沥盔 檬苞老 版快					if (m_Enemies.size() > getMaxEnemies()) 					{						// 己流磊 付过捞 漂洒 臭篮 浇饭捞绢啊 酒聪扼搁 绝浚促.						for (list<ObjectID_t>::iterator itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) 						{							//Creature* pCreature = m_pZone->getCreature(*itr);						}					}				}				break;			// 扒呈 刚历 傍拜			case ATTACK_GUNNER :         				{					throw UnsupportedError();					// 老窜 眠啊茄促.					m_Enemies.push_back(pCreature->getObjectID());					// 沥盔 檬苞老 版快					if (m_Enemies.size() > getMaxEnemies()) 					{						// 扒呈 胶懦捞 漂洒 臭篮 浇饭捞绢啊 酒聪扼搁 绝浚促.						for (list<ObjectID_t>::iterator itr = m_Enemies.begin() ; itr != m_Enemies.end() ; itr ++) 						{							//Creature* pCreature = m_pZone->getCreature(*itr);						}					}				}				break;			// 泅犁 盔牢阑 舅 荐啊 绝绢辑 老窜 力老 困狼 鸥涝栏肺 阜酒初绰促.			default :								{					// 扁撅窍绊 乐绰 利狼 箭磊啊 磊脚狼 弥措扁撅俺荐焊促 累绊,					// 磊脚捞 捞固 扁撅登绊 乐瘤 臼绰促搁, enemy list狼 盖 付瘤阜俊 眠啊茄促.					list<ObjectID_t>::iterator itr = find(m_Enemies.begin() , m_Enemies.end() , pCreature->getObjectID());					if (itr == m_Enemies.end()) {						m_Enemies.push_back(pCreature->getObjectID());						if (m_Enemies.size() > getMaxEnemies()) {							m_Enemies.pop_back();						}					}				}				break;				//throw Error("illegal attack order");		}	} 	catch (Throwable & t) 	{		//cerr << t.toString() << endl;	}	__END_DEBUG	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 泪犁利牢 利阑 府胶飘狼 盖 第俊 眠啊茄促.// addEnemy()啊 流立利牢 傍拜矫俊 汲沥登绰 馆搁, addPotentialEnemy()绰// PC狼 捞悼, 肺弊牢矫 汲沥等促.//////////////////////////////////////////////////////////////////////////////void Monster::addPotentialEnemy (Creature* pCreature)	throw (Error){	__BEGIN_TRY

⌨️ 快捷键说明

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