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

📄 hitroll.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : HitRoll.cpp// Written by  : excel96// Description ://////////////////////////////////////////////////////////////////////////////#include "HitRoll.h"#include "SkillInfo.h"#include "Slayer.h"#include "Vampire.h"#include "Ousters.h"#include "Monster.h"#include "LogClient.h"#include "RankBonus.h"#include "Skill.h"#include "Zone.h"//#include <math.h>#include "EffectPrecedence.h"#include "EffectHymn.h"//////////////////////////////////////////////////////////////////////////////// 老馆 傍拜 hitroll 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccess(Creature* pAttacker, Creature* pDefender, int ToHitBonus){	Assert(pAttacker != NULL);	Assert(pDefender != NULL);	Zone* pZone = pAttacker->getZone();	Assert( pZone != NULL );	// 公利惑怕 眉农. by sigi. 2002.9.5	if (pDefender->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE))	{		return false;	}	ToHit_t   ToHit    = 0;	Defense_t Defense  = 0;	uint      timeband = pZone->getTimeband();	bool 	  isMonster = false;		// 傍拜磊狼 捧三阑 拌魂茄促.	if (pAttacker->isSlayer())	{		Slayer* pSlayerAttacker = dynamic_cast<Slayer*>(pAttacker);		Assert(pSlayerAttacker != NULL);		ToHit = pSlayerAttacker->getToHit();		//cout << "HitRoll: " << pSlayerAttacker->getName().c_str() << " --> ";	} 	else if (pAttacker->isVampire())	{		Vampire* pVampireAttacker = dynamic_cast<Vampire*>(pAttacker);		Assert(pVampireAttacker != NULL);		ToHit = pVampireAttacker->getToHit();		ToHit = (ToHit_t)getPercentValue(ToHit, VampireTimebandFactor[timeband]);		// 攫哩啊 弥利拳甫 窍霸 等促搁.. -_-;		// Creature俊促啊 Penalty包访 member甸阑 持绰霸 唱阑 巴捞促.		if (pAttacker->isFlag(Effect::EFFECT_CLASS_HYMN))		{			EffectHymn* pHymn = dynamic_cast<EffectHymn*>( pAttacker->getEffectManager()->findEffect( Effect::EFFECT_CLASS_HYMN ) );				ToHit = ToHit*(100-pHymn->getToHitPenalty())/100;		}	} 	else if (pAttacker->isOusters())	{		Ousters* pOustersAttacker = dynamic_cast<Ousters*>(pAttacker);		Assert(pOustersAttacker != NULL);		ToHit = pOustersAttacker->getToHit();	} 	else if (pAttacker->isMonster())	{		Monster* pMonsterAttacker = dynamic_cast<Monster*>(pAttacker);		Assert(pMonsterAttacker != NULL);		ToHit = pMonsterAttacker->getToHit();		ToHit = (ToHit_t)getPercentValue(ToHit, MonsterTimebandFactor[timeband]);		isMonster = true;		// 攫哩啊 弥利拳甫 窍霸 等促搁.. -_-;		// Creature俊促啊 Penalty包访 member甸阑 持绰霸 唱阑 巴捞促.		if (pAttacker->isFlag(Effect::EFFECT_CLASS_HYMN))		{			EffectHymn* pHymn = dynamic_cast<EffectHymn*>( pAttacker->getEffectManager()->findEffect( Effect::EFFECT_CLASS_HYMN ) );			ToHit = ToHit*(100-pHymn->getToHitPenalty())/100;		}	}	else	{		// 泅犁 农府媚狼 努贰胶绰 Slayer, Vampire, Monster, NPC 挥牢单...		// 捞鳖瘤 吭促绰 富篮 傍拜磊啊 NPC扼绰 富捞瘤.		// NPC AI绰 备泅登瘤 臼篮 惑怕捞骨肺, 公炼扒 府畔捞促.		return false;	}		// 规绢磊狼 叼奇胶甫 拌魂秦 霖促.	if (pDefender->isSlayer())	{		Slayer* pSlayerDefender = dynamic_cast<Slayer*>(pDefender);		Defense = pSlayerDefender->getDefense();		//cout << pSlayerDefender->getName().c_str() << " : ";	} 	else if (pDefender->isVampire())	{		Vampire* pVampireDefender = dynamic_cast<Vampire*>(pDefender);		Defense = pVampireDefender->getDefense();		Defense = (Defense_t)getPercentValue(Defense, VampireTimebandFactor[timeband]);	} 	else if (pDefender->isOusters())	{		Ousters* pOustersDefender = dynamic_cast<Ousters*>(pDefender);		Defense = pOustersDefender->getDefense();	} 	else if (pDefender->isMonster())	{		Monster* pMonsterDefender= dynamic_cast<Monster*>(pDefender);		Defense = pMonsterDefender->getDefense();		Defense = (Defense_t)getPercentValue(Defense, MonsterTimebandFactor[timeband]);	}	else	{		// 泅犁 农府媚狼 努贰胶绰 Slayer, Vampire, Monster, NPC 挥牢单...		// 捞鳖瘤 吭促绰 富篮 规绢磊啊 NPC扼绰 富捞瘤.		// NPC AI绰 备泅登瘤 臼篮 惑怕捞骨肺, 公炼扒 府畔捞促.		return false;	}	int RandValue = Random(0, 100);	int Result    = 0;	if (ToHit >= Defense) 	{		// 捧三捞 叼奇胶焊促 臭篮 版快俊绰 嘎免 犬伏捞 蚕...臭促.#ifdef __CHINA_SERVER__		Result = min(90, (int)(((ToHit - Defense) / 1.5) + 60) + ToHitBonus);#else		Result = min(95, (int)(((ToHit - Defense) / 3) + 50) + ToHitBonus/2);#endif	} 	else 	{		// 捧三捞 叼奇胶焊促 撤篮 版快俊绰 嘎免 犬伏捞 腹捞 冻绢柳促.#ifdef __CHINA_SERVER__		if( isMonster ) {			Result = max(10, (int)(60 - ((Defense - ToHit) / 1.5) + ToHitBonus));		} else {			Result = max(20, (int)(60 - ((Defense - ToHit) / 1.5) + ToHitBonus));		}#else//		if( isMonster ) {			Result = max(5, (int)(50 - ((Defense - ToHit) / 3) + ToHitBonus/2));//		} else {//			Result = max(20, (int)(50 - ((Defense - ToHit) / 3) + ToHitBonus/2));//		}#endif	}	//cout << ToHit << " --> " << Defense << " : " << RandValue << "<=" << Result 	//		<< (RandValue <= Result? "Success" : "Fail") << endl;	if (RandValue <= Result) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// 老馆 傍拜 hitroll 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccess(ToHit_t ToHit, Creature* pDefender, int ToHitBonus){	Assert(pDefender != NULL);	Zone* pZone = pDefender->getZone();	Assert( pZone != NULL );	// 公利惑怕 眉农. by sigi. 2002.9.5	if (pDefender->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE))	{		return false;	}	Defense_t Defense  = 0;	uint      timeband = pZone->getTimeband();	// 规绢磊狼 叼奇胶甫 拌魂秦 霖促.	if (pDefender->isSlayer())	{		Slayer* pSlayerDefender = dynamic_cast<Slayer*>(pDefender);		Defense = pSlayerDefender->getDefense();	} 	else if (pDefender->isVampire())	{		Vampire* pVampireDefender = dynamic_cast<Vampire*>(pDefender);		Defense = pVampireDefender->getDefense();		Defense = (Defense_t)getPercentValue(Defense, VampireTimebandFactor[timeband]);	} 	else if (pDefender->isOusters())	{		Ousters* pOustersDefender = dynamic_cast<Ousters*>(pDefender);		Defense = pOustersDefender->getDefense();	} 	else if (pDefender->isMonster())	{		Monster* pMonsterDefender= dynamic_cast<Monster*>(pDefender);		Defense = pMonsterDefender->getDefense();		Defense = (Defense_t)getPercentValue(Defense, MonsterTimebandFactor[timeband]);	}	else	{		// 泅犁 农府媚狼 努贰胶绰 Slayer, Vampire, Monster, NPC 挥牢单...		// 捞鳖瘤 吭促绰 富篮 规绢磊啊 NPC扼绰 富捞瘤.		// NPC AI绰 备泅登瘤 臼篮 惑怕捞骨肺, 公炼扒 府畔捞促.		return false;	}	int RandValue = Random(0, 100);	int Result    = 0;	if (ToHit >= Defense) 	{		// 捧三捞 叼奇胶焊促 臭篮 版快俊绰 嘎免 犬伏捞 蚕...臭促.#ifdef __CHINA_SERVER__		Result = min(90, (int)(((ToHit - Defense) / 1.5) + 60) + ToHitBonus);#else		Result = min(95, (int)(((ToHit - Defense) / 3) + 50) + ToHitBonus/2);#endif	} 	else 	{		// 捧三捞 叼奇胶焊促 撤篮 版快俊绰 嘎免 犬伏捞 腹捞 冻绢柳促.#ifdef __CHINA_SERVER__		Result = max(20, (int)(60 - ((Defense - ToHit) / 1.5) + ToHitBonus));#else		Result = max(5, (int)(50 - ((Defense - ToHit) / 3) + ToHitBonus/2));#endif	}	if (RandValue <= Result) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢侩 付过 hitroll 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessMagic(Slayer* pSlayer, SkillInfo* pSkillInfo, SkillSlot* pSkillSlot){	Assert(pSlayer != NULL);	Assert(pSkillInfo != NULL);	Assert(pSkillSlot != NULL);	int RandValue = Random (1, 100);#ifdef __CHINA_SERVER__	int SuccessRatio = (int)(45 - pSkillInfo->getLevel() / 2 + (int)((pSlayer->getINT() + pSkillSlot->getExpLevel()) / 2.5));#else	int SuccessRatio = (int)(60 - pSkillInfo->getLevel() / 3 + (int)((pSlayer->getINT() + pSkillSlot->getExpLevel()) / 2.5));#endif	// 浇饭捞绢 伎橇 胶懦老 版快 弥家 犬伏捞 50%捞促.	if ( isSlayerSelfSkill( pSkillSlot->getSkillType() ) )		SuccessRatio = max( 50, SuccessRatio );	if (RandValue < SuccessRatio ) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢侩 付过 hitroll 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessMagic(Vampire* pVampire, SkillInfo* pSkillInfo, VampireSkillSlot* pVampireSkillSlot, int BonusPoint){	Assert(pVampire != NULL);	Assert(pSkillInfo != NULL);	Assert(pVampireSkillSlot != NULL);	int RandValue = Random(1, 100); 	int Success = (int)(45 - pSkillInfo->getLevel() / 2 + (pVampire->getINT() + pVampire->getLevel()) / 4);	if ( BonusPoint != 0 )	{		Success = getPercentValue( Success, 100 + BonusPoint );	}		if ( RandValue < Success ) return true;	//	if (RandValue < (int)(45 - pSkillInfo->getLevel() / 2 + (pVampire->getINT() + pVampire->getLevel()) / 4)) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// 酒快胶磐胶侩 付过 hitroll 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessMagic(Ousters* pOusters, SkillInfo* pSkillInfo, OustersSkillSlot* pOustersSkillSlot, int BonusPoint){	Assert(pOusters != NULL);	Assert(pSkillInfo != NULL);	Assert(pOustersSkillSlot != NULL);	int RandValue = Random(1, 100); //	int Success = (int)( 45 - pSkillInfo->getLevel() / 2 + (pOusters->getINT() + pOusters->getLevel())/10 );	int Success = (int)( 45 + (pOusters->getINT() + pOusters->getLevel())/4 + pOustersSkillSlot->getExpLevel()/3 );	if ( isOustersSelfSkill( pOustersSkillSlot->getSkillType() ) )	{		Success = max( Success, 60 );	}	if ( BonusPoint != 0 )	{		Success = getPercentValue( Success, 100 + BonusPoint );	}		if ( RandValue < Success ) return true;		return false;} //////////////////////////////////////////////////////////////////////////////// 阁胶磐侩 老馆 付过 疙吝 奔覆 窃荐//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessMagic(Monster* pMonster, SkillInfo* pSkillInfo){	Assert(pMonster != NULL);	Assert(pSkillInfo != NULL);	int ratio = (int)(45 - pSkillInfo->getLevel() / 2 + (pMonster->getINT() + pMonster->getLevel()) / 4);	if (rand()%100 < ratio) return true;	return false;}//////////////////////////////////////////////////////////////////////////////// 轨颇捞绢 棺 阁胶磐侩 软趋 疙吝 奔覆 窃荐//////////////////////////////////////////////////////////////////////////////// multiplier绰 焊烹篮 3捞促. 溜.. 33%捞窍啊 软趋 啊瓷荐摹牢单..// 付胶磐牢 版快俊绰 multiplier甫 2肺 秦辑.. 50% 捞窍啊 软趋 啊瓷荐摹肺 荤侩// by sigi. 2002.9.16//////////////////////////////////////////////////////////////////////////////bool HitRoll::isSuccessBloodDrain(Creature* pAttacker, Creature* pDefender, int multiplier){	Assert(pAttacker != NULL);	Assert(pDefender != NULL);	Zone* pZone = pAttacker->getZone();	Assert( pZone != NULL );	// 公利惑怕 眉农. by sigi. 2002.9.5	if (pDefender->isFlag(Effect::EFFECT_CLASS_NO_DAMAGE))	{		return false;	}	const int normalMultiplier = 3;	// master flag甫 parameter肺 罐绊 捞扒 哗具茄促. - -;	bool bHPCheck  = false;	bool bEffected = false;	uint timeband  = pZone->getTimeband();	int ToHit      = 0;	int Defense    = 0;	int VampLevel  = 0;	int OtherLevel = 0;	int ratio      = 0;	// 鸥百捞 乔甫 弧 荐 乐绰 惑怕牢瘤,	// 叼奇胶啊 倔付牢瘤, 饭骇捞 倔付牢瘤甫 拌魂茄促.	if (pDefender->isSlayer())	{		Slayer* pTargetSlayer = dynamic_cast<Slayer*>(pDefender);		int MaxHP = pTargetSlayer->getHP(ATTR_MAX);		int CurHP = pTargetSlayer->getHP(ATTR_CURRENT);			bHPCheck  = (CurHP*multiplier <= MaxHP) ? true : false;		bEffected = (normalMultiplier==multiplier) && pTargetSlayer->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		Defense   = pTargetSlayer->getDefense();		OtherLevel = 			pTargetSlayer->getSTR(ATTR_CURRENT) +			pTargetSlayer->getDEX(ATTR_CURRENT) +			pTargetSlayer->getINT(ATTR_CURRENT) +			pTargetSlayer->getSkillDomainLevel(SKILL_DOMAIN_BLADE) +			pTargetSlayer->getSkillDomainLevel(SKILL_DOMAIN_SWORD) +			pTargetSlayer->getSkillDomainLevel(SKILL_DOMAIN_GUN) +			pTargetSlayer->getSkillDomainLevel(SKILL_DOMAIN_HEAL) +			pTargetSlayer->getSkillDomainLevel(SKILL_DOMAIN_ENCHANT);		OtherLevel = (int)(OtherLevel/350);		// 眉仿捞 酒流 1/3捞 逞芭唱,		// 捞固 软趋阑 寸茄 惑怕扼搁 软趋阑 且 荐 绝促.		if (!bHPCheck || bEffected) return false;	}	else if (pDefender->isVampire())	{		Vampire* pTargetVampire = dynamic_cast<Vampire*>(pDefender);		int MaxHP = pTargetVampire->getHP(ATTR_MAX);		int CurHP = pTargetVampire->getHP(ATTR_CURRENT);				bHPCheck   = (CurHP*multiplier <= MaxHP) ? true : false;		//bEffected  = pTargetVampire->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		bEffected = (normalMultiplier==multiplier) && pTargetVampire->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN);		Defense    = pTargetVampire->getDefense() + pTargetVampire->getLevel() / 5;		OtherLevel = pTargetVampire->getLevel();		Defense = (Defense_t)getPercentValue(Defense, VampireTimebandFactor[timeband]);		// 眉仿捞 酒流 1/3捞 逞芭唱,		// 捞固 软趋阑 寸茄 惑怕扼搁 软趋阑 且 荐 绝促.		if (!bHPCheck || bEffected) return false;

⌨️ 快捷键说明

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