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

📄 blooddrain.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		}		if (pMonster->isFlag(Effect::EFFECT_CLASS_INVISIBILITY))		{			addVisibleCreature(pZone, pMonster, true);		}		// 付胶磐 : 堡开 软趋 - -;		if (pMonster->isMaster()#ifdef __UNDERWORLD__				|| pMonster->isUnderworld() || pMonster->getMonsterType() == 599#endif		)		{			int x = pMonster->getX();			int y = pMonster->getY();			int Splash = 3 + rand()%5; // 3~7 付府			int range = 5;	// 11 x 11			list<Creature*> creatureList;			getSplashVictims(pMonster->getZone(), x, y, Creature::CREATURE_CLASS_MAX, creatureList, Splash, range);			list<Creature*>::iterator itr = creatureList.begin();			for (; itr != creatureList.end(); itr++)			{				Creature* pTargetCreature = (*itr);				Assert(pTargetCreature != NULL);							if (pMonster!=pTargetCreature)				{					//cout << "BloodDrain: " << pTargetCreature->getName().c_str() << endl;					executeMonster(pMonster, pTargetCreature);				}			}		}		// 老馆 各 : 茄 付府		else		{			if (executeMonster(pMonster, pEnemy))			{				bSuccess = true;			}			else 			{				executeSkillFailNormal(pMonster, getSkillType(), pEnemy);			}		}	} 	catch (Throwable & t) 	{		executeSkillFailException(pMonster, getSkillType());	}	// 己傍捞电 角菩电 阁胶磐俊霸 掉饭捞绰 吧绢霖促.	Timeval NextTurn = pMonster->getNextTurn();	Timeval DelayTurn;	DelayTurn.tv_sec = (bSuccess? 4 : 1);	// 己傍苞 角菩狼 delay甫 促福霸 茄促. by sigi. 2002.9.14	DelayTurn.tv_usec = 500000;	pMonster->addAccuDelay(DelayTurn);	//cout << "TID[" << Thread::self() << "]" << getSkillHandlerName() << " End(monster)" << endl;	__END_CATCH}bool BloodDrain::executeMonster(Monster* pMonster, Creature* pEnemy)	throw (Error){	__BEGIN_TRY	bool isMaster    = pMonster->isMaster()#ifdef __UNDERWORLD__	|| pMonster->isUnderworld() || pMonster->getMonsterType() == 599#endif	;	// 磷菌栏搁 软趋 给窍绊..	// 付胶磐绰 酒公唱 促 湖促 - -;	// 措惑捞 磷菌栏搁 给 湖促.	if (pMonster->isDead()		|| pMonster->isFlag(Effect::EFFECT_CLASS_COMA)		|| !pMonster->isEnemyToAttack(pEnemy) && !isMaster		|| pEnemy->isDead() || pEnemy->isFlag(Effect::EFFECT_CLASS_COMA))	{		return false;	}	Zone* pZone = pMonster->getZone();	Assert(pZone != NULL);	GCBloodDrainOK1 _GCBloodDrainOK1;	GCBloodDrainOK2 _GCBloodDrainOK2;	GCBloodDrainOK3 _GCBloodDrainOK3;	// 付胶磐绰 眉仿 100% 扼档 巩促.	int HPMultiplier = (isMaster? 1 : 3);	// 泅犁 HP啊 1/1,  1/3	bool bHitRoll    = HitRoll::isSuccessBloodDrain(pMonster, pEnemy, HPMultiplier);	bool bCanHit     = canHit(pMonster, pEnemy, SKILL_BLOOD_DRAIN);	// 付胶磐绰 芭府俊 包拌绝捞 巩促~	bool bRangeCheck = isMaster || verifyDistance(pMonster, pEnemy, 1);	// 软趋 搁开 惑怕. by sigi. 2002.9.13	bool bEffected = pEnemy->isFlag(Effect::EFFECT_CLASS_IMMUNE_TO_BLOOD_DRAIN);	if (bHitRoll && bCanHit && bRangeCheck && !bEffected)	{		if (pEnemy->isSlayer())		{			// Set EffectBloodDrain			// 付胶磐搁 救扒促.			if (!isMaster)			{				EffectBloodDrain* pEffectBloodDrain = new EffectBloodDrain(pEnemy);				pEffectBloodDrain->setLevel(pMonster->getLevel());				pEffectBloodDrain->setDeadline(BLOODDRAIN_DURATION);	// 霸烙矫埃栏肺 3老 沥档				pEnemy->addEffect(pEffectBloodDrain);				pEffectBloodDrain->create(pEnemy->getName());				_GCBloodDrainOK2.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_BLOOD_DRAIN);				pEnemy->setFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);				Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pEnemy);				SLAYER_RECORD prev;				pTargetSlayer->getSlayerRecord(prev);				pTargetSlayer->initAllStat();				pTargetSlayer->sendRealWearingInfo();				pTargetSlayer->addModifyInfo(prev, _GCBloodDrainOK2);			}			// 肺弊甫 巢变促.			log(LOG_BLOODDRAINED, pEnemy->getName(), "霸烙 郴狼 阁胶磐");		}		// 酒快胶磐令狼 版快浚..... -_-; 力茄矫埃 绝绰 捞棋飘甫 积己茄促. 决剐洒 富秦 力茄矫埃捞 绝绰 扒 酒聪瘤父..//		else if ( pEnemy->isOusters() && !isMaster )//		{//			EffectBloodDrain* pEffectBloodDrain = new EffectBloodDrain(pEnemy);//			pEffectBloodDrain->setLevel(pMonster->getLevel());//			pEnemy->addEffect(pEffectBloodDrain);//			pEffectBloodDrain->create(pEnemy->getName());//			_GCBloodDrainOK2.addShortData(MODIFY_EFFECT_STAT, Effect::EFFECT_CLASS_BLOOD_DRAIN);////			pEnemy->setFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);////			Sight_t oldSight = pEnemy->getSight();//			Sight_t newSight = pEnemy->getEffectedSight();////			if ( oldSight != newSight )//			{//				pEnemy->setSight(newSight);//				pZone->updateScan(pEnemy, oldSight, pEnemy->getSight());//				_GCBloodDrainOK2.addShortData(MODIFY_VISION, pEnemy->getSight());////				GCChangeDarkLight gcChangeDarkLight;//				gcChangeDarkLight.setDarkLevel(15);//				gcChangeDarkLight.setLightLevel(newSight);//				pEnemy->getPlayer()->sendPacket(&gcChangeDarkLight);//			}//		}		_GCBloodDrainOK3.setObjectID(pMonster->getObjectID());		_GCBloodDrainOK3.setTargetObjectID (pEnemy->getObjectID());		// 鸥百捞 构电 敲贰弊绰 扒促.		// 付胶磐搁 救扒促.		if (!isMaster)		{			pEnemy->setFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		}		if (pEnemy != NULL && pEnemy->isPC()) 		{			Player* pTargetPlayer = pEnemy->getPlayer();			if (pTargetPlayer != NULL) 			{ 				_GCBloodDrainOK2.setObjectID(pMonster->getObjectID());					if (!isMaster)				{					_GCBloodDrainOK2.addLongData(MODIFY_DURATION, BLOODDRAIN_DURATION);				}				pTargetPlayer->sendPacket(&_GCBloodDrainOK2);			}		}		// target		int targetLevel = 0;		int targetMaxHP = 0;		if (pEnemy->isSlayer()) 		{			Slayer* pTargetSlayer  = dynamic_cast<Slayer*>(pEnemy);			targetLevel = pTargetSlayer->getHighestSkillDomainLevel();			targetMaxHP = pTargetSlayer->getHP(ATTR_MAX);		}		else if (pEnemy->isVampire()) 		{			Vampire* pTargetVampire  = dynamic_cast<Vampire*>(pEnemy);			targetLevel = pTargetVampire->getLevel();			targetMaxHP = pTargetVampire->getHP(ATTR_MAX);		}		else if (pEnemy->isOusters()) 		{			Ousters* pTargetOusters  = dynamic_cast<Ousters*>(pEnemy);			targetLevel = pTargetOusters->getLevel();			targetMaxHP = pTargetOusters->getHP(ATTR_MAX);		}		else if (pEnemy->isMonster())		{			Monster* pEnemyMonster = dynamic_cast<Monster*>(pEnemy);			// 软趋寸窍绰 阁胶磐茄抛 掉饭捞 吧绢霖促.			Timeval DelayTurn;			DelayTurn.tv_sec = 4;			DelayTurn.tv_usec = 500000;			pEnemyMonster->addAccuDelay(DelayTurn);			if ( ( pMonster->isMaster()#ifdef __UNDERWORLD__				|| pMonster->isUnderworld() || pMonster->getMonsterType() == 599 #endif			)				&& pMonster->getClanType()==pEnemyMonster->getClanType())			{				// 鞍篮 clan狼 付胶磐捞搁 乔 惑吵捞扼绊 杭 荐 乐阑鳖 -_-;			}			else			{				pEnemyMonster->addEnemy(pMonster);			}			targetLevel = pEnemyMonster->getLevel();			targetMaxHP = pEnemyMonster->getHP(ATTR_MAX);		}		// 磊脚捞唱 惑措规 吝.. HP啊 腹篮 率狼 15~25%		HP_t maxHP = max((int)pMonster->getHP(ATTR_MAX), targetMaxHP);		HP_t drainHP = maxHP*(rand()%11+15)/100; // 15~25%		// 茄锅俊 1000捞惑 救 蛮促.		drainHP = min((int)drainHP, 1000);		// 阁胶磐狼 HP甫 棵妨霖促.		HP_t CurrentHP = pMonster->getHP();		HP_t MaxHP	   = pMonster->getHP(ATTR_MAX);		HP_t NewHP     = min((int)MaxHP , (int)CurrentHP + (int)drainHP);		// 轨颇捞绢狼 HP甫 技泼茄促.		pMonster->setHP(NewHP);		GCStatusCurrentHP gcStatusCurrentHP;		gcStatusCurrentHP.setObjectID(pMonster->getObjectID());		gcStatusCurrentHP.setCurrentHP(NewHP);		pZone->broadcastPacket(pMonster->getX(), pMonster->getY(), &gcStatusCurrentHP);		// 软趋 寸茄 局狼 HP甫 临牢促.		// 措惑捞 郴 饭骇焊促 臭促搁.. MaxHP狼 10~15% damage		// by sigi. 2002.9.14		int drainDamage = 0;		int myLevel = pMonster->getLevel();		if (targetLevel > myLevel)		{			drainDamage = targetMaxHP * (rand()%6+10) / 100;		}		else		{			// 饭骇 5瞒捞付促 1%究 歹~			int damagePercent = min(30, (rand()%6+10+(myLevel-targetLevel)));			drainDamage = targetMaxHP * damagePercent / 100;		}				if (drainDamage > 0)		{			//decreaseHP(pZone, pEnemy, drainDamage);			EffectDecreaseHP* pEffect = new EffectDecreaseHP(pEnemy);			pEffect->setPoint(drainDamage);			pEffect->setDeadline( 20 );	// 2檬 饶			pEffect->setUserObjectID( pMonster->getObjectID() );			pEnemy->addEffect(pEffect);			pEnemy->setFlag(Effect::EFFECT_CLASS_DECREASE_HP);		}		// 软趋 葛嚼 焊捞霸..		list<Creature *> cList;		cList.push_back(pEnemy);		cList.push_back(pMonster);		pZone->broadcastPacket(pMonster->getX(), pMonster->getY(), &_GCBloodDrainOK3 , cList);		// 软趋 己傍		return true;	}	__END_CATCH	return false;}BloodDrain g_BloodDrain;

⌨️ 快捷键说明

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