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

📄 abilitybalance.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////// Filename    : AbilityBalance.cpp// Written By  : 辫己刮// Description :// 阿 农府媚 喊肺 瓷仿摹甫 拌魂窍绰 窃荐甸阑 葛酒初篮 颇老捞促.//////////////////////////////////////////////////////////////////////////////#include "AbilityBalance.h"#include "Slayer.h"#include "Vampire.h"#include "Monster.h"#include "ItemUtil.h"#include "Properties.h"#include "VariableManager.h"// 捞芭 官差搁 Slayer::load(), Vampire::load(), Ousters::load() 俊辑// maxHP甫 拌魂秦辑 汲沥秦林绰 何盒档 官层拎具 茄促. by sigi.HP_t computeHP(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	HP_t   maxHP = 0;	double CSTR   = pAttr->nSTR;	double CDEX   = pAttr->nDEX;	double CINT   = pAttr->nINT;	double CLEVEL = pAttr->nLevel;	Item* pWeapon = pAttr->pWeapon;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		maxHP = (int)(CSTR*2.00);#ifndef __CHINA_SERVER__		if ( pWeapon != NULL )		{			switch ( pWeapon->getItemClass() )			{				case Item::ITEM_CLASS_SWORD:					maxHP += pAttr->pDomainLevel[SKILL_DOMAIN_SWORD];					break;				case Item::ITEM_CLASS_BLADE:					maxHP += pAttr->pDomainLevel[SKILL_DOMAIN_BLADE];					break;				case Item::ITEM_CLASS_CROSS:					maxHP += pAttr->pDomainLevel[SKILL_DOMAIN_HEAL];					break;				case Item::ITEM_CLASS_MACE:					maxHP += pAttr->pDomainLevel[SKILL_DOMAIN_ENCHANT];					break;				case Item::ITEM_CLASS_AR:				case Item::ITEM_CLASS_SMG:				case Item::ITEM_CLASS_SR:				case Item::ITEM_CLASS_SG:					maxHP += pAttr->pDomainLevel[SKILL_DOMAIN_GUN];					break;				default:					break;			}		}#endif		maxHP = getPercentValue( maxHP, g_pVariableManager->getVariable(SLAYER_HP_RATIO) );		maxHP = min((int)maxHP, SLAYER_MAX_HP);	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		maxHP = (int)(CSTR*2.00 + CINT + CDEX + CLEVEL);		maxHP = getPercentValue( maxHP, g_pVariableManager->getVariable(VAMPIRE_HP_RATIO) );		maxHP = min((int)maxHP, VAMPIRE_MAX_HP);		//cout << "STR:" << CSTR << " DEX/2:" << (int)(CDEX/2) << " INT:" << CINT << " LEV:" << CLEVEL << " HPMAX:" << maxHP << endl;	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if (CClass == Creature::CREATURE_CLASS_OUSTERS)	{		maxHP = (int)(CSTR*1.50 + CINT/2.00 + CDEX + CLEVEL );		maxHP = getPercentValue( maxHP, g_pVariableManager->getVariable(OUSTERS_HP_RATIO) );		maxHP = min((int)maxHP, OUSTERS_MAX_HP);	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		maxHP = (int)(CSTR*(2.00 + CLEVEL/100.0));		maxHP += getPercentValue(maxHP, enhance);		maxHP = getPercentValue( maxHP, g_pVariableManager->getVariable(MONSTER_HP_RATIO) );		maxHP = min((int)maxHP, MONSTER_MAX_HP);	}	if ( g_pConfig->hasKey("Hardcore") && g_pConfig->getPropertyInt("Hardcore")!=0 )	{		maxHP *= 3;	}	return maxHP;}MP_t computeMP(Creature::CreatureClass CClass, BASIC_ATTR* pAttr){	Assert(pAttr != NULL);	MP_t   maxMP = 0;	double CINTE = pAttr->nINT;	double CLEVEL = pAttr->nLevel;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		maxMP = (int)(CINTE*2.0);		maxMP = min((int)maxMP, SLAYER_MAX_MP);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		maxMP = (int)(CINTE + CLEVEL);		maxMP = min((int)maxMP, OUSTERS_MAX_MP);	}	return maxMP;}ToHit_t computeToHit(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	ToHit_t toHit             = 0;	double  CDEX              = pAttr->nDEX;	double  CLEVEL            = pAttr->nLevel;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		toHit = (int)(CDEX/2);		if (pAttr->pWeapon != NULL)		{			// 公荤 公扁唱, 焙牢 公扁甫 甸绊 乐阑 版快,			// 档皋牢 饭骇俊 狼秦辑 焊呈胶 器牢飘啊 粮犁茄促.			if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_SWORD)			{				toHit += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_SWORD]*1.5);			}			else if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_BLADE)			{				toHit += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_BLADE]*1.5);			}			else if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_CROSS)			{				toHit += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_HEAL]*1.5);			}			else if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_MACE)			{				toHit += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_ENCHANT]*1.5);			}			else if (isArmsWeapon(pAttr->pWeapon))			{				toHit += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_GUN]*1.5);			}		}		toHit = min((int)toHit, SLAYER_MAX_TOHIT);	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		toHit = (int)(CDEX + CLEVEL/2.5);		toHit = min((int)toHit, VAMPIRE_MAX_TOHIT);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		toHit = (int)(CDEX/2.0 + CLEVEL);		toHit = min((int)toHit, OUSTERS_MAX_TOHIT);	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		toHit = (int)((CDEX/2.0) * (1.0 + CLEVEL/100.0));		toHit += getPercentValue(toHit, enhance);		toHit = min((int)toHit, MONSTER_MAX_TOHIT);	}	return toHit;}Defense_t computeDefense(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	Defense_t Defense = 0;	double    CDEX    = pAttr->nDEX;	double    CLEVEL  = pAttr->nLevel;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		Defense = (int)(CDEX/2.0);		Defense = min((int)Defense, SLAYER_MAX_DEFENSE);	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		Defense = (int)(CDEX/2.0 + CLEVEL/5.0);		Defense = min((int)Defense, VAMPIRE_MAX_DEFENSE);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		Defense = (int)(CDEX/2.0 + CLEVEL/5.0);		Defense = min((int)Defense, OUSTERS_MAX_DEFENSE);	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		Defense = (int)((CDEX/2.0) * (1.0 + CLEVEL/100.0));		Defense += getPercentValue(Defense, enhance);		Defense = min((int)Defense, MONSTER_MAX_DEFENSE);	}	return Defense;}Protection_t computeProtection(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	Protection_t Protection  = 0;	double       CSTR        = pAttr->nSTR;	//double       CSTRBonus   = pAttr->nSTR/15.0;	double       CLEVEL      = pAttr->nLevel;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		//Protection = (int)(CSTRBonus);		Protection = (int)(CSTR);		Protection = min((int)Protection, SLAYER_MAX_PROTECTION);	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		//Protection = (int)(CSTR/5.0 + CLEVEL/5.0);		Protection = (int)(CSTR + CLEVEL / 5.0 );		Protection = min((int)Protection, VAMPIRE_MAX_PROTECTION);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		Protection = (int)(CSTR + CLEVEL/10.0 );		Protection = min((int)Protection, OUSTERS_MAX_PROTECTION);	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		Protection = (int)(CSTR / (5.0 - CLEVEL/100.0));		Protection += getPercentValue(Protection, enhance);		Protection = min((int)Protection, MONSTER_MAX_PROTECTION);	}	return Protection;}Damage_t computeMinDamage(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	Damage_t minDamage  = 0;	double   CSTR       = pAttr->nSTR;	double   CLEVEL     = pAttr->nLevel;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		minDamage = (int)(CSTR/15.0);		if (pAttr->pWeapon != NULL)		{			// 焙牢 公扁 鞍篮 版快俊绰 塞俊 狼茄 焊呈胶啊 粮犁窍瘤 臼绰促.			if (isArmsWeapon(pAttr->pWeapon))			{				minDamage = 1;			}		}		minDamage += g_pVariableManager->getCombatSlayerDamageBonus();		minDamage = min((int)minDamage, SLAYER_MAX_DAMAGE);	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		minDamage = (int)(CSTR/6.0 + CLEVEL/5.0);		minDamage += g_pVariableManager->getCombatVampireDamageBonus();				minDamage = min((int)minDamage, VAMPIRE_MAX_DAMAGE);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		minDamage = (int)(CSTR/10.0 + CLEVEL/10.0);		minDamage = min((int)minDamage, OUSTERS_MAX_DAMAGE);	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		minDamage = (int)(CSTR / (6.0 - CLEVEL/100.0));		minDamage += getPercentValue(minDamage, enhance);		minDamage = getPercentValue(minDamage, g_pVariableManager->getVariable( MONSTER_DAMAGE_RATIO ));		minDamage = min((int)minDamage, MONSTER_MAX_DAMAGE);	}	return minDamage;}Damage_t computeMaxDamage(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	Damage_t maxDamage = 0;	double   CSTR      = pAttr->nSTR;	double   CLEVEL    = pAttr->nLevel;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		maxDamage = (int)(CSTR/10.0);		if (pAttr->pWeapon != NULL)		{			// 焙牢 公扁 鞍篮 版快俊绰 塞俊 狼茄 焊呈胶啊 粮犁窍瘤 臼绰促.			if (isArmsWeapon(pAttr->pWeapon))			{				maxDamage = 2;			}		}		 		maxDamage += g_pVariableManager->getCombatSlayerDamageBonus();		maxDamage = min((int)maxDamage, SLAYER_MAX_DAMAGE);	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		maxDamage = (int)(CSTR / 4.0 + CLEVEL / 5.0);		maxDamage += g_pVariableManager->getCombatVampireDamageBonus();		maxDamage = min((int)maxDamage, VAMPIRE_MAX_DAMAGE);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		maxDamage = (int)(CSTR / 6.0 + CLEVEL / 6.0);		maxDamage = min((int)maxDamage, OUSTERS_MAX_DAMAGE);	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		maxDamage = (int)(CSTR / (4.0 - CLEVEL/100.0));		maxDamage += getPercentValue(maxDamage, enhance);		maxDamage = getPercentValue(maxDamage, g_pVariableManager->getVariable( MONSTER_DAMAGE_RATIO ));		maxDamage = min((int)maxDamage, MONSTER_MAX_DAMAGE);	}		return maxDamage;}Speed_t computeAttackSpeed(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	Speed_t  AttackSpeed       = 0;	double   CSTR              = pAttr->nSTR;	double   CDEX              = pAttr->nDEX;	double   CLEVEL            = pAttr->nLevel;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		// 扁夯利栏肺绰 塞俊 狼秦 绢琶 胶乔靛啊 搬沥等促.		AttackSpeed = (int)(CSTR/10.0);		if (pAttr->pWeapon != NULL)		{			// 公荤 公扁唱, 焙牢 公扁甫 甸绊 乐阑 版快,			// 档皋牢 饭骇俊 狼秦辑 焊呈胶 器牢飘啊 粮犁茄促.			if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_SWORD)			{				AttackSpeed += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_SWORD]/5.0);			}			else if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_BLADE)			{				AttackSpeed += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_BLADE]/5.0);			}			else if (isArmsWeapon(pAttr->pWeapon))			{				// 焙牢 公扁老 版快俊绰 郸胶俊 狼秦 绢琶 胶乔靛啊 搬沥等促.				AttackSpeed = (int)(CDEX/10.0);				AttackSpeed += (int)(pAttr->pDomainLevel[SKILL_DOMAIN_GUN]/5.0);			}		}		AttackSpeed = min( (Speed_t)SLAYER_MAX_ATTACK_SPEED, AttackSpeed );	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		AttackSpeed = (int)(CDEX/10.0 + 10.0);		AttackSpeed = min( (Speed_t)VAMPIRE_MAX_ATTACK_SPEED, AttackSpeed );	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		AttackSpeed = (int)(CDEX/10.0 + CLEVEL/10.0);		AttackSpeed = min( (Speed_t)OUSTERS_MAX_ATTACK_SPEED, AttackSpeed );	}		return AttackSpeed;}int computeCriticalRatio(Creature::CreatureClass CClass, BASIC_ATTR* pAttr, int enhance){	Assert(pAttr != NULL);	int    CriticalRatio = 0;	double CDEX          = pAttr->nDEX;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		if (pAttr->pWeapon != NULL)		{			if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_SWORD)			{				CriticalRatio = (int)(pAttr->pDomainLevel[SKILL_DOMAIN_SWORD]/5.0);			}			else if (pAttr->pWeapon->getItemClass() == Item::ITEM_CLASS_BLADE)			{				CriticalRatio = (int)(pAttr->pDomainLevel[SKILL_DOMAIN_BLADE]/5.0);			}			else if (isArmsWeapon(pAttr->pWeapon))			{				// 焙牢 公扁老 版快俊绰 郸胶俊 狼秦 绢琶 胶乔靛啊 搬沥等促.				CriticalRatio = (int)(pAttr->pDomainLevel[SKILL_DOMAIN_GUN]/5.0);			}		}	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		CriticalRatio = (int)((CDEX-20.0)/30.0);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		CriticalRatio = (int)((CDEX-20.0)/30.0);	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{		CriticalRatio = (int)((CDEX-20.0)/30.0);		CriticalRatio += getPercentValue(CriticalRatio, enhance);	}	return CriticalRatio;}Steal_t computeStealRatio(Creature::CreatureClass CClass, Steal_t amount, BASIC_ATTR* pAttr){	// 父老 胶瓶窍绰 剧捞 0捞扼搁, 胶瓶且 犬伏 开矫 0捞促.	if (amount == 0) return 0;	Steal_t result = 0;	if (CClass == Creature::CREATURE_CLASS_SLAYER)	{		if (pAttr->pWeapon != NULL)		{			switch (pAttr->pWeapon->getItemClass())			{				case Item::ITEM_CLASS_SWORD:				case Item::ITEM_CLASS_BLADE:					result = (Steal_t)(90.0 - (float)amount * 1.4);					break;				default:					result = (Steal_t)(65.0 - (float)amount * 1.4);					break;			}		}		else		{			result = (Steal_t)(90.0 - (float)amount * 1.4);		}	}	else if (CClass == Creature::CREATURE_CLASS_VAMPIRE)	{		result = (Steal_t)(90.0 - (float)amount * 1.4);	}	// 酒快胶磐胶 眠啊 by bezz 2003.04.22	else if ( CClass == Creature::CREATURE_CLASS_OUSTERS )	{		result = (Steal_t)(90.0 - (float)amount * 1.4 );	}	else if (CClass == Creature::CREATURE_CLASS_MONSTER)	{	}	return result;}

⌨️ 快捷键说明

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