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

📄 hitroll.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}	else if (pDefender->isOusters())	{		Ousters* pTargetOusters = dynamic_cast<Ousters*>(pDefender);		int MaxHP = pTargetOusters->getHP(ATTR_MAX);		int CurHP = pTargetOusters->getHP(ATTR_CURRENT);				bHPCheck   = (CurHP*multiplier <= MaxHP) ? true : false;		//bEffected  = pTargetOusters->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		bEffected = (normalMultiplier==multiplier) && pTargetOusters->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		Defense    = pTargetOusters->getDefense() + pTargetOusters->getLevel() / 5;		OtherLevel = pTargetOusters->getLevel();		// 眉仿捞 酒流 1/3捞 逞芭唱,		// 捞固 软趋阑 寸茄 惑怕扼搁 软趋阑 且 荐 绝促.		if (!bHPCheck || bEffected) return false;	}	else if (pDefender->isMonster())	{		Monster* pTargetMonster = dynamic_cast<Monster*>(pDefender);		int MaxHP = pTargetMonster->getHP(ATTR_MAX);		int CurHP = pTargetMonster->getHP(ATTR_CURRENT);				bHPCheck   = (CurHP*multiplier <= MaxHP) ? true : false;		//bEffected  = pTargetMonster->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		bEffected = (normalMultiplier==multiplier) && pTargetMonster->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		Defense    = pTargetMonster->getDefense() + pTargetMonster->getLevel() / 5;		OtherLevel = pTargetMonster->getLevel();		Defense = (Defense_t)getPercentValue(Defense, MonsterTimebandFactor[timeband]);		// 眉仿捞 酒流 1/3捞 逞芭唱,		// 捞固 软趋阑 寸茄 惑怕扼搁 软趋阑 且 荐 绝促.		if (!bHPCheck || bEffected) return false;		// 父老 快急鼻捞 捞固 技泼登绢 乐绰 阁胶磐扼搁...		// 软趋且 荐 乐绰 炼扒篮 快急鼻阑 啊柳 磊捞芭唱, 快急鼻阑 啊柳 颇萍俊 加茄 磊咯具 茄促.		if (pTargetMonster->isFlag(Effect::EFFECT_CLASS_PRECEDENCE))		{			EffectPrecedence* pEffectPrecedence = dynamic_cast<EffectPrecedence*>(pTargetMonster->findEffect(Effect::EFFECT_CLASS_PRECEDENCE));			Assert(pEffectPrecedence != NULL);			// 快急鼻阑 啊柳 磊啊 酒聪扼搁...			if (pAttacker->getName() != pEffectPrecedence->getHostName()) 			{				// 酒公 颇萍俊档 啊涝登绢 乐瘤 臼芭唱,				// 颇萍俊 啊涝登绢 乐绰单, 龋胶飘 颇萍 ID啊 酒聪扼搁, 软趋且 荐 绝促.				if (pAttacker->getPartyID() == 0 || pAttacker->getPartyID() != pEffectPrecedence->getHostPartyID())				{					return false;				}			}		}	}	else Assert(false);     	// 傍拜磊狼 捧三 棺 饭骇阑 拌魂茄促.	if (pAttacker->isVampire())	{		Vampire* pVampire = dynamic_cast<Vampire*>(pAttacker);		ToHit     = pVampire->getToHit();		VampLevel = pVampire->getLevel();		ToHit = (ToHit_t)getPercentValue(ToHit, VampireTimebandFactor[timeband]);	}	else if (pAttacker->isMonster())	{		Monster* pMonster = dynamic_cast<Monster*>(pAttacker);		ToHit     = pMonster->getToHit();		VampLevel = pMonster->getLevel();		ToHit = (ToHit_t)getPercentValue(ToHit, MonsterTimebandFactor[timeband]);	}	if (ToHit >= Defense)	{		// 捧三捞 叼奇胶焊促 臭篮 版快俊绰 嘎免 犬伏捞 蚕...臭促.		ratio = min(90, (ToHit - Defense) / 2 + 70);	}	else	{		// 捧三捞 叼奇胶焊促 撤篮 版快俊绰 嘎免 犬伏捞 腹捞 冻绢柳促.		ratio = max(10, 70 - (Defense - ToHit) / 2);	}	if ((rand()%100) < ratio) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// 历林 付过 洒飘费 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessCurse(int MagicLevel, Resist_t resist){	// MagicLevel篮 轨颇捞绢啊 弊 付过阑 硅快绰 单 鞘夸茄 饭骇捞促.	// 溜 臭篮 饭骇狼 历林 付过老荐废 MagicLevel捞 臭酒柳促.	//	// MagicLevel捞 30捞绊, 历亲捞 20捞扼搁...	// curse_prob = 110捞绊, 历林绰 亲惑 己傍窍霸 等促.	// MagicLevel捞 30捞绊, 历亲捞 100捞扼搁...	// curse_prob = 30捞绊, 付过篮 70% 犬伏肺 角菩窍霸 等促.#ifdef __CHINA_SERVER__	int prob_penalty = (int)(MagicLevel - resist);	int curse_prob   = 65 + prob_penalty;#else	int prob_penalty = (int)(MagicLevel*2/1.5 - resist);	int curse_prob   = 75 + prob_penalty;	curse_prob = max( 5, curse_prob );#endif	int randomValue  = rand()%100;	// 酒, 揪官. 历林 吧啡促.	if (randomValue < curse_prob) return true;	// 历亲仿俊 狼秦辑 吧府瘤 臼疽促. 酒轿府...	return false;}//////////////////////////////////////////////////////////////////////////////// 历林 付过 洒飘费 窃荐 - 轨颇捞绢啊 历林甫 吧锭//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessVampireCurse(int MagicLevel, Resist_t resist){	// MagicLevel篮 轨颇捞绢啊 弊 付过阑 硅快绰 单 鞘夸茄 饭骇阑 2肺 唱传	// 巴捞促. 溜 臭篮 饭骇狼 历林 付过老荐废 MagicLevel捞 臭酒柳促.	//	// MagicLevel捞 30捞绊, 历亲捞 20捞扼搁...	// curse_prob = 110捞绊, 历林绰 亲惑 己傍窍霸 等促.	// MagicLevel捞 30捞绊, 历亲捞 100捞扼搁...	// curse_prob = 30捞绊, 付过篮 70% 犬伏肺 角菩窍霸 等促.	int prob_penalty = (int)( (int)(MagicLevel/1.5) - resist);	int curse_prob   = 75 + prob_penalty;	curse_prob = max( 5, curse_prob );	int randomValue  = rand()%100;	// 酒, 揪官. 历林 吧啡促.	if (randomValue < curse_prob) return true;	// 历亲仿俊 狼秦辑 吧府瘤 臼疽促. 酒轿府...	return false;}//////////////////////////////////////////////////////////////////////////////// CurePoison 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessCurePoison(int Base, int SkillLevel, int Difficulty, int MagicLevel, int MinRatio){	int ratio = Base + SkillLevel - Difficulty - MagicLevel;	// 弥家犬伏阑 笼绢持菌促. by Sequoia 2003. 3. 20	ratio = max( MinRatio, ratio );	if (rand()%100 < ratio) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// Flare 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessFlare(Creature* pTargetCreature, int SkillLevel){	Assert(pTargetCreature != NULL);	// 公利惑怕 眉农. by sigi. 2002.9.5	if (pTargetCreature->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE))		return false;	int ratio = 0;	if (pTargetCreature->isVampire())	{		Vampire* pVampire = dynamic_cast<Vampire*>(pTargetCreature);		ratio = 75 + SkillLevel - pVampire->getLevel();	}	else if (pTargetCreature->isMonster())	{		Monster* pMonster = dynamic_cast<Monster*>(pTargetCreature);		// 		// by sigi. 2002.10.30		if (pMonster->isMaster()#ifdef __UNDERWORLD__				|| pMonster->isUnderworld() || pMonster->getMonsterType() == 599#endif		)		{			return false;		}		ratio = 75 + SkillLevel - pMonster->getLevel();	}	if (rand()%100 < ratio) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// RemoveCurse 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessRemoveCurse(int Base, int SkillLevel, int Difficulty, int MagicLevel, int MinRatio = 0){	int ratio = Base + SkillLevel - Difficulty - MagicLevel;	// 弥家犬伏阑 笼绢持菌促. by Sequoia 2003. 3. 20	ratio = max( MinRatio, ratio );	if (rand()%100 < ratio) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// Rebuke 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessRebuke(Slayer* pSlayer, SkillSlot* pSkillSlot, Creature* pDefender){	if( pDefender->isSlayer() ) return false;	// 80饭骇 捞惑狼 轨颇捞绢绰 泪甸瘤 臼绰促.	if ( pDefender->isVampire() )	{		Vampire* pVampire = dynamic_cast<Vampire*>(pDefender);		if ( pVampire->getLevel() >= 80 )			return false;	}	else if ( pDefender->isOusters() )	{		Ousters* pOusters = dynamic_cast<Ousters*>(pDefender);		if ( pOusters->getLevel() >= 80 )			return false;	}	// 付胶磐 (官配府, 抛其令)绰 泪甸瘤 臼绰促.	if( pDefender->isMonster() )	{		Monster* pMonster = dynamic_cast<Monster*>(pDefender);		if( pMonster->isMaster()#ifdef __UNDERWORLD__				|| pMonster->isUnderworld() || pMonster->getMonsterType() == 599 #endif		)			return false;	}	Attr_t			INTE		= pSlayer->getINT(ATTR_CURRENT);	SkillLevel_t	SkillLevel	= pSkillSlot->getExpLevel();//	int ratio = ( INTE / 10 ) + ( SkillLevel / 3 );	int ratio = 20 + ( INTE / 10 ) + ( SkillLevel / 2 );	if (rand()%100 < ratio ) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// Magic Elusion 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessMagicElusion(Slayer* pSlayer){	Attr_t	SUM		=	pSlayer->getTotalAttr( ATTR_CURRENT );	int		Ratio	=	50 + (SUM/15);	return (rand()%100) < Ratio;}//////////////////////////////////////////////////////////////////////////////// Posion Mesh 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessPoisonMesh(Vampire* pVampire){	int		Ratio	=	30 + (pVampire->getLevel()/5);	return (rand()%100) < Ratio;}//////////////////////////////////////////////////////////////////////////////// Illusion Of Avenge 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessIllusionOfAvenge(Slayer* pSlayer){	Attr_t	SUM		=	pSlayer->getTotalAttr( ATTR_CURRENT );	int		Ratio	=	50 + (SUM/15);	return (rand()%100) < Ratio;}//////////////////////////////////////////////////////////////////////////////// Will Of Life 疙吝奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessWillOfLife(Vampire* pVampire){	int		Ratio	=	50 + pVampire->getLevel()/5;	return (rand()%100) < Ratio;}//////////////////////////////////////////////////////////////////////////////// 农府萍拿 洒飘 费阑 荐青茄促.//////////////////////////////////////////////////////////////////////////////bool HitRoll::isCriticalHit(Creature* pCreature, int CriticalBonus){	Assert(pCreature != NULL);	int CriticalRatio = pCreature->getCriticalRatio() + CriticalBonus;	if (rand()%1000 < CriticalRatio) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 伎橇 胶懦牢啊甫 眉农窍绰 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSlayerSelfSkill( SkillType_t skillType ){	switch ( skillType )	{		case SKILL_DANCING_SWORD:		case SKILL_CROSS_COUNTER:		case SKILL_EXPANSION:		case SKILL_SHARP_SHIELD:		case SKILL_GHOST_BLADE:		case SKILL_POTENTIAL_EXPLOSION:		case SKILL_CHARGING_POWER:		case SKILL_BERSERKER:		case SKILL_AIR_SHIELD:		case SKILL_SNIPING:		case SKILL_OBSERVING_EYE:		case SKILL_CREATE_HOLY_WATER:		case SKILL_LIGHT:		case SKILL_DETECT_HIDDEN:		case SKILL_BLESS:		case SKILL_STRIKING:		case SKILL_DETECT_INVISIBILITY:		case SKILL_AURA_SHIELD:		case SKILL_REFLECTION:		case SKILL_REBUKE:		case SKILL_SPIRIT_GUARD:		case SKILL_CURE_LIGHT_WOUNDS:		case SKILL_CURE_POISON:		case SKILL_PROTECTION_FROM_POISON:		case SKILL_CURE_SERIOUS_WOUNDS:		case SKILL_REMOVE_CURSE:		case SKILL_PROTECTION_FROM_CURSE:		case SKILL_CURE_CRITICAL_WOUNDS:		case SKILL_PROTECTION_FROM_ACID:		case SKILL_CURE_ALL:		case SKILL_PEACE:		case SKILL_ACTIVATION:		case SKILL_REGENERATION:		case SKILL_TURN_UNDEAD:			return true;		default:			return false;	}}bool HitRoll::isOustersSelfSkill( SkillType_t skillType ){	switch ( skillType )	{		case SKILL_EVADE:		case SKILL_BLUNTING:		case SKILL_CROSS_GUARD:		case SKILL_SHARP_CHAKRAM:			return true;		default:			return false;	}}bool HitRoll::isSuccessHallucination( Vampire* pAttacker, Creature* pTarget ){	if ( pTarget->isMonster() ) return true;	Attr_t attackTotalAttr = pAttacker->getSTR() + pAttacker->getDEX() + pAttacker->getINT();	Attr_t targetTotalAttr = 0;	int minRatio = 0, maxRatio = 100;	if ( pTarget->isSlayer() )	{		Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pTarget);		targetTotalAttr = pTargetSlayer->getTotalAttr();		minRatio = 30;		maxRatio = 60;	}	else if ( pTarget->isVampire() )	{		Vampire* pTargetVampire = dynamic_cast<Vampire*>(pTarget);		targetTotalAttr = pTargetVampire->getSTR() + pTargetVampire->getDEX() + pTargetVampire->getINT();		minRatio = 10;		maxRatio = 40;	}	else if ( pTarget->isOusters() )	{		Ousters* pTargetOusters = dynamic_cast<Ousters*>(pTarget);		targetTotalAttr = pTargetOusters->getSTR() + pTargetOusters->getDEX() + pTargetOusters->getINT();		minRatio = 10;		maxRatio = 50;	}	else return false;	int Ratio = attackTotalAttr - targetTotalAttr;	Ratio = max( minRatio, Ratio );	Ratio = min( maxRatio, Ratio );	return ( rand() % 100 ) < Ratio;}bool HitRoll::isSuccessBackStab( Ousters* pAttacker ){	int Ratio = min( 50, (pAttacker->getINT()/5) + (pAttacker->getDEX()/5) );	if ( rand() % 100 < Ratio ) return true;	return false;}

⌨️ 快捷键说明

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